Linkerd 업그레이드
Linkerd 업그레이드 (Upgrading Linkerd)
이 가이드에서는 Linkerd를 무중단(zero-downtime)으로 업그레이드하는 방법을 안내해요.
본문
참고
이 페이지는 Linkerd의 최신 edge 릴리스로 업그레이드하는 지침을 담고 있어요. Linkerd의 안정 배포판을 설치했다면, 공급업체가 업그레이드에 대한 다른 지침을 제공할 수 있어요. 다양한 종류의 Linkerd 릴리스에 대한 자세한 내용은 Releases and Versions 페이지에서 찾을 수 있어요.
Edge 릴리스와 데이터 플레인 버전 차이(skew)
Linkerd 업그레이드가 항상 컨트롤 플레인 업그레이드로 시작되므로, 컨트롤 플레인은 새 버전을 실행하고 데이터 플레인은 여전히 이전 버전을 실행하는 기간이 있어요. 이 차이를 평가하기 위해 다음 권장 사항을 제공해요.
Linkerd는 Kubernetes 클러스터에 쉽게 설치할 수 있는 오픈 소스 edge 릴리스 패키지를 제공해요. 이 edge 릴리스는 의미론적 버전 관리를 따르지 않아요. 즉 edge 릴리스 번호 자체가 호환성 문제나 파괴적 변경에 대한 어떤 보장도 주지 않아요. 대신 이 정보는 각 릴리스의 릴리스 노트에서 확인할 수 있어요.
일부 edge 릴리스는 Linkerd의 새 논리적 버전 도입을 뜻해요. 예를 들어 Releases and Versions 페이지는 각 최근 Linkerd 버전의 "해당 edge 릴리스"를 표시해요. 예를 들어 edge-24.11.8은 Linkerd 2.17의 해당 edge 릴리스예요.
업그레이드 과정에서 컨트롤 플레인이 데이터 플레인보다 한 버전까지 앞서는 것은 보통 안전해요. 예를 들어 edge-24.11.8은 Linkerd 2.17의 일부이므로, 이 버전을 실행하는 데이터 플레인은 2.17 또는 2.18 내의 edge 릴리스와 호환돼야 해요. 다만 먼저 릴리스 노트를 꼭 확인하세요.
전체 업그레이드 과정
업그레이드해야 할 컴포넌트는 네 가지예요:
- CLI
- 컨트롤 플레인
- 컨트롤 플레인 확장
- 데이터 플레인
이 단계들은 순서대로 수행해야 해요.
업그레이드 전에
업그레이드를 시작하기 전에 linkerd check를 사용해서 Linkerd의 현재 상태가 정상인지 확인해야 해요. 메이저 버전 업그레이드의 경우 linkerd check --proxy로 데이터 플레인이 최신 상태인지도 확인해서 의도치 않은 버전 차이를 피해야 해요.
Linkerd의 지원 Kubernetes 버전을 확인해서 Linkerd 버전과 Kubernetes 버전이 호환되는지 확인하세요.
CLI 업그레이드
CLI는 Linkerd가 올바르게 설치됐는지 검증하는 데 쓸 수 있어요.
CLI를 업그레이드하려면 다음을 실행하세요:
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install-edge | sh
또는 Linkerd 릴리스 페이지에서 CLI를 직접 다운로드할 수 있어요.
다음으로 CLI가 설치되어 기대 버전으로 실행 중인지 확인하세요:
linkerd version --client
컨트롤 플레인 업그레이드
CLI로 컨트롤 플레인 업그레이드
CLI로 Linkerd를 설치한 사용자는 linkerd upgrade 명령어로 컨트롤 플레인을 업그레이드해요. 이 명령어는 컨트롤 플레인의 기존 구성과 TLS 시크릿이 모두 유지되도록 보장해요. Linkerd의 CRD를 먼저 --crds 플래그로 업그레이드한 다음 컨트롤 플레인을 업그레이드해야 해요.
(안정 릴리스를 사용한다면 공급업체의 업그레이드 지침에 더 자세한 내용이 있을 수 있어요.)
linkerd upgrade --crds | kubectl apply -f -
linkerd upgrade | kubectl apply -f -
다음으로 linkerd prune 명령어를 사용해서 이전 버전에 있었지만 이번 버전에는 없어야 하는 리소스를 제거해요.
linkerd prune | kubectl delete -f -
Helm으로 컨트롤 플레인 업그레이드
Helm 컨트롤 플레인 설치에 대해서는 Helm 업그레이드 절차의 지침을 따르세요.
컨트롤 플레인 업그레이드 검증
업그레이드 과정이 끝나면 다음을 실행해서 모든 것이 정상인지 확인하세요:
linkerd check
이 명령어는 컨트롤 플레인에 대해 일련의 검사를 실행해서 올바르게 동작하는지 확인해요.
Linkerd 컨트롤 플레인 버전을 확인하려면 다음을 실행하세요:
linkerd version
클라이언트와 서버 양쪽에 대한 최신 버전이 표시돼야 해요.
확장 업그레이드
Linkerd 확장은 모듈식으로 Linkerd에 추가 기능을 제공해요. 일반적으로 확장은 Linkerd 릴리스와 별도로 버전이 관리되며 자체 일정을 따르지만, 일부 확장은 Linkerd 릴리스와 함께 업데이트되고 같은 과정의 일부로 업데이트하고 싶을 수 있어요.
각 확장은 독립적으로 업그레이드할 수 있어요. Helm을 쓰는 경우 절차는 컨트롤 플레인 업그레이드와 비슷하며, 각각의 차트를 사용해요. CLI의 경우 확장 CLI 명령어는 upgrade 하위 명령어를 제공하지 않지만, install을 다시 사용하면 돼요. 예를 들어:
linkerd viz install | kubectl apply -f -
linkerd multicluster install | kubectl apply -f -
대부분의 확장에는 이전 버전에 있었지만 현재 버전에는 없어야 하는 리소스를 제거하는 prune 명령어도 포함돼 있어요. 예를 들어:
linkerd viz prune | kubectl delete -f -
멀티클러스터 확장 업그레이드
멀티클러스터 확장 업그레이드는 아래 버전별 참고 사항에 별도로 언급되지 않는 한, 미러링된 서비스를 통과하는 트래픽에 다운타임을 일으키지 않아요. 다만 service mirror 디플로이먼트(미러링된 서비스 생성 제어)를 업데이트하려면 linkerd multicluster link로 클러스터를 다시 연결해야 해요.
데이터 플레인 업그레이드
데이터 플레인 업그레이드에는 각 메시 워크로드에 추가된 프록시를 업데이트해야 해요. Kubernetes에서 파드는 변경 불가(immutable)하므로 Linkerd는 프록시를 제자리에서 그냥 업데이트할 수 없어요. 따라서 표준 옵션은 각 워크로드를 재시작해서, 프록시 인젝터가 시작될 때 최신 버전의 프록시를 주입하게 하는 것이에요.
예를 들어 kubectl rollout restart 명령어로 메시로 감싼 디플로이먼트를 재시작할 수 있어요:
kubectl -n <namespace> rollout restart deploy
앞서 설명했듯이 데이터 플레인과 컨트롤 플레인 사이에 메이저 버전 하나의 차이는 항상 지원돼요. 따라서 일부 시스템에서는 이 데이터 플레인 업그레이드를 "사용자 편의(게으르게)" 수행할 수 있어요. 즉 워크로드가 다른 이유(예: 새 코드 롤아웃)로 재시작될 때 최신 프록시를 받아들이도록 두면 돼요. 다만 최신 프록시가 있는 워크로드에서만 새 기능을 사용할 수 있을 수 있어요.
데이터 플레인과 컨트롤 플레인 사이에 메이저 버전이 두 개 이상 차이가 나는 것은 지원되지 않아요.
데이터 플레인 업그레이드 검증
다음을 실행해서 모든 것이 정상인지 확인하세요:
linkerd check --proxy
이 명령어는 데이터 플레인이 올바르게 동작하는지 검증하는 일련의 검사를 실행하고, 여전히 이전 버전의 프록시를 실행 중인 파드를 나열해요.
축하해요! Linkerd를 새 버전으로 성공적으로 업그레이드했어요.