필요하다면 각 부분 별로 버전 업그레이드 가능함
버전 업그레이드는 마이너 버전 1개씩 업그레이드 하는 것을 권장한다(v1.11 → v1.12)
한 번에 여러 마이너 버전을 넘어가는 것이 아니라(v1.11 → v1.13)
먼저 마스터 노드 업그레이드하고 워커 노드 업그레이드 하는 순서로 작업한다.
마스터 노드가 잠시 멈춘다고 해서 워커 노드가 영향 받는 것은 아님
(평소 처럼 서비스 가능, 그러나 관리 기능은 사용할 수 없고)
업그레이드 하는 동안은 사용자가 앱에 접속할 수 없음
마스터 노드 → 워커 노드 1 → 워커 노드 2 …
그동안 업그레이드 작업 중인 노드에 있던 파드는 다른 노드로 옮겨져서 계속 서비스 제공.
특히 클라우드 환경에서 선택하기 쉬운 전략
최신 버전의 새 노드로 파드를 옮기고, 기존 노드는 제거하는 방법
kubeadm 사용할 경우의 업그레이드 방법이며, 스크래치로 설치하면 이렇게 하지 말고 각각 따로 업그레이드 해줘야 함
아래는 업그레이드 예시일 뿐이고 버전 업글 작업의 흐름만 파악하면 된다.
실제 업무에서는 공식문서 찾아봐서 각 버전 별 업그레이드 문서를 따라하면 된다.
v1.11 → v1.13
# OS 종류/버전 확인
cat /etc/*release*
kubeadm upgrade plan
명령 실행시 업그레이드 관련 정보 얻을 수 있음(현재 버전, 최신 버전 .. )
어떤 버전으로 업그레이드 할 수 있는지 확인 가능
주의) kubeadm은 kubelet을 설치하거나 업그레이드 하지 않음
먼저 마스터 노드의 kubeadm 부터 업그레이드하기
apt-get upgrade -y kubeadm=1.12.0-00
# kubeadm 버전 업그레이드
kubeadm upgrade apply v1.12.0
# 그러나 여전히 v1.11.3으로 표기됨
# 왜냐하면 여기 표기되는 버전은 각 노드의 kubelet 버전이기 때문임
# 다만 kubelet 제외한 나머지 컴포넌트는 v1.12로 업그레이드 된 상태임
kubectl get nodes
----------------------
NAME ... VERSION
master. v.1.11.3
node-1 v.1.11.3
node-2 v.1.11.3
3번은 만약 마스터 노드에 kubelet이 존재한다면 수행할 것!
그 다음 마스터 노드의 kubelet 업그레이드하기
# 마스터 노드 drain
kubectl darin controlplane --ignore-daemonsets
# 업글 버전 패키지 다운로드
apt-get upgrade -y kubelet=1.12.0-00
systemctl restart kubelet
# kubelet 업그레이드하니 마스터노드 버전 변경 확인
kubectl get nodes
----------------------
NAME ... VERSION
master. v.1.12.0
node-1 v.1.11.3
node-2 v.1.11.3
# 노드에 스케줄링 가능하도록 설정
kubectl uncordon controlplane
마스터 노드의 업그레이드 작업 완료 후, 워커 노드 업그레이드하기
# kubeadm 패키지 다운로드
apt-get upgrade -y kubeadm=1.12.0-00
# kubelet 버전 업그레이드
kubeadm upgrade node config --kubelet-version v.1.12.0
# drain 명령어로 업글 대상 노드의 파드를 다른 노드로 보내버림
kubectl drain node-1 --ignore-daemonsets
# kubelet 패키지 다운로드
apt-get upgrade -y kubelet=1.12.0-00
# kubelet 재시작
systemctl restart kubelet
# 노드에 스케줄링 가능하도록 설정
kubectl uncordon node-1
위의 과정을 2번 노드, 3번 노드에서 순서대로 수행한다.