클러스터 업그레이드하기

클러스터 업그레이드하기 (Upgrade A Cluster)

이 페이지는 쿠버네티스 클러스터를 업그레이드하기 위해 따라야 할 단계의 개요를 제공해요.

쿠버네티스 프로젝트는 최신 패치 릴리스로 즉시 업그레이드하고, 지원되는 마이너 릴리스의 쿠버네티스를 실행하고 있을 것을 권장해요. 이 권장 사항을 따르면 안전하게 유지하는 데 도움이 돼요.

클러스터를 업그레이드하는 방식은 처음 어떻게 배포했는지와 이후의 어떤 변경에 따라 달라져요. 높은 수준에서 수행하는 단계는 다음과 같아요.

  • 컨트롤 플레인 업그레이드
  • 클러스터의 노드 업그레이드
  • kubectl 같은 클라이언트 업그레이드
  • 새 쿠버네티스 버전과 함께 오는 API 변경에 따라 매니페스트와 다른 리소스 조정

출처: 문서

본문

시작하기 전에 (Before you begin)

기존 클러스터가 있어야 해요. 이 페이지는 Kubernetes 1.36에서 Kubernetes 1.37로의 업그레이드에 관한 것이에요. 클러스터가 현재 Kubernetes 1.36을 실행하지 않는다면 업그레이드할 계획인 쿠버네티스 버전의 문서를 확인하세요.

참고: Linux 노드에서 kubelet은 기본적으로 cgroups v2만 지원해요. Kubernetes 1.37에서 FailCgroupV1 kubelet 구성 옵션이 기본적으로 true로 설정돼요. 자세한 내용은 Kubernetes cgroup v1 폐기 문서를 참고하세요.

업그레이드 접근 방식 (Upgrade approaches)

kubeadm

클러스터가 kubeadm 도구로 배포됐다면, 클러스터를 업그레이드하는 방법에 대한 자세한 내용은 kubeadm 클러스터 업그레이드를 참고하세요. 클러스터를 업그레이드한 후 최신 버전의 kubectl을 설치하는 것을 기억하세요.

수동 배포 (Manual deployments)

주의: 이 단계는 네트워크 및 스토리지 플러그인 같은 서드파티 확장을 고려하지 않아요.

컨트롤 플레인을 다음 순서에 따라 수동으로 업데이트해야 해요.

  • etcd (모든 인스턴스)
  • kube-apiserver (모든 컨트롤 플레인 호스트)
  • kube-controller-manager
  • kube-scheduler
  • 사용하는 경우 cloud controller manager

이 시점에서 최신 버전의 kubectl을 설치해야 해요. 클러스터의 각 노드에 대해 그 노드를 drain한 다음, 1.37 kubelet을 사용하는 새 노드로 교체하거나, 그 노드의 kubelet을 업그레이드하고 노드를 다시 서비스에 투입해요.

주의: kubelet을 업그레이드하기 전에 노드를 drain하면 파드가 다시 수용되고 컨테이너가 다시 생성되어, 일부 보안 문제나 다른 중요한 버그를 해결하는 데 필요할 수 있어요.

기타 배포 (Other deployments)

클러스터 배포 도구의 문서를 참고해 권장되는 유지 관리 설정 단계를 배우세요.

업그레이드 후 작업 (Post-upgrade tasks)

클러스터의 스토리지 API 버전 전환하기 (Switch your cluster's storage API version)

클러스터의 쿠버네티스 리소스의 내부 표현으로 etcd에 직렬화되는 객체들은 특정 API 버전을 사용해 기록돼요. 지원되는 API가 변경되면 이 객체들이 더 새로운 API로 다시 쓰여야 할 수 있어요. 이를 하지 않으면 결국 쿠버네티스 API 서버가 더 이상 디코딩하거나 사용할 수 없는 리소스가 생겨요. 각 영향을 받는 객체에 대해 최신 지원 API를 사용해 가져온 다음, 최신 지원 API를 사용해 다시 써야 해요.

매니페스트 업데이트하기 (Update manifests)

새 쿠버네티스 버전으로 업그레이드하면 새 API가 제공될 수 있어요. kubectl convert 명령을 사용해 매니페스트를 다른 API 버전 간에 변환할 수 있어요. 예를 들어:

kubectl convert -f pod.yaml --output-version v1

kubectl 도구는 pod.yaml의 내용을 kind를 Pod(변경 없음)로 설정하지만 apiVersion은 수정된 매니페스트로 교체해요.

디바이스 플러그인 (Device Plugins)

클러스터가 디바이스 플러그인을 실행 중이고 노드를 더 새로운 디바이스 플러그인 API 버전이 있는 쿠버네티스 릴리스로 업그레이드해야 한다면, 업그레이드 중에 디바이스 할당이 계속 성공적으로 완료되도록 보장하려면 디바이스 플러그인을 노드 업그레이드 전에 두 버전을 모두 지원하도록 업그레이드해야 해요. 자세한 내용은 API 호환성과 Kubelet Device Manager API 버전을 참고하세요.

더 알아보기 (Learn more)