Application Delivery


Application Delivery manages configurations for your Google Kubernetes Engine (GKE) workloads declaratively with Git. It allows you to:

  • Manage configurations for multiple environments using a Git repository as a single source of truth.
  • Review changes before deployment through pull requests on GitHub or GitLab.
  • Test and promote changes across different environments.
  • Roll back changes quickly.
  • See your applications' version and status on the Google Cloud console.

Application Delivery consists of:

  • A command line program (appctl) that manages your Application Delivery configurations and repositories.
  • A GKE add-on that runs in your cluster.


Application Delivery allows you to create multiple environments (for example, prod and staging) of the same application using a base configuration and overlays. Overlays allow you to modify or add values to the environment's manifest.

Each environment corresponds to a namespace in your cluster.

Application Delivery and Git

Application Delivery stores your configuration in two private Git repositories., and GitLab Enterprise repositories are currently supported.

Configuration changes are made in the application repository. Configurations in the deployment repository are automatically generated from the application repository. Using these two repositories, Application Delivery introduces a separation of concerns between maintenance and the reviewed source of truth. The workflow encouraged by Application Delivery also prevents these two repositories from diverging.

Application repository

The application repository stores application configuration files in kustomize format. You find the expected version of kustomize tool by running appctl version.

When a user makes a configuration change, they create a git tag and then push the tag to the application repository.

Learn more about the layout of the application repository.

Deployment repository

The deployment repository stores generated Kubernetes manifests in Git branches. Each branch stores a configuration built with Application Delivery. You can apply configurations to environments.

A user renders the configuration and generates a pull request in the deployment repository with appctl prepare. An administrator reviews the change. After the pull request is merged, the user runs appctl apply. Application Delivery then updates the application's configuration on the cluster.

The deployment repository is stored in the .deployment directory in the local application repository.

Learn more about the layout of the deployment repository.

Application repository layout

The following directory structure is an example application repository of an app named myapp.

├── config
│   ├── base
│   │   ├── kustomization.yaml
│   │   └── myapp.yaml
│   └── envs
│       ├── prod
│       │   └── kustomization.yaml
│       └── staging
│           ├── kustomization.yaml
│           └── patch-replicas.yaml
└── delivery
    └── envs
        ├── prod.yaml
        └── staging.yaml

The following section describes directories in this repository. For more information on the contents of specific files, see Managing Applications with Application Delivery.

Configuration in the directory config/base applies to all environments. Additional configuration in config/envs can modify this configuration.

The repository contains information on two environments, defined in the directory config/envs: prod and staging.

The prod environment refers only to the configuration in config/base/myapp.yaml.

The staging environment has an additional customization in config/envs/staging/patch-replicas.yaml. This customization is referenced in config/envs/staging/kustomization.yaml.


Subdirectories in delivery/envs contain information on the GKE clusters that host each environment. These files are automatically generated and don't need to be modified directly.

Deployment repository layout

Each configuration tagged and pushed to an environment with Application Delivery is saved in a branch of the deployment repository.

Each branch contains:

  • A artifact.yaml file containing the Kubernetes manifests for that configuration. Application Delivery renders this from the application repository with Kustomize. The supported Kustomize version is shown by running appctl version.
  • A file with metadata.

Application Delivery and the Google Cloud console

Applications you deploy with Application Delivery are visible in the GKE Applications page. From there, you can see metadata about deployed applications such as version, revision history, health status, configuration and different environments.

What's next

Manage an application with Application Delivery.