App Manifest

App manifests provide a way for developers to record their App's execution environment in a declarative way. They allow Apps to be deployed consistently and reproducibly.

Format

Manifests are YAML files in the root directory of the App. They mustbe named manifest.yml or manifest.yaml .

Kf App manifests are allowed to have a single top-level element: applications . The applications element can contain one or more application entries.

Application fields

The following fields are valid for objects under applications :

Field Type Description
name
string The name of the application. The app name should be lower-case alphanumeric characters and dashes. It must not start with a dash.
path
string The path to the source of the app. Defaults to the manifest's directory.
buildpacks
string[] A list of buildpacks to apply to the app.
stack
string Base image to use for to use for apps created with a buildpack.
docker
object A docker object. See the Docker Fields section for more information.
env
map Key/value pairs to use as the environment variables for the app and build.
services
string[] A list of service instance names to automatically bind to the app.
disk_quota
quantity The amount of disk the application should get. Defaults to 1GiB.
memory
quantity The amount of RAM to provide the app. Defaults to 1GiB.
cpu
quantity The amount of CPU to provide the application. Defaults to 0.1 (1/10th of a CPU).
instances
int The number of instances of the app to run. Defaults to 1.
routes
object A list of routes the app should listen on. See the Route Fields section for more.
no-route
boolean If set to true, the application will not be routable.
random-route
boolean If set to true, the app will be given a random route.
timeout
int The number of seconds to wait for the app to become healthy.
health-check-type
string The type of health-check to use port , process , none , or http . Default: port
health-check-http-endpoint
string The endpoint to target as part of the health-check. Only valid if health-check-type is http .
command
string The command that starts the app. If supplied, this will be passed to the container entrypoint.
entrypoint
string Overrides the app container's entrypoint.
args
string[] Overrides the arguments the app container.
ports
object A list of ports to expose on the container. If supplied, the first entry in this list is used as the default port.

† Unique to Kf

Docker fields

The following fields are valid for application.docker objects:

Field Type Description
image
string The docker image to use.

Route fields

The following fields are valid for application.routes objects:

Field Type Description
route
string A route to the app including hostname, domain, and path.
appPort
int (Optional) A custom port on the App the route will send traffic to.

Port fields

The following fields are valid for application.ports objects:

Field Type Description
port
int The port to expose on the App's container.
protocol
string The protocol of the port to expose. Must be tcp , http or http2 . Default: tcp

Examples

Minimal App

This is a bare-bones manifest that will build an App by auto-detecting the buildpack based on the uploaded source, and deploy one instance of it.

  --- 
 applications 
 : 
 - 
  
 name 
 : 
  
 my-minimal-application 
 

Simple App

This is a full manifest for a more traditional Java App.

  --- 
 applications 
 : 
 - 
  
 name 
 : 
  
 account-manager 
  
 # only upload src/ on push 
  
 path 
 : 
  
 src 
  
 # use the Java buildpack 
  
 buildpacks 
 : 
  
 - 
  
 java 
  
 env 
 : 
  
 # manually configure the buildpack's Java version 
  
 BP_JAVA_VERSION 
 : 
  
 8 
  
 ENVIRONMENT 
 : 
  
 PRODUCTION 
  
 # use less disk and memory than default 
  
 disk_quota 
 : 
  
 512M 
  
 memory 
 : 
  
 512M 
  
 # bump up the CPU 
  
 cpu 
 : 
  
 0.2 
  
 instances 
 : 
  
 3 
  
 # make the app listen on three routes 
  
 routes 
 : 
  
 - 
  
 route 
 : 
  
 accounts.mycompany.com 
  
 - 
  
 route 
 : 
  
 accounts.datacenter.mycompany.internal 
  
 - 
  
 route 
 : 
  
 mycompany.com/accounts 
  
 # set up a longer timeout and custom endpoint to validate 
  
 # when the app comes up 
  
 timeout 
 : 
  
 300 
  
 health-check-type 
 : 
  
 http 
  
 health-check-http-endpoint 
 : 
  
 /healthz 
  
 # attach two services by name 
  
 services 
 : 
  
 - 
  
 customer-database 
  
 - 
  
 web-cache 
 

Docker App

Kf can deploy Docker containers as well as manifest deployed App. These Docker Apps MUST listen on the PORT environment variable.

  --- 
 applications 
 : 
 - 
  
 name 
 : 
  
 white-label-app 
  
 # use a pre-built docker image (must listen on $PORT) 
  
 docker 
 : 
  
 image 
 : 
  
 gcr.io/my-company/white-label-app:123 
  
 env 
 : 
  
 # add additional environment variables 
  
 ENVIRONMENT 
 : 
  
 PRODUCTION 
  
 disk_quota 
 : 
  
 1G 
  
 memory 
 : 
  
 1G 
  
 cpu 
 : 
  
 2 
  
 instances 
 : 
  
 1 
  
 routes 
 : 
  
 - 
  
 route 
 : 
  
 white-label-app.mycompany.com 
 

App with multiple ports

This App has multiple ports to expose an admin console, website, and SMTP server.

  --- 
 applications 
 : 
 - 
  
 name 
 : 
  
 b2b-server 
  
 ports 
 : 
  
 - 
  
 port 
 : 
  
 8080 
  
 protocol 
 : 
  
 http 
  
 - 
  
 port 
 : 
  
 9090 
  
 protocol 
 : 
  
 http 
  
 - 
  
 port 
 : 
  
 2525 
  
 protocol 
 : 
  
 tcp 
  
 routes 
 : 
  
 - 
  
 route 
 : 
  
 b2b-admin.mycompany.com 
  
 appPort 
 : 
  
 9090 
  
 - 
  
 route 
 : 
  
 b2b.mycompany.com 
  
 # gets the default (first) port 
 

Health check types

Kf supports three different health check types:

  1. port (default)
  2. http
  3. process (or none )

port and http set a Kubernetes readiness and liveness probe that ensures the application is ready before sending traffic to it.

The port health check will ensure the port found at $PORT is being listened to. Under the hood Kf uses a TCP probe.

The http health check will use the configured value in health-check-http-endpoint to check the application's health. Under the hood Kf uses an HTTP probe.

A process health check only checks to see if the process running on the container is alive. It does NOT set a Kubernetes readiness or liveness probe.

Known differences

The following are known differences between Kf manifests and CF manifests:

  • Kf does not support deprecated CF manifest fields. This includes all fields at the root-level of the manifest (other than applications) and routing fields.
  • Kf is missing support for the following v2 manifest fields:
    • docker.username
  • Kf does not support auto-detecting ports for Docker containers.
Create a Mobile Website
View Site in Mobile | Classic
Share by: