본문 바로가기
INFRA/DevOps

[K8S] Node Upgrade

by BTC_민물공원 2023. 7. 20.

베하~! BTC_녹차공원 팀의 민물공원 입니다.

이번주는 Node Upgrade 하는 방법에 대해 알아보겠습니다!

 

 

Node Upgrade


쿠버네티스는 활발하게 유지 보수가 되며 클라우드 CSP (AWS, Azure, GCP) 들의 호환성 개선도 포함되기 때문에 이에 맞춰 주기적으로 업그레이드를 해주어야합니다.

쿠버네티스에서는 업그레이드 할 때 한 버전씩만 업그레이드 하는 것이 권장되고있습니다.

만약 v1.10에서 v1.13으로 업그레이드를 해야한다면  v1.10 -> v1.13이 아닌 v1.10 -> v1.11 -> v1.12 -> v1.13 으로 업그레이드를 해야합니다.

 

실무에서 운영중인 클러스터를 업그레이드 해야 할 때 안전하게 업그레이드 하는 방법이 무엇일까요?

1. 새로운 Node를 추가할 경우

    - 새 버전을 가진 노드를 추가한 후 예전 버전 노드의 workload를 새 노드로 이동 시킨 후 예전 버전 노드를 삭제

2. 기존 노드로만 진행할 경우

    - 마스터 노드 먼저 업그레이드 후 워커 노드 업그레이드

    - 기존에 동작하고 있는 workload들을 다른 노드로 이동

    - 한 노드씩 업그레이드를 진행하고, 한 노드가 업그레이드 진행되는 동안 새로운 pod 들이 스케줄링되지 않도록 설정

 

 

Node Upgrade 실습


이번 실습도 Killercoda 에서 따라해보아요.

https://killercoda.com/

 

Killercoda Interactive Environments

Learn DevOps Linux Kubernetes CKS CKA CKAD Git Cassandra etc | Katacoda compatible

killercoda.com

controlplane을 v1.27.1 -> v1.27.2 로 버전 업그레이드 진행하겠습니다.

기존 노드로만 업그레이드하는 방법으로 새로운 Node는 추가하지 않을 예정입니다.

 

kubectl get nodes

위 명령어를 통해 controlplane의 버전을 확인할 수 있습니다.

 

먼저, controlplane에서 실행되고 있는 workload가 있다면 cordon 및 drain을 통해 다른 노드로 이동시킵니다.

cordon과 drain이 뭔지 모르겠다면 아래 블로그를 참고해주세요.

https://btcd.tistory.com/1214

 

[K8S] Node Schedule

베하~! BTC_녹차공원 팀의 민물공원 입니다. 이번주는 Node Schedule 정책에 대해 알아보겠습니다! kubectl 은 노드의 pod-scheduling 정책을 손쉽게 변경할 수 있도록 다양한 명령어를 제공해줘요. drain, cord

btcd.tistory.com

 

kubectl cordon controlplane

kubectl drain controlplane --ignore-daemonsets

위 두 명령어를 통해 controlplane 노드에 스케줄링되지 않도록 하며 기존 pod들을 이전합니다.

 

그 다음 controlplane에 접속을 합니다.

ssh controlplane

 

이제 본격적으로 업그레이드 진행하도록 하겠습니다.

sudo -i

apt-get update

apt-get install -y kubeadm=1.27.2-00

 

apt-get 을 업데이트 한 후 v1.27.2의 kubeadm을 설치합니다. 그 후 업그레이드 버전을 적용시킵니다.

kubeadm upgrade apply v1.27.2
[upgrade] Are you sure you want to proceed? [y/N]: y

 

kubeadm을 업그레이드 한 후 차례대로 kubelet, kubectl을 업그레이드 합니다.

apt-get install -y kubelet=1.27.2-00 kubectl=1.27.2-00

 

설치 완료 후 서비스 설정을 데몬에 즉시 반영하기 위해 아래 명령어를 입력한 후 kubelet을 재시작합니다.

exit 명령어를 통해 sudo 권한에서 나온 후 한번 더 exit를 통해 controlplane에서 빠져나옵니다.

systemctl daemon-reload

systemctl restart kubelet

exit

exit

 

업그레이드가 완료되었기 때문에 controlplane을 uncordon하여 스케줄링 되도록 설정합니다.

kubectl uncordon controlplane

 

kubectl get nodes

controlplane 노드가 v1.27.2 버전으로 업그레이드 됐음을 확인하였습니다!!

 

 

이렇게 오늘은 쿠버네티스의 노드를 업그레이드하는 방법에 대해 알아보았는데요.

다음번에는 더 흥미로운 주제로 찾아뵙겠습니다.

 

이상 BTC_녹차공원 팀이였습니다!

베빠~!

'INFRA > DevOps' 카테고리의 다른 글

[K8S] Service  (0) 2023.08.01
[K8S] NetworkPolicy  (0) 2023.08.01
[K8S] Node Schedule  (0) 2023.07.06
[K8S] role & rolebinding  (0) 2023.06.18
[k8s] Kubernetes AutoScaling  (0) 2023.05.02

댓글