Google Cloud Deploy에서 Skaffold 시작하기

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 문서에서는 다음을 포함하여 Google Cloud Deploy의 일부로 Skaffold를 사용하는 방법을 설명합니다.

  • Google Cloud Deploy 배송 파이프라인에서 사용할 Skaffold 구성
  • Helm 및 Kustomize와 같은 서드 파티 렌더링 도구로 Skaffold 및 Google Cloud Deploy 사용
  • 로컬 개발에 Skaffold 사용(선택사항)
  • 지속적 통합 및 지속적 배포(CI/CD)에 Skaffold 사용(선택사항)

Skaffold를 사용해야 하는 이유

Google Cloud Deploy에서 Skaffold를 사용하는 이유와 Skaffold 구성을 관리해야 하는 이유를 알고 싶다면 읽어보세요.

CI/CD를 사용해 본 경험이 있지만 현재 Skaffold를 사용하지 않는 경우

Skaffold는 개발자의 생산성을 향상시키는 오픈소스 명령줄 도구입니다. 지속적 개발, 지속적 통합(CI), 지속적 배포(CD)를 조정합니다.

Skaffold는 플러그인 가능한 아키텍처를 사용해 이식성이 뛰어난 선언적 구성을 제공하므로 렌더링 단계에 다양한 도구를 사용할 수 있습니다.

출시 버전이 생성되면 Google Cloud Deploy에서 Skaffold를 호출하여 매니페스트를 렌더링한 후 이 매니페스트를 적용하여 진행의 각 대상에 애플리케이션을 배포합니다. 배포 시 Skaffold 상태 점검을 통해 성공적으로 배포되었는지 대상 클러스터를 모니터링합니다.

지속적 개발을 위한 Skaffold

지속적 개발에 Skaffold를 사용하면 코드를 변경할 때 이미지를 빌드, 테스트하고 클러스터(또는 Minikube)에 배포할 수 있습니다. VS Code용 Cloud CodeIntelliJ용 Cloud Code IDE 확장 프로그램에서 Skaffold를 Visual Studio Code 및 JetBrains IDE에 통합하여 지속적 개발을 지원합니다.

지속적 배포를 위한 Skaffold

빌드, 배포, 렌더링, 적용 단계에서 지속적 배포에 Skaffold를 사용할 수도 있습니다. Google Cloud Deploy는 Skaffold의 렌더링 및 적용 기능을 사용합니다. Google Cloud Deploy를 사용하려면 적어도 유효한 skaffold.yaml 구성 파일이 있어야 합니다.

Skaffold를 통해 HelmKustomize와 같은 서드 파티 매니페스트 관리 도구와 통합할 수도 있습니다. 그러면 매니페스트 렌더링 시 이러한 도구의 기능을 사용할 수 있습니다. kubectl이 이러한 매니페스트의 배포자로 유지됩니다.

Kubernetes에 처음 배포하는 경우

Skaffold를 사용하면 모든 배포의 기본 매니페스트 집합을 구성한 다음 Google Cloud Deploy를 통해 Skaffold의 렌더링 엔진을 사용하여 기본 매니페스트 중 하나의 각 배포별 매니페스트를 렌더링한 후 배포할 수 있습니다.

Skaffold 및 Google Cloud Deploy를 Helm 및 Kustomize와 같은 일반적인 매니페스트 템플릿 도구와 함께 사용하는 방법의 예시가 포함된 매니페스트 관리에서 자세한 내용을 알아볼 수 있습니다.

Google Cloud Deploy 작동에 필요한 사항

기본 Google Cloud Deploy 배포 파이프라인을 사용하려면 skaffold.yaml 구성 파일에 최소한 다음 구성이 필요합니다.

  • 모든 skaffold.yaml 구성에 필요한 헤더 정보는 다음과 같습니다.

    apiVersion: skaffold/v2beta28
    Kind: Config
    
  • GKE 또는 Anthos에 배포하기 위한 deploy.kubectl 또는 Cloud Run에 배포하기 위한 deploy.cloudrun을 포함하는 deploy 스탠자

    GKE의 경우: yaml deploy: kubectl: manifests: - ...

    manifests에 모든 Kubernetes 원시 매니페스트의 목록이 표시됩니다. 렌더러(예: Helm 또는 Kustomize)를 사용하여 배포할 매니페스트를 렌더링하려는 경우 skaffold.yaml에 Kustomize 지원 추가를 참조하고 이러한 도구를 사용하도록 Skaffold를 구성하는 방법에 대한 안내는 skaffold.yaml에 Helm 지원 추가를 참조하세요.

    Cloud Run의 경우:

    metadata:
      name:
    manifests:
      rawYaml:
      - ...
    deploy:
      cloudrun: {}
    

