GitHub

https://github.com/Choidongjun0830

클라우드

Cluster Upgrade Process

gogi masidda 2024. 12. 19. 12:09

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

 

Upgrading kubeadm clusters

This page explains how to upgrade a Kubernetes cluster created with kubeadm from version 1.31.x to version 1.32.x, and from version 1.32.x to 1.32.y (where y > x). Skipping MINOR versions when upgrading is unsupported. For more details, please visit Versio

kubernetes.io

  • 쿠버네티스의 메인 구성 요소
    • kube-apiserver
    • controller-manager
    • kube-scheduler
    • kubelet
    • kube-proxy
    • kubectl
    • 위 메인 구성 요소들이 다른 릴리스 버전일 수 있다.  
  • kube-apiserver는 컨트롤 플레인의 주요 컴포넌트이고, 다른 컴포넌트와 통신하기 때문에, 다른 컴포넌트가 kube-apiserver보다 높은 버전이면 안된다. 
    • kube-apiserver가 x 버전이면, controller manager와 kube-scheduler는 x나 x-1버전에 있을 수 있다. kubelet과 kube-proxy는 x나 x-1, x-2버전에 있을 수 있다. 
    • kubectl은 kube-apiserver보다 높은 버전이어도 된다. 
  • 언제 버전을 업그레이드 해야할까?
    • 현재 구성요소들 1.10 버전이라고 할때, 1.11, 1.12 버전이 출시됐다면 쿠버네티스는 최근 3개의 버전만 지원한다.
    • 1.13 버전이 새롭게 출시되면, 1.13, 1.12, 1.11 버전만 지원한다. 
      • 이 때, 구성 요소들을 업그레이드하기 좋은 시기이다.
      • 한번에 1.10에서 1.13으로 업그레이드하는 것이 아니라, 한 버전씩 업그레이드하는 것이 좋다. 
  • 업그레이드 프로세스
    • 먼저 마스터 노드 업그레이드 후 워커 노드 업그레이드
      • 마스터 노드 업그레이드
        • 마스터 노드 업그레이드 중에는 마스터 노드의 구성 요소인 스케줄러, 컨트롤러 매니저, etcd, API 서버는 잠시 다운된다. 
          • 위 구성요소들이 다운되어도 워커 노드의 앱이 영향을 받는 건 아니다.
          • 관리 기능이 다운된 것이므로, kubectl이나 다른 k8s API를 이용해 API 서버에 접근은 불가능
            • 새 앱 배포, 삭제, 수정 불가. 
            • Pod가 실패하면 자동으로 생성되지 않음
      • 워커 노드 업그레이드
        • 전략
          • 한번에 모두 업그레이드 방식 
            • 업그레이드 시간 동안 사용자는 앱에 접속 불가 
          • 노드 하나씩 업그레이드
            • 사용자는 앱에 접속 가능 
          • 클러스터에 새 노드 추가
            • 새로운 버전의 노드 추가 후 workload를 새 노드로 옮기고 구 버전은 제거 
kubeadm upgrade plan
  • 위 명령어를 통해 업그레이드 플랜 정보를 얻을 수 있다. 
    • 현재 클러스터 버전
    • kubeadm 버전
    • k8s의 안정적인 최신 버전 
    • 구성 요소들의 현재 버전과 안정적인 최신 버전 
  • kubeadm으로 control plane 구성 요소들을 업그레이드한 후에, kubelet은 수동으로 업그레이드 해주어야 한다. 
    • kubeadm은 kubelet을 설치하거나 업그레이드하지 않음
  • 클러스터 업그레이드하기 전에, kubeadm부터 업그레이드해야 한다!

버전 업그레이드 예시

//kubeadm 1.12 버전으로 업그레이드 
apt-get upgrade -y kubeadm=1.12.0-00

//클러스터 업그레이드 
kubeadm upgrade apply v1.12.0 

//각 노드의 kubelet 버전 확인 - 1.11 버전인게 맞다. kubelet은 kubeadm이 업그레이드 안해주니까
kubectl get nodes

//kubelet 업그레이드
apt-get upgrade -y kubelet-1.12.0-00 

//kubelet 재시작
systemctl restart kubelet 

-- 여기까지 master 노드의 kubelet이 1.12버전이 된다. 워커 노드는 아직 1.11 버전 --

//워커 노드의 kubelet 하나씩 업그레이드
//첫번째 노드의 pod들을 안전하게 다른 노드로 이동
kubectl drain node-1

//첫번째 노드 kubelet 업그레이드
//첫번째 노드로 들어간 후에. ssh node-1
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 

//위 과정을 모든 워커 노드에서 반복
728x90

'클라우드' 카테고리의 다른 글

Cluster High Availability  (0) 2024.12.30
Ingress  (0) 2024.12.30
Operating System Upgrade  (0) 2024.12.18
Monitor Kubernetes Cluster  (0) 2024.12.17
Node Selector, Node Affinity  (0) 2024.12.16