본문 바로가기

공부기록/MLOps | Infra

[k8s] Cluster Upgrade Process

반응형

Cluster Upgrade Process

cluster upgrade

  • kubernetes components들이 서로 다른 release version을 가질 수 있는데 나머지 components들은 kube-apiserver release verison 보다 클 수 없다.
    • controller manager, scheduler는 kube-apiserver보다 1 version만 낮을 수 있다.
    • kubelet이랑 kube-proxys는 2 version보다 낮을 수 있다.
    • kubetl은 kube-apiserver보다 한 버전이 높거나 낮을 수 있다.
  • 하위 버전을 지원한다는 특성 때문에 live upgrases가 가능하다.
  • k8s는 기본적으로 최신버전 - 3 까지만 지원을 해준다.
  • upgrades는 one minor version마다 해야한다.
  • upgrades process는 cluster가 어떻게 구성되어있는지에 따라 다르다.
  • GKE로 구성했을 경우 쉽게 업그레이드할 수 있고, kubeadm을 사용했을 경우 kubeadm upgrade palnkubeadm upgrade apply를 사용할 수 있고, 그 외의 경우는 다른 방법을 사용한다.
  • kubeadm 을 사용해 cluster를 구성한 경우upgrade step

 

  1. upgrade master node
    • ㅡmaster node가 비활성화 된 동안 control plane에 있는 components들이 비활성화 된다.
    • workder node에 있는 product들의 동작은 영향을 받지 않지만, kubectl 같은 명령어로 접근해서 리소스를 확인하는 작업은 불가능하다.
    • 새로운 application을 deploy하거나 존재하는 app을 삭제하거나 수정하는 것도 불가능하다.
    • controller manager가 동작하지 않기 떄문에 pod가 죽었을 경우 재생성되지 않는다.

 

  1. upgrase worker node
    • 방법 1) 한 번에 전부 업그레이드
      • 업그레이드 되는 동안 사용자는 서비스에 접근할 수 없음
    • 방법 2)하나씩 업그레이드
      • 업그레이드 시킬 노드에 있는 파드를 다른 곳으로 옮긴 다음 노드를 업그레이드 시키는 방식으로 진행
    • 방법 3) cluster에 새로운 저번의 노드를 추가
      • 이 방법은 cloud환경같이 새로운 노드를 쉽게 프로비저닝 할 수 있는 환경에서 편리하다.
      • 새로운 버전의 노드를 추가하고 기존의 파드를 옮긴 다음 이전 버전의 노드를 삭제하는 과정을 반복해 진행한다.

 

kubeadm - upgrade

kubeadm upgrade plan
  • cluster, kubeadm, component들의 버전을 알 수 있다.
  • cluster 버전 업그레이드가 끝나면 kubelet의 버전도 업그레이드 해야하는데 kubeadm은 kubelet의 버전 업그레이드를 지원하지 않는다.
apt-get upgrade -y kubeadm=1.12.0-00
kubeadm upgrade apply v1.12.0
kubectl get nodes
  • 이때 나오는 버전은 kubelet의 버전임

- kubelet upgrade

apt-get upgrade -y kubelet=1.12.0-00 

이렇게 하면 master node의 version이 업그레이드 된 것을 확인할 수 있다.

systemctl restart kubelet
kubectl get nodes
  • worker node upgrade
kubectl drain node-1

- drain은 cordon을 포함

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
반응형

'공부기록 > MLOps | Infra' 카테고리의 다른 글

[kubeflow] kfp.dsl을 사용한 pod scheduling  (0) 2022.09.02
[k8s] Backup and Restore Methods  (0) 2022.08.29
[k8s] drain and cordon  (0) 2022.08.28
[k8s] Multi Container PODs  (0) 2022.08.28
[k8s] Application Lifecycle Management  (0) 2022.08.28