skaffold.yaml 파일 만들기

Google Cloud Deploy는 애플리케이션 렌더링 및 배포에 Skaffold를 사용합니다.

적어도 사용할 매니페스트를 식별하는 skaffold.yaml 파일을 제공해야 합니다. 예를 들면 다음과 같습니다.

apiVersion: skaffold/v2beta28
kind: Config
deploy:
  kubectl:
    manifests:
      - MANIFEST

이 구성에서 MANIFEST는 Skaffold에서 처리할 매니페스트 하나 이상의 경로입니다.

Google Cloud Deploy의 skaffold.yaml 자동 생성

skaffold.yaml 파일은 없지만 단일 Kubernetes 매니페스트 또는 단일 Cloud Run 서비스 정의 파일이 있는 경우 Google Cloud Deploy에서 이 파일을 자동으로 생성할 수 있습니다.

생성된 Skaffold 파일은 출시 버전이 완료된 후 Cloud Storage 소스 스테이징 디렉터리에서 사용할 수 있습니다.

다음 명령어에는 Kubernetes 매니페스트를 전달하는 --from-k8s-manifest 플래그가 포함되어 있습니다. Google Cloud Deploy는 매니페스트의 정보를 사용하여 skaffold.yaml을 생성한 후 출시 버전에 사용합니다.

gcloud deploy releases create  RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION

Cloud Run 서비스 YAML에서 skaffold.yaml을 생성하려면 동일한 명령어를 사용하되, --from-k8s-manifest 대신 --from-run-manifest를 사용합니다.

이러한 플래그 중 하나를 --skaffold-file 플래그 또는 --source 플래그와 함께 사용하면 오류가 발생합니다.

생성된 skaffold.yaml 파일 사용

생성된 skaffold.yaml은 Google Cloud Deploy의 온보딩, 학습, 데모에 적합합니다. 이후 프로덕션 워크로드에서 Skaffold 프로필을 사용해 대상을 구분하는 skaffold 구성이 필요할 수 있습니다.

생성된 skaffold.yaml 파일을 구분된 자체 Skaffold 구성을 만들기 위한 시작점으로 사용할 때는 렌더링된 파일이 아닌 렌더링 소스 보관 파일의 파일을 사용해야 합니다. 렌더링 소스는 **출시 버전 세부정보 ** 페이지의 아티팩트 탭에서 다운로드할 수 있습니다.

  • 생성된 skaffold.yaml은 Cloud Storage 버킷에 저장된 렌더링 소스에 포함됩니다.

    .tar.gz 파일을 다운로드하고 추출하면 이 파일을 볼 수 있습니다.

  • 렌더링된 skaffold.yaml대상 아티팩트에서 사용할 수 있습니다.

    대상 아티팩트에서 아티팩트 보기를 클릭합니다.

    렌더링 소스 및 대상 아티팩트를 보여주는 출시 버전 세부정보 페이지

로컬 개발에 Skaffold 사용

Skaffold의 장점 중 하나는 CI/CD는 물론 로컬 개발에도 사용할 수 있다는 점입니다. dev 모드에서 Skaffold는 소스 파일을 감시하며 변경사항이 감지되면 Skaffold에서 이미지를 재빌드하고 다시 테스트하고 로컬 머신의 Minikube 클러스터(예: 컨테이너)에 다시 배포합니다.

이런 방식으로 Skaffold를 사용하는 경우 원격 배포와 동일한 명령어를 로컬에서 사용할 수 있습니다.

로컬 개발에 Skaffold를 사용하는 경우 대상에 별도의 Skaffold 프로필을 정의하고 로컬 개발을 위한 기본 배포 스탠자를 정의할 수 있습니다.

dev 모드를 중지하면 Skaffold가 클러스터에서 배포된 아티팩트를 삭제합니다.

CI/CD에 Skaffold 사용

Google Cloud Deploy는 개발 루프를 위한 Skaffold의 지속적 로컬 빌드 및 배포 외에도 Cloud Build와 같은 CI 도구와 Artifact Registry와 같은 이미지 레지스트리를 사용하여 컨테이너 이미지가 빌드된 경우 Skaffold의 CI/CD 기능을 사용하여 매니페스트를 렌더링 및 적용하고 정의된 대상에 애플리케이션을 배포합니다.

렌더링, 배포, 적용

Skaffold는 매니페스트 렌더링 프로세스를 배포와 분리합니다. Google Cloud Deploy는 skaffold render를 호출하여 매니페스트를 렌더링하고 skaffold apply를 호출하여 대상에 적용합니다.

