Kubernetes/02. 쿠버네티스 설치 및 구성

[쿠버네티스] kubeadm 클러스터 업그레이드 방법 및 작동 원리

Jaden Park 2021. 6. 18. 02:08

들어가며:
컨트롤플레인 노드 업그레이드
워커노드 업그레이드

작동원리


들어가며

쿠버네티스 버전 및 버전-차이 정책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 구성을 업그레이드합니다.