본문 바로가기

클라우드/쿠버네티스(Kubernetes)

쿠버네티스 Kubernetes 버전 업그레이드 1

https://kubernetes.io/ko/releases/version-skew-policy/

 

버전 차이(skew) 정책

다양한 쿠버네티스 구성 요소 간에 지원되는 최대 버전 차이

kubernetes.io

https://kubernetes.io/ko/releases/

 

릴리스

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

더보기

# 업그레이드 
새로운 패치, 마이너 버전 업그레이드
오픈스택은 3개월마다 새로운 마이너 버전이 나온다
업데이트를 안하면 보안문제등 많은 문제가 발생

# 다운타임
계획된 다운타임
:정기점검 공지, 미리 시스템 셧다운
계획되지 않은 다운타임
:갑자기 장애 발생

이미지 교체 -> 컨테이너(서비스) 다시 실행 -> 다운타임 발생 -> HA가 중요
컨트롤 플레인 3대
1대 실행 , 2대 업그레이드
-> 서비스의 중단이 발생하지 않는다


# 버전 차이 version skew
# 버전이 달라도 통신이 될까? 알아보는것 

고가용성(HA) 클러스터에서 최신 및 가장 오래된 kube-apiserver 인스턴스가 각각 한 단계 마이너 버전 내에 있어야 한다.
-> 마이너버전은  두단계 뛰어서 업그레이드 못함(패치버전은 상관없음) /1.19 1.18 통신 가능

kubelet - API 서버 통신
kubelet은 kube-apiserver보다 최신일 수 없으며, 2단계의 낮은 마이너 버전까지 지원한다.
-> API 먼저 업그레이드

kube-apiserver 인스턴스는 1.21 및 1.20 이다. # 혼재되어있는 상태
kubelet은 1.20 및 1.19 을 지원한다(1.21 는 kube-apiserver의 1.20 인스턴스보다 최신 버전이기 때문에 지원하지 않는다).
-> API의 가장 높은 버전과의 차이 1.18은 안됨

kubectl
kubectl은 kube-apiserver의 한 단계 마이너 버전(이전 또는 최신) 내에서 지원한다.
-> +-1 까지 지원한다

 

 


 

kubeadm 클러스터 업그레이드

 

https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

 

kubeadm 클러스터 업그레이드

이 페이지는 kubeadm으로 생성된 쿠버네티스 클러스터를 1.20.x 버전에서 1.21.x 버전으로, 1.21.x 버전에서 1.21.y(여기서 y > x) 버전으로 업그레이드하는 방법을 설명한다. 업그레이드가 지원되지 않는

kubernetes.io

더보기

# 패치 업그레이드
control-plane
-kubeadm (api, cm, sche, ccm ...)
-kubectl/kubelet

node
-kubeadm (proxy)
-kubectl/kubelet

1.18.19 --> 1.18.20


# 버전 확인 
vagrant@k-control:~$ kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
k-control   Ready    master   17h   v1.18.19
k-node1     Ready    <none>   17h   v1.18.19
k-node2     Ready    <none>   17h   v1.18.19
k-node3     Ready    <none>   17h   v1.18.19


# 컨트롤 플레인 노드 업그레이드

 

sudo kubeadm upgrade apply v1.18.20

# kubeadm 업그레이드
vagrant@k-control:~$ sudo apt update
vagrant@k-control:~$ sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20

# kubelet과 kubectl 업그레이드
vagrant@k-control:~$ sudo apt-get update  
vagrant@k-control:~$ sudo apt-get install -y --allow-change-held-packages kubelet=1.18.20 kubectl=1.18.20
                                                            # 홀드된패키지 변경을 허용하겠다
# 재시작                                                            

sudo systemctl daemon-reload

sudo systemctl restart kubelet

 

# 노드1,2,3 업그레이드

# kubeadm 업그레이드
vagrant@k-node1:~$ sudo apt update
vagrant@k-node1:~$ sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20

 

sudo kubeadm upgrade node


# kubelet과 kubectl 업그레이드
vagrant@k-node1:~$ sudo apt-get update  
vagrant@k-node1:~$ sudo apt-get install -y --allow-change-held-packages kubelet=1.18.20 kubectl=1.18.20
                                                            # 홀드된패키지 변경을 허용하겠다
 

# 재시작

sudo systemctl daemon-reload

sudo systemctl restart kubelet

                                                           
# 확인                                                            
vagrant@k-control:~$ kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
k-control   Ready    master   17h   v1.18.20
k-node1     Ready    <none>   17h   v1.18.20
k-node2     Ready    <none>   17h   v1.18.20
k-node3     Ready    <none>   17h   v1.18.20

sudo apt update && sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20-00 && sudo apt update && sudo apt-get install -y --allow-change-held-packages kubelet=1.18.20-00 kubectl=1.18.20-00