drain 개념
특정 node의 pod를 전부 삭제하고 scheduling disabled 이명령어를 사용하여 특정 node에 pod를 전부 삭제 or 이동시킨다. 주로 node의 하드웨어 변경작업이나 kubernetes 버전업시 무중단을 위하여 사용된다.
cordon 개념
특정 node의 scheduling disabled 기존 pod 외의 신규 유입되는 pod에 대해서 scheduling 유입을 막는 명령어 이다.
uncordon 명령어로 scheduling disabled 된 node를 다시 scheduling 가능하게 변경할 수 있다.
실습
2개의 노드를 가진 cluster 1.28 -> 1.29 버전으로 kubernetes cluster upgrade 진행
- node : node01, controllplane
1. master 노드 업그레이드
controlplane 노드 pod 를 node01로 옮기자
k drain controlplane --ignore-daemonsets
controlplane 노드를 먼저 업데이트하기 위하여 controlplane에 배포된 노드들을 전부 다른 노드로 옮긴다.
1.29버전 확인
vim /etc/apt/sources.list.d/kubernetes.list
1.29버전으로 변경 후 update
apt update
apt-cache madison kubeadm
1.29해당 버전에 대한 목록 리스트 확인
# 1.29.x-00에서 x를 최신 패치 버전으로 바꾼다.
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.29.0-1.1 && \
apt-mark hold kubeadm
다운로드하려는 버전이 잘 받아졌는지 확인
kubeadm version
버전 확인
업데이트할 버전 선택하여 적용
sudo kubeadm upgrade apply v1.29.0
kubelet kubectl 업그레이드
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.29.0-1.1 kubectl=1.29.0-1.1 && \
apt-mark hold kubelet kubectl
kubelet 재시작
sudo systemctl daemon-reload
sudo systemctl restart kubelet
노드 uncordon
kubectl uncordon controlplane
controlplane 노드 업그레이드 완료
2. work node 업그레이드
node01노드 pod 를 제거
k drain node01 --ignore-daemonsets
controlplane 노드를 먼저 업데이트하기 위하여 controlplane에 배포된 노드들을 전부 다른 노드로 옮긴다.
kubeadm 업그레이드
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.29.0-1.1 && \
apt-mark hold kubeadm
sudo kubeadm upgrade node
kubelet kubectl 업그레이드
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.29.x-00 kubectl=1.29.0-11 && \
apt-mark hold kubelet kubectl
kubelet 재시작
sudo systemctl daemon-reload
sudo systemctl restart kubelet
노드 uncordo
kubectl uncordon node01
이렇게 darin을 활용한 노드 업데이트를 진행하여 보았다. 무중단 업데이트시에 필요한 사항으로 자세한 사항은 공식문서에 자세히 나와있다. 참고하자