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 100m (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. |
metadata
|
object
|
Additional tags for applications and their underlying resources. |
† 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 |
Metadata fields
The following fields are valid for application.metadata
objects:
Field | Type | Description |
---|---|---|
labels
|
string -> string map
|
Labels to add to the app and underlying application Pods. |
annotations
|
string -> string map
|
Annotations to add to the app and underlying application Pods. |
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
# Increase default CPU from .1 to .2
cpu: 200m
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
# 2 CPUs
cpu: 2000m
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.