Google Cloud Deploy에서 매니페스트 관리

이 페이지에서는 전달 파이프라인에서 각 대상에 대해 구성을 렌더링하도록 Google Cloud Deploy를 구성하는 방법을 설명합니다.

Google Cloud Deploy는 Skaffold를 사용해서 Kubernetes 매니페스트를 렌더링합니다. 이 서비스는 원시 매니페스트 렌더링 및 Helm, Kustomize, kpt와 같은 고급 매니페스트 관리 도구를 지원합니다.

렌더링 프로세스에는 두 가지 스테이지가 포함됩니다.

  1. 매니페스트 관리 도구는 매니페스트를 생성합니다.

  2. Skaffold는 매니페스트의 이미지 참조를 출시 버전에서 배포하려는 이미지로 바꿉니다.

이 페이지에는 Helm 및 Kustomize를 사용하는 구성 예시가 포함되어 있습니다.

Skaffold를 사용하여 구성 생성

Skaffold 구성 파일(skaffold.yaml)아직 없으면 Skaffold를 사용해서 저장소에 있는 항목에 따라 파일을 생성할 수 있습니다.

  1. Cloud SDK를 사용하여 Skaffold를 설치합니다.

    gcloud components install skaffold

  2. 매니페스트가 포함된 저장소에서 skaffold init를 실행합니다.

    skaffold init --skip-build

이 명령어는 저장소에서 skaffold.yaml 파일을 만듭니다. 이 파일은 해당 저장소에 있는 매니페스트를 참조합니다. 콘텐츠는 다음과 같습니다.

apiVersion: skaffold/v2beta15
kind: Config
metadata:
 name: sample-app
deploy:
 kubectl:
   manifests:
   - k8s-manifests/deployment.yaml
   - k8s-manifests/rbac.yaml
   - k8s-manifests/redis.yaml
   - k8s-manifests/service.yaml

원시 매니페스트 렌더링

원시 매니페스트는 Helm 또는 Kustomize와 같은 도구에서 관리되지 않는 매니페스트입니다. 따라서 클러스터에 배포 및 하이드레이션되기 전 사전 처리가 필요하지 않습니다.

기본적으로 Google Cloud Deploy는 skaffold render를 사용해서 Kubernetes 매니페스트를 렌더링하고 태그 지정되지 않은 이미지 이름을 배포하려는 컨테이너 이미지의 태그 지정된 이미지 이름으로 바꿉니다. 그런 후 출시 버전을 승격할 때 Google Cloud Deploy는 skaffold apply를 사용해서 매니페스트를 적용하고 이미지를 Google Kubernetes Engine 클러스터에 배포합니다.

기본 구성에서 deploy 스탠자는 다음과 같습니다.

deploy:
  kubectl:
    manifests:
      - PATH_TO_MANIFEST

여기에 전달할 수 있는 값에 대한 자세한 내용은 Skaffold 문서를 참조하세요.

Helm을 사용하여 렌더링

Google Cloud Deploy를 사용해서 Helm 차트를 렌더링할 수 있습니다. 이렇게 하려면 Skaffold 프로필의 deploy 스탠자에 Helm 차트 세부정보를 포함합니다.

이러한 각 정의는 다음과 같습니다.

apiVersion: skaffold/v2beta16
kind: Config
deploy:
 helm:
   releases:
     - name: RELEASE_NAME
       chartPath: PATH_TO_HELM_CHART
       artifactOverrides:
         image: IMAGE_NAME

각 항목의 의미는 다음과 같습니다.

RELEASE_NAME은 이 출시 버전에 대한 Helm 차트 인스턴스의 이름입니다.

PATH_TO_HELM_CHART는 패키지된 Helm 차트 또는 압축해제된 Helm 차트 디렉터리에 대한 로컬 경로입니다.

IMAGE_NAME은 배포 중인 컨테이너 이미지의 이름입니다.

Helm 차트는 차트에 배포할 이미지를 정의하는 값 image 매개변수를 포함해야 합니다.

Skaffold 문서에 설명된 대로 추가 Helm 구성 옵션을 사용할 수 있습니다.

Kustomize를 사용하여 렌더링

Google Cloud Deploy에 Kustomize를 사용할 수 있습니다. 이렇게 하려면 skaffold.yaml 프로필 구성의 deploy 스탠자 내에서 Kustomization 파일을 가리킵니다.

skaffold.yaml의 각 해당 profile 아래에서 Kustomize를 사용 중인 각 대상에 대해 개별 Kustomize 구성을 포함합니다.

이러한 각 정의는 다음과 같습니다.

apiVersion: skaffold/v2beta16
kind: Config
metadata:
 name: getting-started-kustomize
deploy:
 kustomize:
   paths:
     - PATH_TO_KUSTOMIZE

각 항목의 의미는 다음과 같습니다.

PATH_TO_KUSTOMIZE는 Kustomization 파일을 가리킵니다. 기본값은 ["."]입니다.

Skaffold 문서에 설명된 대로 추가 Kustomize 구성 옵션을 사용할 수 있습니다.

대상별로 다른 매니페스트 구성

각 대상에는 약간씩 다른 구성이 필요한 경우가 많습니다. 예를 들어 스테이징 배포에서보다 프로덕션 배포에 더 많은 복제본이 포함될 수 있습니다.

각 변형을 서로 다른 Skaffold 프로필로 제공하여 각 대상에 대해 서로 다른 매니페스트 집합을 렌더링할 수 있습니다.

원시 매니페스트를 사용하는 프로필

원시 매니페스트를 사용할 때는 대상에 따라 서로 다른 파일에서 Google Cloud Deploy를 연결할 수 있습니다. 다음과 같이 구성할 수 있습니다.

apiVersion: skaffold/v2beta16
kind: Config
metadata:
 name: getting-started-kustomize
profiles:
 - name: prod
   deploy:
     kubectl:
       manifests:
         - prod.yaml
 - name: staging
   deploy:
     kubectl:
       manifests:
         - staging.yaml

Kustomize를 사용하는 프로필

Kustomize를 사용하는 스테이징 및 프로덕션에 대해 서로 다른 프로필이 포함되어 각 프로필이 서로 다른 Kustomization에 연결되는 예시 skaffold.yaml은 다음과 같습니다.

apiVersion: skaffold/v2beta16
kind: Config
profiles:
 - name: prod
   deploy:
     kustomize:
       paths:
         - environments/prod
 - name: staging
   deploy:
     kustomize:
       paths:
         - environments/staging

전달 파이프라인에 참조되는 프로필

skaffold.yaml에 정의된 이러한 프로파일은 대상별로 전달 파이프라인 구성에서 참조됩니다.

serialPipeline:
 stages:
 - targetId: staging-target
   profiles:
   - staging
 - targetId: prod-target
   profiles:
   - prod

다음 단계