환경

  • 환경 : Ubuntu (KodeKloud 제공)
  • controlplane, node01 노드 2개 / blue applicaion pod 3개 / 기존 kube 버전 1.26.0

 

버전 확인

  • kubectl get node
  • kubeadm version
  • kubectl version --short

 

사전 확인 사항

  • 클러스터 내 업그레이드 대상 노드 확인
    kubectl get node
  • host workload 가능 여부 확인 하기 : taint가 none 이면 가능한 상태
    kubectl describe node controlplane | grep -i taint
    kubectl describe node node01 | grep -i taint
  • 업그레이드 가능한 버전 확인 
    kubectl upgrade plan 
    - latest 버전 확인 가능 (remote version 확인 : v1.28.1)
    - 현재 버전에서 가장 최신 버전 확인 가능 (Target version 확인 : v1.26.8)
  • 순서는 컨트롤플레인 노드 먼저 업그레이드! 그 다음 워커 노드들 업그레이드 진행

 

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

  • 컨트롤플레인 drain (unschedulable 상태로 변경)
    kubectl drain controlplane --ignore-daemonsets
    → Ready,SchedulingDisabled 상태 확인
  • 컨트롤 플레인 업그레이드 
    apt update (또는 apt-get update 수행 / 공식 리포지토리에서 사용 가능한 소프트웨어 패키지 목록을 업데이트)
    컨트롤 플레인 노드와 kubelet 모두 업그레이드!
    apt-get install kubeadm=1.27.0-00
    apt-get install kubelet=1.27.0-00
    kubeadm upgrade apply v1.27.0
  • 데몬 리로드
    systemctl daemon-reload
  • kubelet 리스타트
    systemctl restart kubelet
  • 컨트롤 플레인 다시 schedule 상태로 변경
    kubectl uncordon controlplane

 

노드 업그레이드

  • 노드를 unschedulable 상태로 변경
    kubectl drain noe01--ignore-daemonsets
  • 노드로 접속
    ssh node01
  • 컨트롤플레인과 동일하게 업그레이드 진행
    apt-get update
    apt-get install kubeadm=1.27.0-00
    kubeadm upgrade node
    apt-get instll kubelet=1.27.0-00
  • kubelet 리스타트
    systemctl daemon-reload
    systemctl restart kubelet
  • 노드 접속에서 빠져나와 컨트롤 플레인으로 이동~ (exit)
  • 컨트롤플레인에서  node01를 다시 schedulable로 변경
    kubectl uncordon node01