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.