应用清单提供了一种供开发者以声明方式记录应用执行环境的方式。它们允许应用以一致的方式重复部署。
格式
清单是应用的根目录中的 YAML 文件。它们必须命名为 manifest.yml
或 manifest.yaml
。
Kf 应用清单可以有一个顶级元素:applications
。applications
元素可以包含一个或多个应用条目。
应用字段
以下字段对 applications
下的对象有效:
字段 | 类型 | 说明 |
---|---|---|
name
|
string
|
应用名称。应用名称应为小写字母数字字符和短划线。不能以短划线开头。 |
path
|
string
|
应用来源的路径。默认为清单的目录。 |
buildpacks
|
string[]
|
要应用到应用的 buildpack 列表。 |
stack
|
string
|
用于使用 buildpack 创建的应用的基础映像。 |
docker
|
object
|
Docker 对象。如需了解详情,请参阅“Docker 字段”部分。 |
env
|
map
|
键/值对,用作应用和构建的环境变量。 |
services
|
string[]
|
要自动绑定到应用的服务实例名称的列表。 |
disk_quota
|
quantity
|
应用应获取的磁盘数量。默认为 1GiB。 |
memory
|
quantity
|
为应用提供的 RAM 容量。默认为 1GiB。 |
cpu †
|
quantity
|
为应用提供的 CPU 容量。默认为 100m(CPU 的 1/10)。 |
instances
|
int
|
要运行的应用实例数。默认为 1。 |
routes
|
object
|
应用应监听的路由列表。如需了解详情,请参阅“路由字段”部分。 |
no-route
|
boolean
|
如果设置为 true,则应用无法路由。 |
random-route
|
boolean
|
如果设置为 true,则应用将获得随机路由。 |
timeout
|
int
|
等待应用变为健康状况良好的秒数。 |
health-check-type
|
string
|
要使用的健康检查类型:port 、process 、none 或 http 。默认值:port |
health-check-http-endpoint
|
string
|
要作为健康检查的一部分进行定位的端点。仅在 health-check-type 为 http 时有效。 |
command
|
string
|
启动应用的命令。如果提供,则将其传递到容器入口点。 |
entrypoint †
|
string
|
替换应用容器的入口点。 |
args †
|
string[]
|
替换应用容器的参数。 |
ports †
|
object
|
要在容器上公开的端口列表。如果已提供,则此列表中的第一个条目将用作默认端口。 |
metadata
|
object
|
应用及其底层资源的其他标记。 |
† 特定于 Kf
Docker 字段
以下字段对 application.docker
对象有效:
字段 | 类型 | 说明 |
---|---|---|
image |
string |
要使用的 Docker 映像。 |
路由字段
以下字段对 application.routes
对象有效:
字段 | 类型 | 说明 |
---|---|---|
route |
string |
指向应用的路由,包括主机名、网域和路径。 |
appPort |
int |
(可选)路由会将流量发送到的应用的自定义端口。 |
端口字段
以下字段对 application.ports
对象有效:
字段 | 类型 | 说明 |
---|---|---|
port |
int |
要在应用容器中公开的端口。 |
protocol |
string |
要公开的端口的协议。必须为 tcp 、http 或 http2 。默认:tcp |
元数据字段
以下字段对 application.metadata
对象有效:
字段 | 类型 | 说明 |
---|---|---|
labels
|
string -> string map
|
要添加到应用和底层应用 Pod 的标签。 |
annotations
|
string -> string map
|
要添加到应用和底层应用 Pod 的注解。 |
示例
最小应用
这是一个简明清单,它将通过基于上传来源自动检测 buildpack 并部署其实例。
---
applications:
- name: my-minimal-application
简单应用
这是更传统的 Java 应用的完整清单。
---
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 应用
Kf 可以部署 Docker 容器以及列出已部署应用的清单。这些 Docker 应用必须侦听 PORT
环境变量。
---
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
具有多个端口的应用
此应用有多个端口可用于公开管理控制台、网站和 SMTP 服务器。
---
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
健康检查类型
Kf 支持三种不同的健康检查类型:
port
(默认)http
process
(或none
)
port
和 http
设置 Kubernetes 就绪性和活动性探测,以确保应用在向其发送流量之前已准备就绪。
port
健康检查将确保位于 $PORT
的端口正在被侦听。在后台,Kf 使用 TCP 探测。
http
健康检查将使用 health-check-http-endpoint
中配置的值来检查应用的健康状况。在后台,Kf 使用 HTTP 探测。
process
健康检查仅检查容器上运行的进程是否处于活动状态。它不会设置 Kubernetes 就绪性或活动性探测。
已知差异
以下是 Kf 清单和 CF 清单之间的已知差异:
- Kf 不支持已弃用的 CF 清单字段。这包括清单的根级(应用除外)的所有字段和路由字段。
- Kf 不支持以下 v2 清单字段:
docker.username
- Kf 不支持自动检测 Docker 容器的端口。