V2 및 V3 빌드팩 비교

빌드팩은 소스 코드를 실행 파일로 변환하며 컨테이너를 만드는 간단하고 안정적이며 반복 가능한 방법을 제공하는 데 사용됩니다. Kf는 V2 및 V3 빌드팩을 모두 지원하며, 둘 사이의 차이점을 이해하는 것이 중요합니다.

V2 빌드팩

대부분의 Cloud Foundry 애플리케이션은 이미 V2 빌드팩을 사용합니다. Kf와 함께 V2 빌드팩을 사용하는 경우 수명 주기 바이너리 및 빌드팩이 git URL에서 다운로드되고 구성됩니다. 그런 다음 Kf는 lifecycle CLI를 사용하여 소스 코드에 대해 각 빌드팩을 실행합니다.

장점

  • 파이프라인 또는 코드 변경 없이 바로 사용할 수 있습니다.

단점

  • V3으로 대체된 기존 빌드팩입니다.
  • 성능과 안정성이 더 낮습니다. Kf 빌드 파이프라인에서 V2 빌드팩을 위한 IO가 더 많이 필요합니다.
  • 커뮤니티 리소스가 더 적습니다.
  • Kf에서 OSS Git 저장소만 지원합니다.

V3 빌드팩

V3 빌드팩은 잘 정의된 사양, CLI(), 다양한 언어 및 프레임워크를 중심으로 혁신을 이루는 커뮤니티를 포함한 Cloud Native Computing Foundation(CNCF) 프로젝트입니다. Google Cloud에는 자체 Google Cloud 빌드팩 집합도 있습니다.

V3 빌드팩에는 중요한 2가지 OCI 컨테이너가 있습니다.

  • 빌더 이미지
  • 실행 이미지

빌더 이미지

빌더 이미지는 소스 코드가 실행 가능한 컨테이너에 빌드되는 동안 사용됩니다. 이미지에는 소스 코드를 컴파일하는 데 필요한 detect 스크립트와 기타 유틸리티가 있습니다.

실행 이미지

실행 이미지는 컨테이너가 빌드된 기본 이미지입니다. 즉, 앱 실행 시 실행되는 기본 이미지입니다.

레이어

V3 빌드팩은 레이어를 사용하여 최종 컨테이너를 구성합니다. 빌드에 포함된 각 빌드팩에는 앱의 파일 시스템 및 환경 변수를 조작할 수 있는 기회가 주어집니다. 이 레이어 방식을 통해 빌드팩을 더 얇고 일반적으로 만들 수 있습니다.

V3 빌드팩은 OCI 컨테이너에 빌드됩니다. 이를 위해서는 V3 빌더 이미지가 Kf 빌드 파이프라인에서 액세스할 수 있는 컨테이너 레지스트리에 저장되어야 합니다. 빌드 파이프라인은 빌더 이미지를 사용하여 기본 스크립트를 적용해 소스 코드를 실행 가능한 컨테이너에 빌드합니다.

장점

단점

  • 코드/프로세스 업데이트가 필요할 수 있습니다. 예를 들어 자바 빌드팩에는 소스 코드가 필요한 반면 V2 빌드팩에는 jar 파일이 필요합니다.
  • V3 빌드팩이 더 최신 버전이며 추가 검증이 필요할 수 있습니다(커뮤니티에서 개발한 빌드팩 사용).

Kf 스택

스택 보기

앱을 푸시할 때 빌드 파이프라인에서 선택된 스택(--stack 플래그 또는 매니페스트를 통해 지정됨)을 기반으로 빌드팩을 결정합니다.

공간에서 사용할 수 있는 스택을 보려면 먼저 공간이 타겟팅되었는지 확인합니다.

kf target -s myspace

그런 다음 kf stacks 하위 명령어를 사용하여 스택을 나열하면 됩니다.

kf stacks

출력에 V2 및 V3 스택이 모두 표시됩니다.

Getting stacks in Space: myspace
Version  Name                                Build Image                                                                                          Run Image
V2       cflinuxfs3                          cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5      cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5
V3       kf-v2-to-v3-shim                    gcr.io/kf-releases/v2-to-v3:v2.7.0                                                                   gcr.io/buildpacks/gcp/run:v1                                                                       This is a stack added by the integration tests to assert that v2->v3 shim works
V3       google                              gcr.io/buildpacks/builder:v1                                                                         gcr.io/buildpacks/gcp/run:v1                                                                       Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
V3       org.cloudfoundry.stacks.cflinuxfs3  cloudfoundry/cnb:cflinuxfs3@sha256:f96b6e3528185368dd6af1d9657527437cefdaa5fa135338462f68f9c9db3022  cloudfoundry/run:full-cnb@sha256:dbe17be507b1cc6ffae1e9edf02806fe0e28ffbbb89a6c7ef41f37b69156c3c2  A large Cloud Foundry stack based on Ubuntu 18.04

스택 구성

kfsystem 커스텀 리소스를 수정하여 스택 구성을 업데이트할 수 있습니다.

kubectl edit kfsystem kfsystem

