Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Operations & DevOps Procedures and Practices at Ingenious

1. Introduction

In the ever-evolving landscape of technology, Ingenious saw the necessity of moving from traditional development practices to DevOps. Before this transformation, our company grappled with infrequent, bundled releases, which made bug identification and resolution a tedious task. Moreover, the absence of automated builds and the limited use of CI/CD systems hindered our efficiency.

  • Transition from bundled to frequent releases.

  • Embraced automation and CI/CD systems.

2. DevOps Culture and Collaboration

Instead of traditional siloed roles, our team members wear multiple hats. We don’t maintain separate development and operations teams. Every developer at Ingenious bears a part of the operational responsibility, ensuring that there's a constant exchange of knowledge, fostering a culture of continuous learning and collaboration.

  • Unified team structure.

  • Every developer actively engages in operations.

3. Continuous Integration (CI) and Continuous Deployment (CD)

Using Jenkins, orchestrated on Kubernetes, we've been able to create a seamless CI/CD pipeline. This setup supports a majority of our applications, including Java, PHP, and Typescript, thereby ensuring faster and more reliable builds. The integration of tools like JUnit and the Testcontainer library further bolsters our testing procedures.

  • Jenkins on Kubernetes for CI/CD.

  • Unified pipeline supporting diverse applications.

4. Infrastructure as Code (IaC)

We've progressively embraced IaC, utilizing Kubernetes yaml descriptors stored on Github. While some core components, like our Kubernetes clusters and PostgreSQL databases, were initially set up manually, we're gearing up to fully adopt IaC, ensuring enhanced resilience and preparedness for unforeseen challenges.

  • Current use of Kubernetes yaml descriptors on Github.

  • Plans for full IaC adoption.

5. Containerization and Orchestration

For containerization, we employ Jib for our Java applications and Dockerfiles for others. With approximately 60 deployments in our ecosystem, we've standardized deployment metadata using a centralized Jenkins-pipeline, ensuring uniformity across our infrastructure.

  • Jib for Java and Dockerfiles for other applications.

  • Centralized Jenkins-pipeline for deployment standardization.

6. Configuration Management

We prioritize a systematic configuration management approach. Currently, configurations are stored as yaml files in git repositories alongside their respective applications. We envision a more centralized method in the future using a mono-git-repo for all configurations, enhancing both security and manageability.

  • Yaml configurations stored with applications.

  • Future shift towards a mono-git-repo.

7. Performance Optimization and Scalability

Backed by Prometheus for monitoring, integrated with Grafana for visualization, our infrastructure is tailored for high performance. Additionally, the Google Cloud Monitoring & Logging tools play a pivotal role in our central logging system. Our infrastructure is also optimized for scalability, utilizing both Kubernetes and Google Cloud's auto-scaling features to handle traffic surges efficiently.

  • Prometheus and Grafana for monitoring and visualization.

  • Two-layered auto-scaling approach.

8. Feedback Loops and Continuous Improvement

Feedback is integral to our operations. Given our unified team structure, communication is streamlined, ensuring that insights from one team member benefit all. This feedback mechanism has often led to enhancements, particularly in our monitoring processes.

  • Seamless communication within the team.

  • Feedback-driven improvements.

Conclusion

At Ingenious, our DevOps journey exemplifies adaptability and a forward-looking perspective. Our strategies and practices, though evolving based on current needs, are always anchored in delivering technical excellence to meet the demands of our developers and software architects.

  • No labels