v1.8에서 v2.0으로 업그레이드
v1.8에서 v2.0으로 업그레이드 (v1.8 to 2.0)
v2.0은 Redis 버전 상향, 컨테이너 레지스트리 전환, Helm v3 기본화, CRD API 그룹 변경 등 여러 방향의 변경이 큰 릴리스예요. 특히 이미지 저장소가 quay.io로 바뀌므로 클러스터가 quay.io에서 이미지를 받아올 수 있는지 확인해야 해요.
출처: 문서
본문
Redis가 v6.2.1로 업그레이드
번들로 제공되는 Redis 버전이 v6.2.1로 업그레이드됐어요.
Redis 자체는 다운타임 없이 업그레이드될 수 있고, Argo CD가 Redis를 영구 저장소로 사용하지도 않아요. 다만 여러 사용자가 사용하는 프로덕션에서 Argo CD를 운영 중이라면, 사용자에게 보이는 장애를 피하기 위해 비수요 시간대에 업그레이드하는 것이 좋아요.
환경 변수 확장
Argo CD는 구성 관리 도구 파라미터에서 환경 변수 사용을 지원해요. 확장 로직이 개선되어, 이제 누락된 환경 변수를 빈 문자열로 확장해요.
Docker 이미지가 Ubuntu를 베이스로 전환
공식 Docker 이미지가 베이스 이미지로 debian:10-slim 대신 ubuntu:20.10을 사용하도록 전환됐어요. 사용자 경험에는 영향을 주지 않겠지만, 커스텀 빌드 이미지를 사용하거나 커스텀 빌드 이미지에 타사 도구를 포함하는 경우에는 영향을 받을 수 있어요.
프로덕션에 배포하기 전에 v2.0으로 업데이트 후 커스텀 도구가 여전히 잘 동작하는지 확인하세요.
컨테이너 레지스트리가 quay.io로 전환되고 Docker Hub 저장소 서비스 종료
Docker Hub의 새로운 속도 제한(rate-limiting) 및 보존(retention) 정책 때문에, Argo 프로젝트는 하위 프로젝트들이 게시하는 모든 이미지의 새 저장소로 quay.io 레지스트리를 사용하기로 결정했어요.
Argo CD 2.0 버전부터 설치 매니페스트는 quay.io에서 컨테이너 이미지를 받아오도록 구성되며, 기존 Docker Hub 저장소의 서비스 종료(sundown)를 공지해요. 2.0 릴리스에서는 두 레지스트리에 모두 이미지를 계속 올리지만, Argo CD 2.1이 출시되면 Docker Hub에는 이미지 게시를 중단해요.
클러스터가 quay.io 레지스트리에서 이미지를 받아올 수 있는지 확인하세요. 시간 내에 받아올 수 없다면, 설치 매니페스트의 컨테이너 이미지 경로(slug)를 Docker Hub로 수동으로 바꿔서 Argo CD 2.0을 설치하는 우회 방법을 쓸 수 있어요. 다만 이 우회 방법은 2.1부터는 더 이상 사용할 수 없어요.
Dex 도구가 argocd-util에서 argocd-dex로 이전
rundex와 gendexcfg dex 명령이 argocd-util에서 argocd-dex로 이전됐어요. 즉, argocd-dex-server deployment의 명령을 업데이트해서 init 컨테이너에서 argocd-util 대신 argocd-dex 바이너리를 설치하고, dex 명령을 argocd-util 대신 argocd-dex에서 실행해야 해요:
initContainers:
- command:
- cp
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
containers:
- command:
- /shared/argocd-dex
- rundex
v2.0부터 argocd 바이너리 동작이 바뀌었다는 점에 유의하세요. 이제 하나의 바이너리에 argocd-dex, argocd-server, argocd-repo-server, argocd-application-controller, argocd-util, argocd 등 모든 argocd 바이너리가 내장돼요. 바이너리는 자신의 이름에 따라 동작이 달라져요.
앱 동기화의 retry 파라미터 타입이 String에서 Duration으로 변경
App Sync 명령은 몇몇 재시도 옵션을 노출하는데, 이를 통해 사용자가 동기화 재시도를 파라미터화할 수 있어요. 그중 retry-backoff-duration과 retry-backoff-max-duration 두 파라미터가 duration이 아니라 string 타입으로 선언되어 있었어요. 그래서 사용자가 이 플래그에 시간 단위(초, 분, 시간 등) 없이 값이나 임의의 문자열을 넣을 수 있었는데, string에서 duration으로 이전하면서 이제는 단위(유효한 duration)를 반드시 넣어야 해요.
EXAMPLE:
argocd app sync <app-name> --retry-backoff-duration=10 -> invalid
argocd app sync <app-name> --ret-backoff-duration=10s -> valid
원문 표기 그대로
retry-backoff-duration=10s가 유효한 예시예요.
Golang 1.16으로 전환
공식 Argo CD 바이너리가 이제 이전의 1.14.x에서 점프한 Go 1.16으로 빌드돼요. Go 1.15는 TLS 연결을 수행할 때 인증서의 CommonName 속성에 대해 서버 이름을 검증하는 기능을 디프리케이트했음을 유의하세요.
호환되지 않는 인증서를 가진 저장소 서버가 있다면 해당 서버로의 연결이 끊길 수 있어요. 이 상황을 해결하려면 올바른 인증서를 발급해야 해요.
CRD를 apiextensions/v1beta1에서 apiextensions/v1로 이전
우리의 CRD(Application과 AppProject)가 디프리케이트된 apiextensions/v1beta1에서 apiextensions/v1 API 그룹으로 이동했어요.
이것은 CRD 자체의 버전에는 영향을 주지 않아요.
Application과 AppProject의 기존 CR을 사용자가 변경해야 한다거나 이 변경으로 추가 조치가 필요할 것이라고 예상하지 않으며, 이 내용은 완전성을 위해 포함된 것뿐이에요.
차트 렌더링 시 Helm v3가 기본값
이번 릴리스에서 Argo CD를 통한 Helm 차트 렌더링의 기본 버전을 Helm v3로 만들었어요. Chart.yaml의 apiVersion 필드에 따른 Helm 버전 자동 감지도 비활성화해서, 차트의 apiVersion 필드와 무관하게 Helm v3로 렌더링돼요.
이로 인해 이전에 Helm v2로 렌더링되던 Application에서 사소한 out-of-sync 상태가 발생할 수 있어요 (예: Helm이 추가하는 주석 중 하나의 변경). Application을 동기화하면 해결할 수 있어요.
Helm v2로 렌더링해야 하는 기존 차트가 있다면, 사용자 가이드의 Helm 섹션에 설명된 대로 차트 렌더링에 Helm v2를 사용하도록 Application을 명시적으로 구성해야 해요.
또한 Helm v2는 이제 Argo CD에서 디프리케이트로 간주된다는 점도 유의하세요. Helm v2는 업스트림 Helm 프로젝트에서 더 이상 업데이트되지 않을 것이기 때문이에요. 다음 두 릴리스 동안에는 Helm v2 바이너리를 계속 제공하지만, 그 유예 기간이 지나면 제거될 예정이에요.
여전히 Helm v2가 필요한 차트는 Helm v3와 호환되도록 업그레이드하는 것이 좋아요.
Kustomize 버전이 v3.9.4로 업데이트
Argo CD는 이제 기본적으로 Kustomize v3.9.4를 제공해요. 이 Kustomize 버전에서 매니페스트가 올바르게 렌더링되는지 확인하세요.
이전 Kustomize 버전과의 하위 호환이 필요하다면, 커스텀 Kustomize 버전을 설정하고 해당 버전으로 렌더링되도록 Application을 구성하는 것을 고려해 보세요.
더 알아보기 (Learn more)
- 이 문서의 원문: v1.8 to 2.0
- Argo CD 공식 문서: https://argo-cd.readthedocs.io