https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
- 쿠버네티스의 메인 구성 요소
- kube-apiserver
- controller-manager
- kube-scheduler
- kubelet
- kube-proxy
- kubectl
-
- 위 메인 구성 요소들이 다른 릴리스 버전일 수 있다.
- kube-apiserver는 컨트롤 플레인의 주요 컴포넌트이고, 다른 컴포넌트와 통신하기 때문에, 다른 컴포넌트가 kube-apiserver보다 높은 버전이면 안된다.
- kube-apiserver가 x 버전이면, controller manager와 kube-scheduler는 x나 x-1버전에 있을 수 있다. kubelet과 kube-proxy는 x나 x-1, x-2버전에 있을 수 있다.
- kubectl은 kube-apiserver보다 높은 버전이어도 된다.
- 언제 버전을 업그레이드 해야할까?
- 현재 구성요소들 1.10 버전이라고 할때, 1.11, 1.12 버전이 출시됐다면 쿠버네티스는 최근 3개의 버전만 지원한다.
- 1.13 버전이 새롭게 출시되면, 1.13, 1.12, 1.11 버전만 지원한다.
- 이 때, 구성 요소들을 업그레이드하기 좋은 시기이다.
- 한번에 1.10에서 1.13으로 업그레이드하는 것이 아니라, 한 버전씩 업그레이드하는 것이 좋다.
- 업그레이드 프로세스
- 먼저 마스터 노드 업그레이드 후 워커 노드 업그레이드
- 마스터 노드 업그레이드
- 마스터 노드 업그레이드 중에는 마스터 노드의 구성 요소인 스케줄러, 컨트롤러 매니저, etcd, API 서버는 잠시 다운된다.
- 위 구성요소들이 다운되어도 워커 노드의 앱이 영향을 받는 건 아니다.
- 관리 기능이 다운된 것이므로, kubectl이나 다른 k8s API를 이용해 API 서버에 접근은 불가능
- 새 앱 배포, 삭제, 수정 불가.
- Pod가 실패하면 자동으로 생성되지 않음
- 마스터 노드 업그레이드 중에는 마스터 노드의 구성 요소인 스케줄러, 컨트롤러 매니저, etcd, API 서버는 잠시 다운된다.
- 워커 노드 업그레이드
- 전략
- 한번에 모두 업그레이드 방식
- 업그레이드 시간 동안 사용자는 앱에 접속 불가
- 노드 하나씩 업그레이드
- 사용자는 앱에 접속 가능
- 클러스터에 새 노드 추가
- 새로운 버전의 노드 추가 후 workload를 새 노드로 옮기고 구 버전은 제거
- 한번에 모두 업그레이드 방식
- 전략
- 마스터 노드 업그레이드
- 먼저 마스터 노드 업그레이드 후 워커 노드 업그레이드
kubeadm upgrade plan
- 위 명령어를 통해 업그레이드 플랜 정보를 얻을 수 있다.
- 현재 클러스터 버전
- kubeadm 버전
- k8s의 안정적인 최신 버전
- 구성 요소들의 현재 버전과 안정적인 최신 버전
- kubeadm으로 control plane 구성 요소들을 업그레이드한 후에, kubelet은 수동으로 업그레이드 해주어야 한다.
- kubeadm은 kubelet을 설치하거나 업그레이드하지 않음
- 클러스터 업그레이드하기 전에, kubeadm부터 업그레이드해야 한다!
버전 업그레이드 예시
//kubeadm 1.12 버전으로 업그레이드
apt-get upgrade -y kubeadm=1.12.0-00
//클러스터 업그레이드
kubeadm upgrade apply v1.12.0
//각 노드의 kubelet 버전 확인 - 1.11 버전인게 맞다. kubelet은 kubeadm이 업그레이드 안해주니까
kubectl get nodes
//kubelet 업그레이드
apt-get upgrade -y kubelet-1.12.0-00
//kubelet 재시작
systemctl restart kubelet
-- 여기까지 master 노드의 kubelet이 1.12버전이 된다. 워커 노드는 아직 1.11 버전 --
//워커 노드의 kubelet 하나씩 업그레이드
//첫번째 노드의 pod들을 안전하게 다른 노드로 이동
kubectl drain node-1
//첫번째 노드 kubelet 업그레이드
//첫번째 노드로 들어간 후에. ssh node-1
apt-get upgrade -y kubeadm-1.12.0-00
apt-get upgrade -y kubelet-1.12.0-00
kubeadm upgrade node config --kubelet-version v1.12.0
systemctl restart kubelet
//첫번째 노드 다시 스케줄링 가능하게
kubectl uncordon node-1
//위 과정을 모든 워커 노드에서 반복
728x90
'클라우드' 카테고리의 다른 글
Cluster High Availability (0) | 2024.12.30 |
---|---|
Ingress (0) | 2024.12.30 |
Operating System Upgrade (0) | 2024.12.18 |
Monitor Kubernetes Cluster (0) | 2024.12.17 |
Node Selector, Node Affinity (0) | 2024.12.16 |