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 must be 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:
port
(default)http
process
(ornone
)
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.