Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
네트워크 연결 불안정, 노드 다운, 리소스 부족, 스케줄링 문제 등으로 업그레이드가 실패할 경우가 발생할 수 있으므로 서비스 무중단 운영 중 실시간 업그레이드를 권장하지 않습니다.
업그레이드 전 데이터베이스에 저장된 앱 상태와 같은 중요한 구성 요소를 백업하고 노드들의 스왑을 비활성화 해야 합니다.
여분의 리소스가 충분히 확보 되어야 합니다. 부족한 리소스는 업그레이드 실패의 원인이 될 수 있습니다.
업그레이드 수행 전 사전 작업을 통해 충분한 리소스를 확보합니다.
최소 노드 수는 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
명령을 실행합니다.
Worker 노드만 추가/삭제만 지원합니다. Control Plane 은 추가할 수 없습니다.
아래 표와 같이 기존의 클러스터는 컨트롤 플레인 노드 1대, 워커 노드 2대가 설치되어있다고 가정합니다.
기존의 클러스터에 워커 노드 1대를 추가 방법을 설명합니다.
노드 삭제 역시 노드 추가와 동일한 방식으로 삭제하고 싶은 노드 IP를 cubectl.toml
에서 제거합니다.
control-plane node
192.168.11.1
172.16.11.1
1번 worker node
192.168.11.2
172.16.11.2
2번 worker node
192.168.11.3
172.16.11.3
3번 worker node(추가할 노드)
192.168.11.4
172.16.11.4
cubectl config sync
명령을 통해 클러스터 정보를 동기화 합니다. cubectl.toml
파일이 존재한다면 생략 가능합니다.
cubectl update-kubeconfig
명령을 통해 KUBECONFIG 파일을 다운로드 받습니다. acloud-client-kubeconfig
파일이 존재한다면 생략 가능합니다.
cubectl.toml
수정 - 추가할 노드의 IP를 추가로 입력합니다.
Info
cubectl update
실행합니다.
Private Registry, Control plane, Worker nodes는 Ubuntu20.04
환경에서 구성됩니다.
쿠버네티스 버전은 v1.26
입니다.
이미지 레지스트리 주소를 192.168.77.154
에서 regi.acornsoft.io
로 변경합니다.
192.168.77.154
regi.acornsoft.io
openssl.conf
파일에 도메인을 추가합니다.
도메인 디렉토리를 생성합니다.
harbor.yml
의 hostname을 IP에서 도메인으로 변경합니다.
install.sh 스크립트를 실행하여 변경 사항을 적용합니다.
install.sh 스크립트를 실행하는 대신 harbor 환경변수를 수정하고 harbor를 재시작해도 변경사항이 반영됩니다.
/etc/containerd/certs.d
에 도메인 디렉토리를 생성한 후, /etc/containerd/certs.d/192.168.77.154/hosts.toml
파일을 복사합니다.
/etc/containerd/certs.d/regi.acornsoft.io/hosts.toml
의 IP를 도메인으로 변경합니다.
/etc/containerd/config.toml
의 IP를 도메인으로 변경합니다.
containerd를 재시작합니다.
IP 인증서는 더이상 사용하지 않으므로 hosts.toml
파일에서 ca
라인을 삭제합니다.
Addon, Coredns, Static Pods 및 기타 yaml파일에 대한 IP 주소를 도메인으로 변경합니다.
패키지 저장소 주소를 도메인으로 변경합니다.
/etc/docker/certs.d/
에 도메인 디렉토리를 생성합니다.
control-plane 에서는 calico와 metrics server를 업데이트하는 작업을 추가로 해줍니다.
kube-proxy daemonset 이미지 주소를 도메인으로 변경합니다.
coredns deployment 이미지 주소를 도메인으로 변경합니다.
kubelet을 재시작해줍니다.
컨테이너 이미지를 확인합니다. 이미지가 모두 올라오기까지 몇 분 소요될 수 있습니다.
참고: Private Registry IP를 새로운 서버의 IP로 변경하는 경우에는 cubectl update 명령서를 사용하십시오.