이 페이지에서는 배포 파이프라인에서 각 대상에 대해 구성을 렌더링하도록 Google Cloud Deploy를 구성하는 방법을 설명합니다.
Cloud Deploy는 Skaffold를 사용해서 Kubernetes 매니페스트를 렌더링합니다. 이 서비스는 원시 매니페스트 렌더링 및 Helm, Kustomize, kpt와 같은 고급 매니페스트 관리 도구를 지원합니다.
렌더링 프로세스에는 두 가지 스테이지가 포함됩니다.
매니페스트 관리 도구는 매니페스트를 생성합니다.
Skaffold는 매니페스트의 이미지 참조를 출시 버전에서 배포하려는 이미지로 바꿉니다.
이 페이지에는 Helm 및 Kustomize를 사용하는 구성 예시가 포함되어 있습니다.
Skaffold를 사용하여 구성 생성
Skaffold 구성 파일(skaffold.yaml
)아직 없으면 Skaffold를 사용해서 저장소에 있는 항목에 따라 파일을 생성할 수 있습니다.
Google Cloud CLI를 사용하여 Skaffold를 설치합니다.
gcloud components install skaffold
매니페스트가 포함된 저장소에서
skaffold init
를 실행합니다.skaffold init --skip-build
이 명령어는 저장소에서 skaffold.yaml
파일을 만듭니다. 이 파일은 해당 저장소에 있는 매니페스트를 참조합니다. 콘텐츠는 다음과 같습니다.
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: sample-app
manifests:
rawYaml:
- k8s-manifests/deployment.yaml
- k8s-manifests/rbac.yaml
- k8s-manifests/redis.yaml
- k8s-manifests/service.yaml
원시 매니페스트 렌더링
원시 매니페스트는 Helm 또는 Kustomize와 같은 도구에서 관리되지 않는 매니페스트입니다. 따라서 클러스터에 배포 및 하이드레이션되기 전 사전 처리가 필요하지 않습니다.
기본적으로 Cloud Deploy는 skaffold render
를 사용해서 Kubernetes 매니페스트를 렌더링하고 태그 지정되지 않은 이미지 이름을 배포하려는 컨테이너 이미지의 태그 지정된 이미지 이름으로 바꿉니다. 그런 후 출시 버전을 승격할 때 Cloud Deploy는 skaffold apply
를 사용해서 매니페스트를 적용하고 이미지를 Google Kubernetes Engine 클러스터에 배포합니다.
기본 구성에서 manifests
스탠자는 다음과 같습니다.
manifests:
rawYaml:
- PATH_TO_MANIFEST
여기에 전달할 수 있는 값에 대한 자세한 내용은 Skaffold 문서를 참조하세요.
Helm을 사용하여 렌더링
Cloud Deploy를 사용해서 Helm 차트를 렌더링할 수 있습니다. 이렇게 하려면 Skaffold 프로필의 deploy
스탠자에 Helm 차트 세부정보를 포함합니다.
이러한 각 정의는 다음과 같습니다.
apiVersion: skaffold/v4beta7
kind: Config
manifests:
helm:
releases:
- name: RELEASE_NAME
chartPath: PATH_TO_HELM_CHART
각 항목의 의미는 다음과 같습니다.
RELEASE_NAME은 이 출시 버전에 대한 Helm 차트 인스턴스의 이름입니다.
PATH_TO_HELM_CHART는 패키지된 Helm 차트 또는 압축해제된 Helm 차트 디렉터리에 대한 로컬 경로입니다.
Skaffold 문서에 설명된 대로 추가 Helm 구성 옵션을 사용할 수 있습니다.
Kustomize를 사용하여 렌더링
Cloud Deploy에 Kustomize를 사용할 수 있습니다. 이렇게 하려면 skaffold.yaml
프로필 구성의 deploy
스탠자 내에서 Kustomization 파일을 가리킵니다.
skaffold.yaml
의 각 해당 profile
아래에서 Kustomize를 사용 중인 각 대상에 대해 개별 Kustomize 구성을 포함합니다.
이러한 각 정의는 다음과 같습니다.
apiVersion: skaffold/v4beta7
kind: Config
manifests:
kustomize:
paths:
- PATH_TO_KUSTOMIZE
각 항목의 의미는 다음과 같습니다.
PATH_TO_KUSTOMIZE는 Kustomization 파일을 가리킵니다. 기본값은 ["."]
입니다.
Skaffold 문서에 설명된 대로 추가 Kustomize 구성 옵션을 사용할 수 있습니다.
대상별로 다른 매니페스트 구성
각 대상에는 약간씩 다른 구성이 필요한 경우가 많습니다. 예를 들어 스테이징 배포에서보다 프로덕션 배포에 더 많은 복제본이 포함될 수 있습니다.
각 변형을 서로 다른 Skaffold 프로필로 제공하여 각 대상에 대해 서로 다른 매니페스트 집합을 렌더링할 수 있습니다.
원시 매니페스트를 사용하는 프로필
원시 매니페스트를 사용할 때는 대상에 따라 서로 다른 파일에서 Cloud Deploy를 연결할 수 있습니다. 다음과 같이 구성할 수 있습니다.
apiVersion: skaffold/v4beta7
kind: Config
profiles:
- name: prod
manifests:
rawYaml:
- prod.yaml
- name: staging
manifests:
rawYaml:
- staging.yaml
Kustomize를 사용하는 프로필
Kustomize를 사용하는 스테이징 및 프로덕션에 대해 서로 다른 프로필이 포함되어 각 프로필이 서로 다른 Kustomization에 연결되는 예시 skaffold.yaml
은 다음과 같습니다.
apiVersion: skaffold/v4beta7
kind: Config
profiles:
- name: prod
manifests:
kustomize:
paths:
- environments/prod
- name: staging
manifests:
kustomize:
paths:
- environments/staging
전달 파이프라인에 참조되는 프로필
skaffold.yaml
에 정의된 이러한 프로파일은 대상별로 전달 파이프라인 구성에서 참조됩니다.
serialPipeline:
stages:
- targetId: staging-target
profiles:
- staging
- targetId: prod-target
profiles:
- prod
출시를 만들 때 특정 이미지 대체
매니페스트는 이미지 이름에 자리표시자를 사용할 수 있으며, 출시를 만들 때 이를 대체할 수 있습니다.
다음은 이미지 자리표시자가 있는 매니페스트의 예입니다.
apiVersion: v1
kind: Deployment
metadata:
name: getting-started
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: my-app-image
출시를 만들 때 --images=
플래그를 사용하여 배포할 특정 이미지를 식별할 수 있습니다. 예를 들어 다음 명령어는 출시를 만들고 자리표시자 이름을 SHA 한정 이미지 이름으로 대체합니다.
gcloud deploy releases create test-release-001 \
--project=test-gke-using-deployment \
--region=us-central1 \
--delivery-pipeline=my-gke-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
이제 렌더링된 매니페스트에는 my-app-image
대신 지정된 이미지에 대한 참조가 있습니다.
다음 단계
- Cloud Deploy 배포 파이프라인 구성 자세히 알아보기
- Cloud Deploy Skaffold 프로필 둘러보기 사용해 보기
- Kustomize 자세히 알아보기
- Helm 자세히 알아보기
- Kpt 자세히 알아보기
- Artifact Registry를 사용하여 Helm 차트 또는 Kustomization과 같은 아티팩트 저장 고려