네트워크 연결 불안정, 노드 다운, 리소스 부족, 스케줄링 문제 등으로 업그레이드가 실패할 경우가 발생할 수 있으므로 서비스 무중단 운영 중 실시간 업그레이드를 권장하지 않습니다.
업그레이드 전 데이터베이스에 저장된 앱 상태와 같은 중요한 구성 요소를 백업하고 노드들의 스왑을 비활성화 해야 합니다.
여분의 리소스가 충분히 확보 되어야 합니다. 부족한 리소스는 업그레이드 실패의 원인이 될 수 있습니다.
업그레이드 수행 전 사전 작업을 통해 충분한 리소스를 확보합니다.
최소 노드 수는 Control-plane는 3개이상 Worker 노드는 2개 이상 입니다.
버전 업그레이드는 클러스터를 구성하는 Control-Plane , Worker 노드 순으로 단계별 진행됩니다.
이때 업그레이드 대상 노드는 drain을 통해 노드 내의 Pod들은 다른 노드들로 스케줄링 됩니다.
ReplicationController, ReplicaSet, Job, Daemonset, StatefulSet과 같은 컨트롤러에 의해 실행된 Pod는 다른 노드로 스케줄링 됩니다.
하지만 이와 같은 컨트롤러를 이용하지 않은 Pod는 축출된 후 다른 노드로 스케줄링되지 않으며 다른 노드로 복제가 불가능한 Pod는 옮겨지지 않습니다.
DaemonSet 컨트롤러에 의한 관리되는 Pod는 스케줄링되지 않습니다.
로컬 저장 공간을 사용하는 Pod는 축출되면서 사용하던 데이터를 잃게 되며 PodDisruptionBudgets(PDB) 설정에 의해 축출에 실패하거나 느려질 수 있습니다.
업그레이드가 종료되면 uncordon 을 통해 해당 노드에 대한 스케줄링이 다시 허용 됩니다. 하지만 다른 노드로 배치되었던 Pod가 다시 해당 노드로 스케줄링되지는 않습니다.
컨테이너 해시 값이 변경되기 때문에 업그레이드 후 모든 컨테이너가 다시 시작됩니다.
cubectl config sync
명령을 통해 클러스터 정보를 동기화 합니다.
cubectl update-kubeconfig
명령을 통해 KUBECONFIG 파일을 다운로드 받습니다.
cubectl.toml
파일을 수정합니다.
[kubernetes]
섹션에서 원하는 쿠버네티스 version을 입력합니다.
폐쇄망 설치 환경에서는 지원되는 패치 버전을 확인하세요.
패치버전을 생략하면 latest 버전을 설치합니다.
cubectl upgrade
명령을 실행합니다.