들어가며:
컨트롤플레인 노드 업그레이드
워커노드 업그레이드
작동원리
들어가며
쿠버네티스 버전 및 버전-차이 정책와 kubeadm 버전 차이 정책을 확인하고 릴리스 노트를 주의 깊게 보시는 것을 추천합니다.
이전 포스트의 내용을 사전에 보시는 것도 권장해드립니다.
업그레이드할 버전을 먼저 결정해야합니다.
apt update
apt-cache madison kubeadm
포스팅한 시점에서는 1.21 까지 나왔지만 안정성을 위해 1.19.11-00 버전으로 업그레이드 해보겠습니다.
패치 업그레이드는 몇 칸을 올라가든 상관없지만 마이너 업그레이드는 1단계씩만 가능합니다.
현재는 1.18 버전이기 때문에 문제가 없습니다.
업그레이드 순서는
1. 컨트롤플레인노드 kubeadm → 2. kubelet and kubectl →
3. 워커노드 kubeadm → 4. kubelet and kubectl
로 해야합니다.
컨트롤 플레인 노드 업그레이드
컨트롤 플레인 노드의 업그레이드 절차는 한 번에 한 노드씩 실행해야 합니다.
먼저 업그레이드할 컨트롤 플레인 노드를 선택합니다. /etc/kubernetes/admin.conf 파일이 있어야 합니다.
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm 업그레이드
// 버전 hold 를 해놨다면 옵션으로 해결
sudo apt install -y --allow-change-held-packages kubeadm=1.19.11-00
// 다운로드하려는 버전이 잘 받아졌는지 확인
sudo kubeadm version
// 업그레이드 계획 확인
sudo kubeadm upgrade plan
// 업그레이드 적용
sudo kubeadm upgrade apply v1.19.11
//다음 명령어 확인 시 성공
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.x". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
kubelet , kubectl 업그레이드
// 최신 패치 버전 설치
sudo apt install -y --allow-change-held-packages kubectl=1.19.11-00 kubelet=1.19.11-00
// kubelet 재실행
sudo systemctl daemon-reload
sudo systemctl restart kubelet
워커 노드 업그레이드
워커 노드의 업그레이드 절차는 워크로드를 실행하는 데 필요한 최소 용량을 보장하면서, 한 번에 하나의 노드 또는 한 번에 몇 개의 노드를 실행해야 합니다.
kubeadm 업그레이드
sudo apt install -y --allow-change-held-packages kubeadm=1.19.11-00
sudo kubeadm version
sudo kubeadm upgrade node
노드 드레인
드레인 뜻대로 먼저 노드를 비워주는 작업입니다.
스케줄 불가능으로 표시하고 워크로드를 추출하여 유지 보수할 노드를 사전에 준비해야 합니다.
// <node-to-drain>을 드레이닝하려는 노드 이름으로 바꿉니다.
kubectl drain <node-to-drain> --ignore-daemonsets
$ kubectl drain kube-node1 --ignore-daemonsets
kubelet 과 kubectl 업그레이드
sudo apt install -y --allow-change-held-packages kubectl=1.18.19-00 kubelet=1.18.19-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
작동 원리
kubeadm upgrade apply
- 클러스터가 업그레이드 가능한 상태인지 확인합니다.
- API 서버에 접근 가능
- 모든 노드가 Ready 상태
- 컨트롤 플레인이 정상적으로 동작
- 버전 차이(skew) 정책을 적용합니다
- 컨트롤 플레인 이미지가 사용 가능한지 또는 머신으로 가져올 수 있는지 확인합니다
- 컴포넌트 구성에 버전 업그레이드가 필요한 경우 대체 구성을 생성하거나 사용자가 제공한 것으로 덮어 씁니다
- 컨트롤 플레인 컴포넌트 또는 롤백 중 하나라도 나타나지 않으면 업그레이드합니다
- 새로운 CoreDNS 와 kube-proxy 매니페스트를 적용하고 필요한 모든 RBAC 규칙이 생성되도록 합니다
- API 서버의 새 인증서와 키 파일을 작성하고 180일 후에 만료될 경우 이전 파일을 백업합니다
kubeadm upgrade node 는 추가 컨트롤 플레인 노드에서 다음을 수행합니다
- 클러스터에서 kubeadm ClusterConfiguration 을 가져옵니다
- 선택적으로 kube-apiserver 인증서를 백업합니다
- 컨트롤 플레인 컴포넌트에 대한 정적 파드 매니페스트를 업그레이드합니다
- 이 노드의 kubelet 구성을 업그레이드합니다
kubeadm upgrade node 는 워커 노드에서 다음을 수행합니다
- 클러스터에서 kubeadm ClusterConfiguration 을 가져옵니다.
- 이 노드의 kubelet 구성을 업그레이드합니다.
'Kubernetes > 02. 쿠버네티스 설치 및 구성' 카테고리의 다른 글
[쿠버네티스] 우분투 환경에서 쿠버네티스 설치하기 + kubeadm 툴박스로 클러스터 만들기 (kubeadm, kubectl, kubelet) (1) | 2021.06.18 |
---|---|
[쿠버네티스] 사전 준비, Vagrant 를 이용하여 가상환경 구축하기 & vagrantfile 소개 (0) | 2021.06.18 |