앱 매니페스트

앱 매니페스트는 개발자가 앱 실행 환경을 선언적인 방법으로 기록할 수 있는 방법을 제공합니다. 이렇게 해서 일관적이고 재현 가능한 방법으로 앱을 배포할 수 있습니다.

형식

매니페스트는 앱의 루트 디렉터리에 있는 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 양입니다. 기본값은 0.1입니다(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-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 노출할 포트의 프로토콜입니다. tcp, http, http2여야 합니다. 기본값: tcp

예시

최소 앱

업로드된 소스를 기준으로 buildpack을 자동으로 감지해서 앱을 빌드하고 앱의 한 인스턴스를 배포하는 뼈대 매니페스트입니다.

---
applications:
- name: my-minimal-application

단순 앱

기존 자바 앱을 위한 전체 매니페스트입니다.

---
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 컨테이너에 대한 자동 감지 포트를 지원하지 않습니다.