더 최신 Auto Deploy 의존성으로 배포 업그레이드하기
Auto Deploy는 응용 프로그램을 Kubernetes 클러스터에 배포하는 기능입니다. 이 기능은 여러 의존성으로 구성됩니다:
-
Auto Deploy 템플릿은
auto-deploy-image
를 사용하는 일련의 파이프라인 작업 및 스크립트입니다. -
auto-deploy-image
은 Kubernetes 클러스터와 통신하는 실행 가능한 이미지입니다. -
auto-deploy-app 차트
는 응용 프로그램을 배포하기 위한 Helm 차트입니다.
auto-deploy-image
와 auto-deploy-app
차트는 Semantic Versioning을 사용합니다.
기본적으로 Auto DevOps 프로젝트는 안정적이고 호환되지 않는 버전을 계속 사용합니다.
하지만, 이러한 의존성은 GitLab의 주요 버전 릴리스에서 업그레이드될 수 있고, 업그레이드하여 배포를 업데이트해야 할 수도 있습니다.
이 안내서는 Auto Deploy 의존성의 더 나은 또는 다른 주요 버전으로의 배포 업그레이드 방법을 설명합니다.
의존성 버전 확인
현재 버전을 확인하는 프로세스는 사용 중인 템플릿에 따라 다르게 진행됩니다. 먼저 사용 중인 템플릿을 확인하세요:
- Self-managed 인스턴스의 경우 GitLab 패키지에 번들된 안정적인 Auto Deploy 템플릿을 사용합니다.
-
다음 중 하나가 참이면, GitLab.com의 안정적인 Auto Deploy 템플릿을 사용합니다:
- Auto DevOps 프로젝트에
.gitlab-ci.yml
파일이 없는 경우. - Auto DevOps 프로젝트에
.gitlab-ci.yml
이 있고 템플릿을 포함하는 경우Auto-DevOps.gitlab-ci.yml
템플릿.
- Auto DevOps 프로젝트에
-
다음 중 모두가 참이면, 최신 Auto Deploy 템플릿을 사용합니다:
- Auto DevOps 프로젝트에
.gitlab-ci.yml
파일이 있고 템플릿을 포함하는 경우Auto-DevOps.gitlab-ci.yml
템플릿. - 그리고 최신 Auto Deploy 템플릿을 포함하는 경우.
- Auto DevOps 프로젝트에
사용 중인 템플릿을 알고 있다면:
- 템플릿에
auto-deploy-image
버전이 있습니다 (예:auto-deploy-image:v1.0.3
). -
auto-deploy-app
차트 버전은 auto-deploy-image 리포지터리에 있습니다 (예:version: 1.0.3
).
호환성
다음 표는 GitLab과 Auto Deploy 의존성 간의 버전 호환성을 설명합니다:
GitLab 버전 |
auto-deploy-image 버전
| 노트 |
---|---|---|
v10.0부터 v14.0 | v0.1.0부터 v2.0.0 | v0 및 v1 auto-deploy-image는 하위 호환됩니다. |
v13.4 이후 | v2.0.0 및 이후 | v2 auto-deploy-image에는 하위 호환되지 않는 변경 사항이 포함되어 있으며, 업그레이드 안내서에 설명되어 있습니다. |
현재 안정 버전의 auto-deploy-image
를 Auto Deploy 안정 템플릿에서 찾을 수 있습니다.
업그레이드 안내서
Auto DevOps를 사용하는 프로젝트는 GitLab에서 관리하는 수정되지 않은 차트를 사용해야 합니다. 맞춤형 차트는 지원되지 않습니다.
v1 auto-deploy-image
로의 배포 업그레이드
v1 차트는 v0 차트와 하위 호환성이 있어서 구성 변경이 필요하지 않습니다.
v2 auto-deploy-image
로의 배포 업그레이드
v2 auto-deploy-image에는 여러 의존성 및 구조적 변경 사항이 포함되어 있습니다.
자체적인 v1 auto-deploy-image
로 활성화된 환경이 Auto DevOps 프로젝트에 있는 경우, 다음 업그레이드 가이드를 따릅니다. 그렇지 않은 경우, 이 프로세스를 건너뛰어도 됩니다.
Kubernetes 1.16+
v2 auto-deploy-image에서는 Kubernetes 1.15 및 이전 버전의 지원이 중단됩니다. Kubernetes 클러스터를 업그레이드해야 하는 경우 해당 클라우드 공급자의 지침을 따릅니다. 예를 들어 GKE에서의 예시를 참고하세요.
Helm v3
auto-deploy-image
는 Helm 바이너리를 사용하여 릴리스를 조작합니다.
이전에는 auto-deploy-image
가 클러스터에서 Tiller를 사용하는 Helm v2를 사용했습니다.
v2 auto-deploy-image
에서는 더 이상 Tiller가 필요하지 않은 Helm v3를 사용합니다.
만약 v1 auto-deploy-image
로 활성화된 Auto DevOps 프로젝트가 있다면, v3를 사용하는 다음 단계를 사용하여 v2로 업그레이드하세요:
-
Helm 2to3 이주 CI/CD 템플릿을 포함하세요:
- GitLab.com이나 GitLab 14.0.1 이후 버전인 경우 Auto DevOps에 기본적으로 포함되어 있습니다.
-
GitLab의 다른 버전의 경우,
.gitlab-ci.yml
을 수정하여 다음 템플릿을 포함시킬 수 있습니다:include: - template: Auto-DevOps.gitlab-ci.yml - remote: https://gitlab.com/gitlab-org/gitlab/-/raw/master/lib/gitlab/ci/templates/Jobs/Helm-2to3.gitlab-ci.yml
-
다음 CI/CD 변수를 설정하세요:
-
MIGRATE_HELM_2TO3
를true
로 설정합니다. 이 변수가 없으면 마이그레이션 작업이 실행되지 않습니다. -
AUTO_DEVOPS_FORCE_DEPLOY_V2
를1
로 설정합니다. -
옵션:
BACKUP_HELM2_RELEASES
를1
로 설정합니다. 이 변수를 설정하면 마이그레이션 작업이helm-2-release-backups
이라는 작업 artifact에 1주일 동안의 백업을 저장합니다. 준비가 되기 전에 Helm v2 릴리스를 실수로 삭제할 경우, 이 백업을 사용하여 Kubernetes manifest 파일에서 복원할 수 있습니다.kubectl apply -f $backup
을 사용하세요.경고: 공개 파이프라인을 사용하지 마세요. 이 artifact에는 비밀 정보가 포함될 수 있으며, 사용자는 작업을 볼 수 있는 경우에 이를 확인할 수 있습니다.
-
- 파이프라인을 실행하고
<environment-name>:helm-2to3:migrate
작업을 트리거하세요. - 환경을 평상시와 같이 배포하세요. 이 배포는 Helm v3를 사용합니다.
- 배포가 성공하면
<environment-name>:helm-2to3:cleanup
를 안전하게 실행하세요. 이것은 네임스페이스에서 모든 Helm v2 릴리스 데이터를 삭제합니다. -
MIGRATE_HELM_2TO3
CI/CD 변수를 제거하거나false
로 설정하세요. 환경 범위를 사용하여 한 번에 한 환경씩 진행할 수 있습니다.
In-Cluster PostgreSQL Channel 2
v2 auto-deploy-image는 이전 클러스터 내 PostgreSQL(legacy in-cluster PostgreSQL)을 더 이상 지원하지 않습니다. 귀하의 Kubernetes 클러스터가 여전히 이에 의존하는 경우, 업그레이드하고 데이터를 마이그레이션하십시오. v1 auto-deploy-image를 사용하여라.
카나리아 배포 및 증분 롤아웃을 위한 트래픽 라우팅 변경
Auto Deploy는 카나리아 배포 및 증분 롤아웃과 같은 고급 배포 전략을 지원합니다.
이전에, auto-deploy-image
는 불안정 및 안정 트랙 간의 트래픽을 레플리카 비율을 변경하여 조절하는 서비스를 하나 생성했습니다. v2 auto-deploy-image
에서는 카나리아 Ingress를 사용하여 트래픽을 제어합니다.
자세한 내용은 v2 auto-deploy-app
차트 리소스 아키텍처를 참조하십시오.
v1 auto-deploy-image
로 배포된 production
환경에서 활성화된 canary
또는 rollout
트랙 릴리스가 있는 경우, 다음 단계를 사용하여 v2로 업그레이드하십시오:
- 프로젝트가 v1
auto-deploy-image
를 사용 중인지 확인하십시오. 그렇지 않은 경우, 특정 버전을 지정하십시오. -
canary
또는rollout
배포를 실행 중인 경우, 먼저production
으로 승격하여 불안정한 트랙을 삭제하십시오. - 프로젝트가 v2
auto-deploy-image
를 사용 중인지 확인하십시오. 그렇지 않은 경우, 특정 버전을 지정하십시오. -
AUTO_DEVOPS_FORCE_DEPLOY_V2
CI/CD 변수를 값true
로 추가하십시오. GitLab CI/CD 설정 내에서. - 새 파이프라인을 생성하고
production
작업을 실행하여 v2auto-deploy-app
차트로 리소스 아키텍처를 갱신하십시오. -
AUTO_DEVOPS_FORCE_DEPLOY_V2
변수를 제거하십시오.
특정 버전의 Auto Deploy 의존성 사용
특정 버전의 Auto Deploy 의존성을 사용하려면, 원하는 버전의 auto-deploy-image
및 auto-deploy-app
을 포함한 이전 Auto Deploy stable 템플릿을 지정하십시오.
예를 들어, 템플릿이 GitLab 13.3에 번들로 제공되는 경우, .gitlab-ci.yml
을 다음과 같이 변경하십시오:
include:
- template: Auto-DevOps.gitlab-ci.yml
- remote: https://gitlab.com/gitlab-org/gitlab/-/raw/v13.3.0-ee/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
또는 v13.12 Auto DevOps 템플릿 아카이브을 사용할 수 있습니다.
경고를 무시하고 배포 계속하기
새 차트 버전이 안전하게 배포될 수 있다고 확신하는 경우, CI/CD 변수인 AUTO_DEVOPS_FORCE_DEPLOY_V<메이저-버전-번호>
를 추가하여 배포를 계속 강제할 수 있습니다.
예를 들어, 이전에 v0.17.0
차트를 사용하던 배포에 v2.0.0
차트를 배포하려는 경우 AUTO_DEVOPS_FORCE_DEPLOY_V2
를 추가하십시오.
초기 도입자
최신 Beta 또는 불안정한 버전의 auto-deploy-image
을 사용하려면, 최신 Auto Deploy 템플릿을 당신의 .gitlab-ci.yml
에 포함하십시오:
include:
- template: Auto-DevOps.gitlab-ci.yml
- template: Jobs/Deploy.latest.gitlab-ci.yml
auto-deploy-image
을 사용하면 환경에 심각한 손상을 초래할 수 있습니다. 중요한 프로젝트나 환경에서 테스트하지 마십시오.다음 안정적인 템플릿 업데이트는 GitLab v14.0에 계획되어 있습니다.
auto-deploy-app
차트의 리소스 아키텍처
v0 및 v1 차트 리소스 아키텍처
v2 차트 리소스 아키텍처
Troubleshooting
주요 버전 불일치 경고
이전 버전과 다른 주요 버전을 가진 차트를 배포하면, 새로운 차트가 올바르게 배포되지 않을 수 있습니다. 이는 아키텍처 변경으로 인한 것일 수 있습니다. 그런 경우, 배포 작업은 다음과 유사한 메시지와 함께 실패합니다:
*************************************************************************************
[WARNING]
현재 배포 중인 차트(auto-deploy-app-v0.7.0)와 이전에 배포된 차트(auto-deploy-app-v1.0.0)간의 주요 버전 차이가 감지되었습니다.
새로운 주요 버전이 현재 릴리즈(프로덕션)와 호환되지 않을 수 있습니다. 배포가 실패하거나 복구할 수 없는 상태에 갇힐 수 있습니다.
...
이 오류 메시지를 해결하고 배포를 재개하려면, 다음 중 하나를 수행해야 합니다:
- 매뉴얼으로 차트 버전을 업그레이드합니다.
- 특정 차트 버전을 사용합니다.
오류: missing key "app.kubernetes.io/managed-by": must be set to "Helm"
클러스터에 v1 auto-deploy-image
로 배포된 배포가 있는 경우, 다음과 같은 오류가 발생할 수 있습니다:
Error: rendered manifests contain a resource that already exists. Unable to continue with install: Secret "production-postgresql" in namespace "<project-name>-production" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "production-postgresql"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "<project-name>-production"
이는 이전 배포가 Helm2로 배포되었기 때문에 Helm3과 호환되지 않기 때문입니다. 문제를 해결하려면 업그레이드 가이드를 따르십시오.