Microservices are powerful, but it isn’t a secret that they come with many challenges. Codefresh is acutely aware of this as we built our platform on microservices. We know what it means to maintain a fast-moving and complex software service that must remain highly available.
One of the most common challenges we deal with is maintaining complex relationships at deployment time among individual microservices. Fortunately, ArgoCD has a solution for this with the app of apps pattern, and Codefresh has first-class support in our GitOps dashboard.
I am sure you are wondering if this is something you should invest time and resources in. Here are some considerations to help determine if the app of apps pattern can help you streamline your software delivery.
Declarative Sets of Applications
These are sets of applications that you would like deployed, configured, and removed together declaratively. Your software portfolio may include applications that are required to be deployed together to be fully operational. While this isn’t ideal in microservices, this is a good time to evaluate something like an umbrella Helm chart and could also be a good fit for the app of apps pattern for consistency and enforcement.
It also isn’t uncommon to have sets of applications that may be loosely related but would still benefit significantly from deployment together. This can simplify your ability to work cross-functionally with other development areas and supporting teams.
Please keep in mind that this is an opportunity to streamline your deployments, not to create hard coupling between services. If your answer to an architectural debate during development is “we can just deploy them together,” you may need to reevaluate your application’s purpose and design. With that out of the way, I am stepping down from the soapbox now.
Many teams are looking for a clean way to define an “environment” and its accompanying applications. If you need to create a new static environment, it is very simple to copy the declarative configuration for an existing environment and persist the new environment configuration files with minor changes.
The same approach can also greatly simplify the process of standing up an ephemeral environment during the development and testing phases. This is a very common pattern that allows for developer isolation, flexibility, and faster feature testing. Ephemeral environments are becoming critically important as the need for predictable automated testing only increases over time.
In the event of a disaster, having a declarative configuration for your environment can significantly speed up recovery time. I would recommend having other mechanisms in place to help augment the app of apps configuration, but this can surely improve the visibility of the expected state of an environment in a disaster recovery scenario.
Your development groups may have a strong desire or need to enforce standards across a set of applications that are related. The AppProject CRD (parent app for app of apps) can help enforce consistency across all child applications.
Here are examples of some of the options you have
- Restrict the repositories that child applications can retrieve manifests from
- Specify the clusters and namespaces where applications can be deployed
- Align applications to specific roles and responsibilities from the parent application
Please keep in mind that this can be used in coordination with Git policies that can reduce access to the parent applications configuration. You can utilize separate repositories for the parent app and each accompanying child app.
This allows you to have true isolation of concerns if a different group owns the deployment vs the application development streams. I would further recommend wrapping any commits to these repositories in a pull request process. This can allow a level of visibility to stakeholders on all sides even if they are not necessarily the approvers.
App of apps is another tool in your toolbox. This is a very powerful option, but your goal should always be to simplify and automate your deployment process. Codefresh is dedicated to helping our customers streamline their software delivery. The addition of app of apps to our GitOps solution is yet another way to help empower those DevOps teams. If this sounds like a great fit for your needs, please check out the documentation on how to use it with Codefresh.
We also have a quick feature highlight video if you would like to see it in action