렌더링과 적용을 분리하면 구성에서 애플리케이션의 전체 선언 상태를 캡처할 수 있으므로 롤백 등을 위해 애플리케이션을 안전하게 반복 가능한 방식으로 적용할 수 있습니다. 이렇게 하면 승인도 더 쉬워집니다. 매니페스트는 첫 번째 출시 전에 모든 대상에 렌더링되므로 각 대상에 적용될 렌더링된 YAML을 볼 수 있습니다.

Google Cloud Deploy는 다른 배포자를 사용한 애플리케이션 배포를 지원하지 않습니다. 하지만 Helm 또는 Kustomize와 같은 도구를 렌더링에 사용할 수 있습니다.

Google Cloud Deploy에서 kubectl을 배포자로 사용하여 배포하는 방법에 대한 자세한 내용은 Google Cloud Deploy 서비스 아키텍처를 참조하세요.

Skaffold 프로필 정보

skaffold.yaml에서 식별되는 별도의 Skaffold 프로필profiles: 스탠자에 만들 수 있습니다.

Google Cloud Deploy에서 Skaffold 프로필을 사용하는 경우 대상 전체 또는 일부에 대해 별도의 프로필을 만들 수 있습니다. 예를 들어 dev, staging, prod의 프로필을 각기 다르게 만들 수 있습니다.

Google Cloud Deploy에서 Skaffold를 사용하는 데 프로필이 필요하지는 않지만 여러 대상의 매니페스트 맞춤설정을 정의하는 데 유용합니다(예: 대상별로 서로 다른 Kustomize kustomization.yaml 파일 사용).

skaffold.yaml에 Kustomize 지원 추가

Kustomize 구성을 Google Cloud Deploy/Skaffold 구성과 통합하는 과정은 다음과 같이 이루어집니다.

  1. 구성 파일 중에 kustomization.yaml 파일을 포함합니다.

    구성 파일은 로컬 디렉터리 또는 Cloud Storage 버킷에 저장할 수 있습니다.

  2. skaffold.yaml 파일에서 프로필마다 deploy 스탠자를 만듭니다.

    프로필을 사용하지 않거나 프로필에 연결되지 않은 기본 배포 구성을 사용하는 경우 정의된 프로필 외에 deploy 스탠자를 포함할 수도 있습니다. 예를 들면 다음과 같습니다.

    apiVersion: skaffold/v2beta28
    kind: Config
    build:
      artifacts:
        - image: leeroy-web-profiles
          context: leeroy-web-profiles
        - image: leeroy-app-profiles
          context: leeroy-app-profiles
      googleCloudBuild:
        projectId: ${PROJECT_ID}
    profiles:
    - name: local
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/local
    - name: test
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/test
    - name: staging
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/staging
    - name: prod
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/prod
    

    여기에 표시된 Skaffold 구성에는 test, staging, prod 대상에 대한 별도의 프로필이 있습니다. 로컬 개발을 위한 프로필도 보여줍니다. 각 프로필에는 해당 대상에 사용할 Kustomization의 위치를 가리키는 경로가 있는 deploy.kustomize 스탠자가 있습니다.

skaffold.yaml에 Helm 지원 추가

Helm을 사용하여 매니페스트를 렌더링할 수 있습니다. Google Cloud Deploy는 Helm을 사용하여 애플리케이션을 배포하지 않으며 배포자로 kubectl만 지원합니다.

Helm을 사용하려면 skaffold.yaml 내에서 참조할 수 있는 어느 위치에든 저장된 하나 이상의 Helm 차트가 필요합니다. 이는 파일 시스템, 저장소(skaffold.yaml과 함께 있을 수 있음) 또는 Open Container Initiative(OCI) 저장소에 있을 수 있습니다.

Helm 차트를 사용하려면 helm 스탠자를 skaffold.yaml 파일에 추가합니다.

apiVersion: skaffold/v2beta28
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
deploy:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts

skaffold.yaml 참조에서 이 helm 스탠자에 필요한 사항을 보여줍니다.

Skaffold에서 kpt 사용

Google Cloud Deploy에서 Skaffold V1과 함께 kpt를 사용하지 않는 것이 좋습니다.

지원되지 않는 Skaffold 기능

다음 Skaffold 기능은 Google Cloud Deploy에서 사용할 수 없습니다.

다음 단계

  • Skaffold 사이트를 방문해서 Skaffold의 작동 방식과 기능을 확인합니다.

  • Kustomize 및 Skaffold 프로필로 Google Cloud Deploy를 사용하는 것을 실습합니다.

  • Google Cloud Deploy에서 사용할 Skaffold 버전을 선택하는 방법, Skaffold 버전이 변경되는 경우, 현재 사용 중인 버전을 확인하는 방법을 자세히 알아봅니다.

  • Helm, Kustomize, kpt와 같은 고급 매니페스트 관리 도구와 함께 Skaffold 프로필을 사용하는 방법을 알아봅니다.