Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Application Manager Brings GitOps to Google Kubernetes Engine

Application Manager Brings GitOps to Google Kubernetes Engine

This item in japanese

Google has launched Kubernetes Application Manager, intending to simplify application configuration and lifecycle management. It's an application delivery solution delivered as an add-on to Google Kubernetes Engine (GKE), which is also part of Anthos.

Kubernetes is widely used for managing containerised applications, but end-to-end Kubernetes lifecycle management (authoring, releasing and managing Kubernetes applications) can be challenging. Now available in beta, Application Manager allows developers to create a dev-to-production application delivery flow, while incorporating Google's best practices for managing release configurations. Additionally, Kubernetes application configurations can be too long and complex to manage at scale. In particular, an application that is deployed across test, staging and production release environments might have duplicate configurations stored in multiple Git repositories. Any change to one configuration needs to be replicated to the others, creating the potential for human error.

GitOps is a development practice where a definition of the infrastructure required to deploy an application is included in a repository alongside the application code. Developers declare the intended state of a system via configuration files, and a controller continual runs and synchronizes the environment state with the declared state. For example, if a change to the infrastructure is required, developers modify the associated declarative definition. This is then commited into Git repository, which records history and change control, and a controller applies this change to the target environment.

The Kubernetes application lifecycle consists of three main stages: authoring, releasing and managing. Authoring includes writing the application source code and app-specific Kubernetes configuration. Releasing includes making changes to code and/or configuration, then deploying those changes to different release environments. The managing phase includes operationalising applications at scale and in production. Currently, there are no well defined standards for these stages and users frequently search for best practices and recommendations.

Application Manager uses GitOps principles and leverages Git repositories to enable declarative configuration management. It can audit and review changes before they are deployed to environments, and it can automatically scaffold and enforce recommended Git repository structures. For Kubernetes Application Manager, repositories must be hosted in either GitHub or GitLab. Template-free customisation for configurations can be performed using Kustomize, a Kubernetes-native configuration management tool.

Application Manager runs inside a GKE cluster as a cluster add-on, and performs a number of tasks. It pulls Kubernetes manifests from a Git repository (within a git branch, tag or commit) and deploys the manifests as an application in the cluster. It reports metadata about deployed applications (e.g. version, revision history, health) and visualises the applications in Google Cloud Console

Application Manager can be used to release or deploy an application, from scaffolding Git repositories, defining application release environments, to deploying it in clusters. All these tasks are done by executing commands in appctl, Application Manager's command line interface.

Once installed, developers can use commands to manage applications, starting with creating repositories for an application. By default the developer gets two repositories, one for deployment configuration and one for application code. Then the developer defines the requirements for Kubernetes deployment in a YAML file according to a Kustomize configuration, uses appctl commands to add environments such as testing, staging and production, and prepares a tagged version of their application for deployment with the appctl prepare command. This generates a pull request in the repository, which development can review. Once approved, appctl is used to create the specified environment and deploy an application. Developers can also use appctl prepare to promote a deployment from one environment to another, such as from staging to production. They can also rollback deployments from here.

Application Manager also monitors deployed applications and surfaces data on version, revision history, and health in the Google Cloud Console. Third-party applications installed from the Google Cloud Marketplace could use Application Manager for updates so that developers could click an update button to install new versions of those applications into their GKE cluster.

An example workflow from Google is available via the Google Cloud Platform website.

Rate this Article