이 예에서는 Google Cloud 빌드팩을 V3 스택으로 설정합니다.

spec:
  kf:
    config:
      spaceStacksV3:
      - name: google
        description: Google buildpacks (https://github.com/GoogleCloudPlatform/buildpacks)
        buildImage: gcr.io/buildpacks/builder:v1
        runImage: gcr.io/buildpacks/gcp/run:v1

이제 이 새 스택을 푸시할 수 있습니다.

kf push myapp --stack google

이 예에서는 Ruby V2 빌드팩을 구성하고 빌드 파이프라인 기본값은 V2 스택을 사용하도록 설정합니다.

spec:
  kf:
    config:
      spaceDefaultToV3Stack: false
      spaceBuildpacksV2:
      - name: ruby_buildpack
        url: https://github.com/cloudfoundry/ruby-buildpack
      spaceStacksV2:
      - name: cflinuxfs3
        image: cloudfoundry/cflinuxfs3@sha256:5219e9e30000e43e5da17906581127b38fa6417f297f522e332a801e737928f5

V2에서 V3으로 빌드팩 마이그레이션

Kf는 kf-v2-to-v3-shim이라는 스택을 사용하여 표준 V2 빌드팩으로 빌드된 애플리케이션을 빌드하는 V3 스택을 제공합니다. kf-v2-to-v3-shim 스택은 표준 V3 빌드팩 API에 따라 생성됩니다. Google에서 관리하는 빌더 이미지는 표준 빌드팩 프로세스에 따라 각 Kf 출시로 생성됩니다. 빌더 이미지는 kf wrap-v2-buildpack 명령어에 사용되는 것과 동일한 프로세스로 생성된 V3 빌드팩 목록을 집계합니다. V3 빌드팩 이미지는 표준 V2 빌드팩 이미지를 사용하여 생성됩니다. V3 빌드팩에는 참조된 V2 빌드팩의 바이너리가 포함되어 있지 않습니다. 대신 V2 빌드팩 이미지가 참조되며, 비트는 앱 빌드 시 kf push를 실행하여 다운로드합니다.

앱 빌드 시 해당 git 저장소에서 V2 빌드팩이 다운로드됩니다. V3 감지가 실행되면 다운로드된 V2 감지 스크립트로 위임됩니다. 감지를 통과한 첫 번째 빌드팩 그룹의 경우 빌드 실행을 진행하여 다운로드된 V2 빌더 스크립트에 빌드 실행을 위임합니다.

다음 V2 빌드팩은 kf-v2-to-v3-shim 스택에서 지원됩니다.

Buildpack Git 저장소
java_buildpack https://github.com/cloudfoundry/java-buildpack
dotnet_core_buildpack https://github.com/cloudfoundry/dotnet-core-buildpack
nodejs_buildpack https://github.com/cloudfoundry/nodejs-buildpack
go_buildpack https://github.com/cloudfoundry/go-buildpack
python_buildpack https://github.com/cloudfoundry/python-buildpack
binary_buildpack https://github.com/cloudfoundry/binary-buildpack
nginx_buildpack https://github.com/cloudfoundry/nginx-buildpack

옵션 1: 표준 V2 빌드팩으로 빌드된 앱 마이그레이션

kf-v2-to-v3-shim 스택으로 앱을 빌드하려면 다음 명령어를 사용하세요.

kf push myapp --stack kf-v2-to-v3-shim

kf-v2-to-v3-shim 스택은 래핑된 V2 빌드팩으로 런타임을 자동으로 감지합니다. 결과 앱 이미지는 V3 표준 및 빌드 파이프라인을 사용하여 생성되지만, 이에 상응하는 V2 빌드팩의 빌더입니다.

옵션 2: 커스텀 V2 빌드팩으로 빌드된 앱 마이그레이션

Kf에는 V2 빌드팩을 사용하고 V3 빌드팩으로 래핑할 수 있는 빌드팩 마이그레이션 도구가 있습니다. 그러면 래핑된 빌드팩을 V3 빌드팩을 사용할 수 있는 모든 곳에서 사용할 수 있습니다.

kf wrap-v2-buildpack gcr.io/your-project/v2-go-buildpack https://github.com/cloudfoundry/go-buildpack --publish

그러면 gcr.io/your-project/v2-go-buildpack이라는 빌드팩 이미지가 생성됩니다. 그런 다음 빌더 만들기 문서에 따라 빌더를 만들 수 있습니다.

이 하위 명령어는 다음 CLI를 투명하게 사용합니다.

  • go
  • git
  • pack
  • unzip

Cloud Shell 편집기를 사용하여 각 하위 명령어를 올바른 경로에서 사용할 수 있고 하위 명령어가 올바른 버전인지 확인하는 것이 좋습니다.

알려진 문제

다음은 아직 Kf에서 작동하지 않는 기능입니다. 조직에서 우선순위가 높은 경우 영업 담당자에게 문의하시기 바랍니다.

  • V3 빌더 이미지의 비공개 Container Registry
  • V3 캐싱
  • Git 사용자 인증 정보를 요청하는 V2 빌드팩