应用清单

应用清单提供了一种供开发者以声明方式记录应用执行环境的方式。它们允许应用以一致的方式重复部署。

格式

清单是应用的根目录中的 YAML 文件。它们必须命名为 manifest.ymlmanifest.yaml

Kf 应用清单可以有一个顶级元素:applicationsapplications 元素可以包含一个或多个应用条目。

应用字段

以下字段对 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 容量。默认为 0.1(CPU 的 1/10)。
instances int 要运行的应用实例数。默认为 1。
routes object 应用应侦听的路由列表。如需了解详情,请参阅“路由字段”部分。
no-route boolean 如果设置为 true,则应用无法路由。
random-route boolean 如果设置为 true,则应用将获得随机路由。
timeout int 等待应用运行状况良好的秒数。
health-check-type string 使用 portprocessnonehttp 的健康检查类型。默认值:port
health-check-http-endpoint string 要作为健康检查的一部分进行定位的端点。仅在 health-check-typehttp 时有效。
command string 启动应用的命令。如果提供,则将其传递到容器入口点。
entrypoint string 替换应用容器的入口点。
args string[] 替换应用容器的参数。
ports object 要在容器上公开的端口列表。如果已提供,则此列表中的第一个条目将用作默认端口。

† 特定于 Kf

Docker 字段

以下字段对 application.docker 对象有效:

字段 类型 说明
image string 要使用的 Docker 映像。

路由字段

以下字段对 application.routes 对象有效:

字段 类型 说明
route string 指向应用的路由,包括主机名、网域和路径。
appPort int (可选)路由会将流量发送到的应用的自定义端口。

端口字段

以下字段对 application.ports 对象有效:

字段 类型 说明
port int 要在应用容器中公开的端口。
protocol string 要公开的端口的协议。必须为 tcphttphttp2。默认:tcp

示例

最小应用

这是一个简明清单,它将通过基于上传来源自动检测 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
  # 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 应用

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
  cpu: 2
  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 支持三种不同的健康检查类型:

  1. port(默认)
  2. http
  3. process(或none

porthttp 设置 Kubernetes 就绪性和活动性探测,以确保应用在向其发送流量之前已准备就绪。

port 健康检查将确保位于 $PORT 的端口正在被侦听。在后台,Kf 使用 TCP 探测。

http 健康检查将使用 health-check-http-endpoint 中配置的值来检查应用的健康状况。在后台,Kf 使用 HTTP 探测。

process 健康检查仅检查容器上运行的进程是否处于活动状态。它不会设置 Kubernetes 就绪性或活动性探测。

已知差异

以下是 Kf 清单和 CF 清单之间的已知差异:

  • Kf 不支持已弃用的 CF 清单字段。这包括清单的根级(应用除外)的所有字段和路由字段。
  • Kf 不支持以下 v2 清单字段:
    • docker.username
  • Kf 不支持自动检测 Docker 容器的端口。