빌드팩은 Kf에서 애플리케이션의 소스 코드를 실행 가능한 이미지로 변환하는 데 사용됩니다. 클라우드 네이티브 빌드팩은 최신 Buildpack API v3를 사용하며, VMware나 Heroku를 비롯한 기업들은 기존 빌드팩에 v3 지원을 적극적으로 추가합니다.
Kf는 Buildpack API 사양의 V2 및 V3을 모두 준수하는 빌드팩을 지원합니다.
V2와 V3 빌드팩 비교
V2 빌드팩 | V3 빌드팩 | |
---|---|---|
대체 이름 | Cloud Foundry 빌드팩 | 클라우드 네이티브 빌드팩(CNB), 빌더 이미지 |
상태 | 교체 중 | 사용 중 |
소유권 | Cloud Foundry | Buildpacks.io |
스택 | 빌더 및 런타임에서 공유 | 빌더 및 런타임에서 선택적으로 다름 |
로컬 개발 | 불가능 | 예(pack CLI 사용 시) |
커스텀 빌드팩 | 런타임에 사용 가능 | 빌더에 빌드되어야 함 |
빌드팩 수명주기
단계 | Cloud Foundry | 빌드팩 V2가 있는 Kf | 빌드팩 V3이 있는 Kf |
---|---|---|---|
소스 위치 | BITS 서비스 | Container Registry | Container Registry |
빌드팩 위치 | BOSH/HTTP | HTTP | Container Registry |
스택 위치 | BOSH | Container Registry | Container Registry |
결과 | Droplet (스택 없는 앱 바이너리) | 이미지 (스택 위의 Droplet) | 이미지 |
런타임 | 스택 위에 Droplet 놓고 실행 | 생성된 이미지 실행 | 생성된 이미지 실행 |
Kf는 항상 빌드 프로세스의 결과로 전체 실행 가능한 이미지를 생성합니다. 반면에 Cloud Foundry는 빌드 시 실행 가능한 이미지의 일부를 생성하고 나머지는 런타임에 추가됩니다.
Kf는 다음 이유 때문에 항상 전체 이미지를 생성하는 모델을 따르기로 선택했습니다.
- 이미지를 로컬에서 내보내고 실행할 수 있으며 정적으로 검사 가능
- Binary Authorization 같은 도구를 사용하여 보안 및 감사 개선
- 앱 배포 재현 가능
Kf 및 빌드팩
Kf는 빌드팩 및 스택의 전역 목록을 kf
네임스페이스의 config-defaults
ConfigMap에 저장합니다.
각 공간은 해당 상태 필드에 이러한 빌드팩을 반영합니다.
이름이 buildpack-docs
인 공간의 경우 다음을 실행하여 전체 공간 구성을 확인할 수 있습니다.
$ kf space buildpack-docs
Getting Space buildpack-docs
API Version: kf.dev/v1alpha1
Kind: Space
Metadata:
Creation Timestamp: 2020-02-14T15:09:52Z
Name: buildpack-docs
Self Link: /apis/kf.dev/v1alpha1/spaces/buildpack-docs
UID: 0cf1e196-4f3c-11ea-91a4-42010a80008d
Status:
Build Config:
Buildpacks V2:
- Name: staticfile_buildpack
URL: https://github.com/cloudfoundry/staticfile-buildpack
Disabled: false
- Name: java_buildpack
URL: https://github.com/cloudfoundry/java-buildpack
Disabled: false
Stacks V2:
- Image: cloudfoundry/cflinuxfs3
Name: cflinuxfs3
Stacks V3:
- Build Image: cloudfoundry/cnb:cflinuxfs3
Description: A large Cloud Foundry stack based on Ubuntu 18.04
Name: org.cloudfoundry.stacks.cflinuxfs3
Run Image: cloudfoundry/run:full-cnb
Build Config
섹션에는 확인할 세 가지 필드가 있습니다.
- Buildpacks V2에는 실행 순서대로 V2 호환 빌드팩 목록이 포함됩니다.
- 스택 V2는 V2 빌드팩 빌드를 트리거하도록 선택할 수 있는 스택을 나타냅니다.
- 스택 V3는 V3 빌드팩 빌드를 트리거하도록 선택할 수 있는 스택을 나타냅니다.
kf stacks
으로 스택을 나열할 수도 있습니다.
$ kf stacks
Getting stacks in Space: buildpack-docs
Version Name Build Image Run Image Description
V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3
V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04
V3 빌드 이미지에 이미 기본 제공 빌드팩이 포함되기 때문에 목록을 가져오려면 kf buildpacks
를 사용해야 합니다.
$ kf buildpacks
Getting buildpacks in Space: buildpack-docs
Buildpacks for V2 stacks:
Name Position URL
staticfile_buildpack 0 https://github.com/cloudfoundry/staticfile-buildpack
java_buildpack 1 https://github.com/cloudfoundry/java-buildpack
V3 Stack: org.cloudfoundry.stacks.cflinuxfs3:
Name Position Version Latest
org.cloudfoundry.jdbc 0 v1.0.179 true
org.cloudfoundry.jmx 1 v1.0.180 true
org.cloudfoundry.go 2 v0.0.2 true
org.cloudfoundry.tomcat 3 v1.1.102 true
org.cloudfoundry.distzip 4 v1.0.171 true
org.cloudfoundry.springboot 5 v1.1.2 true
...
V3 빌드팩 맞춤설정
정확히 액세스 권한이 있어야 하는 빌드팩으로 자체 빌더 이미지를 만들어서 개발자에게 제공되는 빌드팩을 맞춤설정할 수 있습니다. 다른 작성자가 게시한 빌더 이미지를 사용할 수도 있습니다.
타사 빌더 이미지 사용
게시된 CNB 스택 목록은 빌드팩 CLI pack
에서 확인할 수 있습니다. 이 문서의 현재 작성 시점에서 pack suggest-stacks
의 출력은 다음과 같습니다.
$ pack suggest-stacks
Stacks maintained by the community:
Stack ID: heroku-18
Description: The official Heroku stack based on Ubuntu 18.04
Maintainer: Heroku
Build Image: heroku/pack:18-build
Run Image: heroku/pack:18
Stack ID: io.buildpacks.stacks.bionic
Description: A minimal Cloud Foundry stack based on Ubuntu 18.04
Maintainer: Cloud Foundry
Build Image: cloudfoundry/build:base-cnb
Run Image: cloudfoundry/run:base-cnb
Stack ID: org.cloudfoundry.stacks.cflinuxfs3
Description: A large Cloud Foundry stack based on Ubuntu 18.04
Maintainer: Cloud Foundry
Build Image: cloudfoundry/build:full-cnb
Run Image: cloudfoundry/run:full-cnb
Stack ID: org.cloudfoundry.stacks.tiny
Description: A tiny Cloud Foundry stack based on Ubuntu 18.04, similar to distroless
Maintainer: Cloud Foundry
Build Image: cloudfoundry/build:tiny-cnb
Run Image: cloudfoundry/run:tiny-cnb
Heroku에서 게시된 스택을 사용하도록 Kf를 수정하려면 kf
네임스페이스에서 config-defaults
ConfigMap을 수정합니다.
다음과 같이 spaceStacksV3
키에 항목을 추가합니다.
$ kubectl edit configmap config-defaults -n kf
spaceStacksV3: |
- name: org.cloudfoundry.stacks.cflinuxfs3
description: A large Cloud Foundry stack based on Ubuntu 18.04
buildImage: cloudfoundry/cnb:cflinuxfs3
runImage: cloudfoundry/run:full-cnb
- name: heroku-18
description: The official Heroku stack based on Ubuntu 18.04
buildImage: heroku/pack:18-build
runImage: heroku/pack:18
그런 후 다시 stacks
를 실행합니다.
$ kf stacks
Getting stacks in Space: buildpack-docs
Version Name Build Image Run Image Description
V2 cflinuxfs3 cloudfoundry/cflinuxfs3 cloudfoundry/cflinuxfs3
V3 org.cloudfoundry.stacks.cflinuxfs3 cloudfoundry/cnb:cflinuxfs3 cloudfoundry/run:full-cnb A large Cloud Foundry stack based on Ubuntu 18.04
V3 heroku-18 heroku/pack:18-build heroku/pack:18 The official Heroku stack based on Ubuntu 18.04
자체 빌더 이미지 만들기
Buildpack CLI pack
은 자체 빌더 이미지를 만들기 위해 사용됩니다. pack
의 create-builder
를 사용하여 빌더 작업 문서에 따라 자체 빌더 이미지를 만들 수 있습니다. 만든 다음에는 이를 Container Registry에 푸시하고 config-defaults
ConfigMap에 추가합니다.
기본 스택 설정
매니페스트에 제공되지 않은 경우 앱에 기본 스택이 할당됩니다. 기본 스택은 V2 또는 V3 스택 목록에서 첫 번째 항목입니다. 재정의되지 않은 한 Cloud Foundry와의 호환성을 위해 V2 스택이 선택됩니다.
kf
네임스페이스의 config-defaults
ConfigMap에서 spaceDefaultToV3Stack
필드를 "true"
로 설정하여 Kf가 V2 대신 V3 스택을 사용하게 강제할 수 있습니다.
$ kubectl edit configmap config-defaults -n kf
spaceDefaultToV3Stack: "true"
이 옵션은 또한 spec.buildConfig.defaultToV3Stack
필드 설정을 true
또는 false
로 변경하여 공간별 기준으로 수정될 수 있습니다. 설정되지 않은 경우 config-defaults
ConfigMap의 값이 사용됩니다.
spaceDefaultToV3Stack 에 config-defaults 값 |
공간의 spec.buildConfig.defaultToV3Stack |
기본 스택 |
---|---|---|
unset | unset | V2 |
"false" |
unset | V2 |
"true" |
unset | V3 |
모두 | false |
V2 |
모두 | true |
V3 |