이 문서에서는 다음을 포함하여 Cloud Deploy의 일부로 Skaffold 사용을 시작하는 방법을 설명합니다.
- Cloud Deploy 배송 파이프라인에서 사용할 Skaffold 구성
- Helm 및 Kustomize와 같은 서드 파티 렌더링 도구로 Skaffold 및 Google Cloud Deploy 사용
- 로컬 개발에 Skaffold 사용(선택사항)
- 원하는 경우 지속적 통합 및 지속적 배포(CI/CD)에 Skaffold 사용
Skaffold를 사용해야 하는 이유
Cloud Deploy에서 Skaffold를 사용하는 이유와 Skaffold 구성을 관리해야 하는 이유를 알고 싶다면 읽어보세요.
CI/CD를 사용해 본 경험이 있지만 현재 Skaffold를 사용하지 않는 경우
Skaffold는 개발자 생산성을 개선하기 위한 오픈소스 명령줄 도구입니다. 지속적 개발, 지속적 통합(CI), 지속적 배포(CD)를 조정합니다.
Skaffold는 플러그인 가능한 아키텍처를 사용해 이식성이 뛰어난 선언적 구성을 제공하므로 렌더링 단계에 다양한 도구를 사용할 수 있습니다.
출시 버전이 생성되면 Cloud Deploy가 매니페스트를 렌더링하기 위해 Skaffold를 호출합니다. 배포 시 Cloud Deploy는 Skaffold를 다시 호출하여 애플리케이션을 배포할 매니페스트를 진행 중인 대상에 적용합니다. 배포 후 Skaffold는 상태 점검을 수행하여 대상 런타임에서 배포가 성공했는지 모니터링합니다.
지속적 개발을 위한 Skaffold
지속적 개발을 위한 Skaffold를 사용할 때는 코드를 변경할 때 이미지가 빌드 및 테스트되고 클러스터(또는 Minikube)에 배포됩니다. VS Code용 Cloud Code 및 IntelliJ용 Cloud Code IDE 확장 프로그램에서 Skaffold를 Visual Studio Code 및 JetBrains IDE에 통합하여 지속적 개발을 지원합니다.
지속적 배포를 위한 Skaffold
빌드, 배포, 렌더링, 적용 단계에서 지속적 배포에 Skaffold를 사용할 수도 있습니다. Cloud Deploy는 Skaffold의 렌더링 및 적용 기능을 사용합니다. Cloud Deploy를 사용하려면 적어도 유효한 skaffold.yaml
구성 파일이 있어야 합니다.
Skaffold를 통해 Helm 및 Kustomize와 같은 서드 파티 매니페스트 관리 도구와 통합할 수도 있습니다.
이 방식으로 Skaffold를 사용하면 이러한 도구 기능을 사용해서 매니페스트를 렌더링할 수 있습니다. kubectl
이 이러한 매니페스트의 배포자로 유지됩니다.
Kubernetes 배포가 처음인 경우
Skaffold를 사용하면 모든 배포의 기본 매니페스트 집합을 구성한 다음 Cloud Deploy를 통해 Skaffold의 렌더링 엔진을 사용하여 기본 매니페스트 중 하나의 각 배포별 매니페스트를 렌더링한 후 배포할 수 있습니다.
Skaffold 및 Cloud Deploy를 Helm 및 Kustomize와 같은 일반적인 매니페스트 템플릿 도구와 함께 사용하는 예시가 포함된 매니페스트 관리에서 자세한 내용을 알아봅니다.
Cloud Deploy 작동에 필요한 사항
기본 Cloud Deploy 배포 파이프라인을 사용하려면 skaffold.yaml
구성 파일에 최소한 다음 구성이 필요합니다.
모든
skaffold.yaml
구성에 필요한 헤더 정보는 다음과 같습니다.apiVersion: skaffold/v4beta7 kind: Config
모든 원시 Kubernetes 매니페스트를 나열하는 GKE, GKE Enterprise 또는 Cloud Run용
manifests
스탠자(Helm 또는 Kustomize와 같은 매니페스트 관리 도구를 사용하지 않는 경우)다음은 원시 Kubernetes 매니페스트를 사용하는 예시입니다.
manifests: rawYaml: - deployment.yaml
렌더기(Helm 또는 Kustomize)를 사용하여 매니페스트를 렌더링하려는 경우 이러한 도구를 사용하도록 Skaffold를 구성하는 방법에 대한 안내는 skaffold.yaml에 Helm 지원 추가 및 skaffold.yaml에 Kustomize 지원 추가를 참조하세요.
Helm 및 Kustomize 예시는 매니페스트 관리를 참조하세요.
GKE 또는 GKE Enterprise에 배포하기 위한
deploy.kubectl
또는 Cloud Run에 배포하기 위한deploy.cloudrun
을 사용하는deploy
스탠자입니다.GKE 및 GKE Enterprise 대상:
deploy: kubectl: {}
배포 스탠자는 매니페스트 스탠자에 제공된 애플리케이션 매니페스트를 배포합니다.
Cloud Run 대상:
deploy: cloudrun: {}
배포 스탠자는 매니페스트 스탠자에 제공된 애플리케이션 매니페스트를 배포합니다.
커스텀 대상을 사용하는 경우 skaffold.yaml
에 헤더(apiVersion
및 kind:
)와 커스텀 대상 유형에서 여전히 원격 Skaffold 구성을 참조하지 않는 경우에 커스텀 대상에서 사용할 커스텀 작업이 있어야 합니다.
skaffold.yaml
파일 만들기
Cloud Deploy는 Skaffold를 사용하여 애플리케이션을 렌더링하고 배포합니다.
출시 버전마다 최소한 사용할 매니페스트를 식별하는 skaffold.yaml
파일을 제공해야 합니다. 이 파일에 필요한 항목에 대한 안내는 이전 섹션을 참조하세요.
Cloud Deploy에서 skaffold.yaml
을 생성하도록 합니다.
skaffold.yaml
파일이 없고 단일 Kubernetes 매니페스트 또는 Cloud Run 서비스 정의 파일이 있으면 Cloud Deploy가 skaffold.yaml
파일을 생성할 수 있습니다.
생성된 Skaffold 파일은 출시 버전이 완료된 후 Cloud Storage 소스 스테이징 디렉터리에서 사용할 수 있습니다.
다음 명령어에는 Kubernetes 매니페스트를 전달하는 --from-k8s-manifest
플래그가 포함되어 있습니다. 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
은 Cloud Deploy의 온보딩, 학습, 데모에 적합합니다. 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 사용
지속적 로컬 빌드 및 배포에 Skaffold를 사용하는 것 외에도 CI/CD에 Skaffold를 사용할 수 있습니다. Cloud Deploy는 Cloud Build와 같은 CI 도구 및 Artifact Registry와 같은 이미지 레지스트리를 사용하여 빌드된 컨테이너 이미지를 고려해서 Skaffold에서 CI/CD 기능을 사용하여 매니페스트를 렌더링 및 적용하고 정의된 대상에 애플리케이션을 배포합니다.
렌더링, 배포, 적용
Skaffold는 매니페스트 렌더링 프로세스와 배포를 분리합니다.
Cloud Deploy는 skaffold render
를 호출하여 매니페스트를 렌더링하고 skaffold apply
를 호출하여 대상에 적용합니다.
렌더링과 적용 사이의 이러한 구분을 통해 구성에서 애플리케이션의 전체 선언 상태를 캡처할 수 있으므로, 롤백 등을 위해 안전하고 반복 가능한 방식으로 적용할 수 있습니다. 이 기술을 사용하면 승인도 쉬워집니다. 첫 번째 롤아웃 전에 모든 대상에 대해 매니페스트가 렌더링되기 때문에 각 대상에 적용되는 렌더링된 YAML을 볼 수 있습니다.
Cloud Deploy는 다른 배포자를 사용한 애플리케이션 배포를 지원하지 않습니다. 하지만 Helm 또는 Kustomize와 같은 도구를 사용하여 렌더링할 수 있습니다.
kubectl
을 배포자로 사용하여 Cloud Deploy에서 배포하는 방법에 대한 자세한 내용은 Cloud Deploy 서비스 아키텍처를 참조하세요.
Skaffold 프로필 정보
profiles:
스탠자의 skaffold.yaml
에서 식별되는 별도의 Skaffold 프로필을 만들 수 있습니다.
Cloud Deploy에서 Skaffold 프로필을 사용할 때는 모든 대상 또는 일부 대상에 대해 별도의 프로필을 만들 수 있습니다. 예를 들어 dev
, staging
, prod
의 프로필을 각기 다르게 만들 수 있습니다.
Cloud Deploy에서 Skaffold를 사용하는 데 프로필이 필요하지는 않지만 여러 대상의 매니페스트 맞춤설정을 정의하는 데 유용합니다(예: 대상별로 서로 다른 Kustomize kustomization.yaml
파일 사용).
skaffold.yaml
에 Kustomize 지원 추가
Kustomize 구성을 Cloud Deploy/Skaffold 구성과 통합하는 과정은 다음과 같이 이루어집니다.
구성 파일 중에
kustomization.yaml
파일을 포함합니다.구성 파일을 로컬 디렉터리 또는 Cloud Storage 버킷에 저장할 수 있습니다.
skaffold.yaml
파일에서 각 프로필에 대한deploy
스탠자를 만듭니다.프로필을 사용하지 않거나 프로필에 연결되지 않은 기본 배포 구성을 사용하는 경우 정의된 프로필 외에
deploy
스탠자를 포함할 수도 있습니다.다음은 프로필당
deploy
스탠자를 표시하고my-app
이라는 가상 샘플 앱을 사용하는 Skaffold 구성 예시입니다.apiVersion: skaffold/v4beta7 kind: Config build: artifacts: - image: my-app-web-profiles context: my-app-web-profiles - image: my-app-application-profiles context: my-app-application-profiles googleCloudBuild: projectId: ${PROJECT_ID} profiles: - name: local manifests: kustomize: paths: - my-app-application-profiles/kubernetes/local - name: test manifests: kustomize: paths: - my-app-application-profiles/kubernetes/test - name: staging manifests: kustomize: paths: - my-app-application-profiles/kubernetes/staging - name: prod manifests: kustomize: paths: - my-app-application-profiles/kubernetes/prod deploy: kubectl: {}
여기에 표시된 Skaffold 구성에는
test
,staging
,prod
대상에 대해 별도의 프로필이 있습니다. 또한 로컬 개발에 대한 프로필을 보여줍니다. 각 프로필에는 해당 대상에 사용할 kustomization의 위치를 가리키는 경로가 있는deploy.kustomize
스탠자가 있습니다.
skaffold.yaml
에 Helm 지원 추가
Helm을 사용하여 매니페스트를 렌더링할 수 있습니다. Cloud Deploy는 Helm을 사용하여 애플리케이션을 배포하지 않으며 배포자로 kubectl
만 지원합니다.
Helm을 사용하려면 skaffold.yaml
내에서 참조할 수 있는 어느 위치에든 저장된 하나 이상의 Helm 차트가 필요합니다. 이 위치는 파일 시스템, 저장소(skaffold.yaml
과 함께 있을 수 있음) 또는 Open Container Initiative(OCI) 저장소에 있을 수 있습니다.
Helm 차트를 사용하려면 helm
스탠자를 skaffold.yaml
파일에 추가합니다.
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
skaffold.yaml
참조에서 이 helm
스탠자에 필요한 사항을 보여줍니다.
지원되지 않는 Skaffold 기능
다음 Skaffold 기능은 Cloud Deploy에서 사용할 수 없습니다.
-
--module=
을 사용하여build
,render
,apply
등을 위한 특정 모듈을 선택하는 것은 지원되지 않습니다. 정적 모듈이 지원됩니다. Helm에서 네임스페이스를 만드는 기능입니다(네임스페이스가 없는 경우).
다음 단계
Skaffold 사이트를 방문해서 Skaffold의 작동 방식과 기능을 확인합니다.
Kustomize 및 Skaffold 프로필로 Cloud Deploy를 사용하는 것을 실습합니다.
Cloud Deploy에서 사용할 Skaffold 버전을 선택하는 방법, Skaffold 버전이 변경되는 경우, 사용 중인 버전을 확인하는 방법을 자세히 알아봅니다.
Helm, Kustomize, kpt와 같은 고급 매니페스트 관리 도구로 Skaffold 프로필을 사용하는 방법을 알아봅니다.