본문으로 바로가기
반응형

Intro

  • Node의 OS 업그레이드 작업을 해야할때 Node를 중단해야하는 경우가 발생할 수 있습니다.
  • 이 경우 해당 Node에 생성되어있는 pod를 안전하게 다른 Node로 옮기는 작업을 해야합니다.(drain)
  • 또한 더이상 pod가 스케줄링 되지 않도록 설정을 해야하며 (cordan)
  • 업데이트가 끝나고나면 Node가 원래대로 돌아왔을때 pod가 스케줄링 되도록 설정을 해주어야 합니다.(uncordan)
  • 오늘은 위 작업을 어떻게해야하는지 정리해보도록 하겠습니다.

Cluster upgrade 전략

Master Node 업데이트

  • k8s 스케줄러 및 컨트롤러 관리자가 잠시 중단됨
  • 새 pod를 배포하거나, 기존 pod를 삭제, 수정 할수 없음
  • 단, WorkerNode에서 동작하는 워크로드는 그대로 서비스됨

Worker Node 업데이트

  • 전략1: 모든 노드를 중지하고 한번에 업데이트하는 전략
  • 전략2: 한 노드의 pod를 다른노드에 옮긴 뒤 하나씩 업데이트 하는 전략
  • 전략3: 업데이트된 새로운 노드를 생성하여 pod을 옮기는 전략

Master Node Upgrade

Node drain (drain시 자동으로 cordon 됨)

kubectl drain controlplane
kubeadm 버전확인
kubeadm version

패키지 업데이트

apt update

kubeadm 새 버전 설치

apt-get upgrade kubeadm=1.20.0-00
# version예시 : 1.20.0-00
# [major].[minor].[patch]-00

kubeadm 업그레이드

kubeadm upgrade apply v1.20.0
version예시 : v1.20.0
v[major].[minor].[patch]
kubeadm 버전 확인
kubeadm version 
kubelet 버전확인
kubelet --version

kubelet 새 버전 설치

apt-get upgrade kubelet=1.20.0-00
version예시 : 1.20.0-00
[major].[minor].[patch]-00

Node uncordon

kubectl uncordon controlplane

Workder Node Upagrade

Node drain (drain시 자동으로 cordon 됨)

kubectl drain node01

Worker Node에 접속

ssh node01

kubeadm 업그레이드

kubeadm upgrade node
kubeadm 버전 확인
kubeadm version 
kubelet 버전확인
kubelet --version

kubelet 새 버전 설치

apt-get upgrade kubelet=1.20.0-00
version예시 : 1.20.0-00
[major].[minor].[patch]-00

Master Node로 접속

exit

Node uncordon

kubectl uncordon node01

ECTDCTL을 이용한 backup and restore

export ETCDCTL_API=3
etcdctl version

etcdctl snapshot save <file_path> \
--cacert \
--cert  \
--key

etcdctl snapshot restore -h
반응형