쿠버네티스 업그레이드 – 마스터 노드

두 대의 PC에 구성한 Proxmox VE의 클러스터에 쿠버네티스를 설치하여 이따금씩 테스트 용도로 사용하기 시작한지 9개월 쯤 지났다. NginX 웹서버, MySQL DBMS 등을 디플로이먼트(Deployment)로 배포하고 PV(Persistent Volume)을 생성해 MySQL POD에 바인드(Bind)해서 테스트하기도 했다.

쿠버네티스 마스터 노드 업그레이드 하기

8개월 쯤 사용해봤으면 이제 업그레이드 테스트도 해보는 것이 인지상정일 것이다. 쿠버네티스는 컨트롤 플레인(Control Plane)에 해당하는 마스터 노드(Master Node)를 먼저 업그레이드하고 데이터 플레인(Data Plane)에 해당하는 워커 노드(Worker Node)를 다음에 업그레이드 해야 한다.

마스터 노드와 워커 노드에 설치된 쿠버네티스 패키지 업그레이드 순서는 업그레이드 할 쿠버네티스 패키지 버전의 kubeadm 패키지를 먼저 apt 명령으로 업그레이드 한 다음 kubeadm 명령을 통해 kubelet과 kubectl을 업그레이드 하는 과정으로 진행해야 한다.

먼저 마스터 노드의 쿠버네티스를 업그레이드 하는 과정을 포스팅 한다.

노드의 운영체제와 쿠버네티스 버전 확인

쿠버네티스는 쿠버네티스가 설치된 운영체제와 함께 업그레이드 하는 것을 권장한다. 다음과 같이 버전을 먼저 확인한다.

$ cat /etc/*release

그리고 설치되어 있는 쿠버네티스의 버전도 확인한다.

$ kubeadm version

필자가 사용하고 있는 kubeadm의 버전이 1.28.15 버전이었다. 그리고 kubectl 명령도 동일하게 확인해 보니 1.28.15로 동일했다.

그리고 업그레이드할 쿠버네티스의 버전을 정해야 하는데 쿠버네티스는 버전을 한꺼번에 올리는 것을 권장하지 않는다. 현재 사용버전이 1.28.15면 1.29 버전으로만 업그레이드 할 것을 권한다.

쿠버네티스 APT 리포지토리 변경하기

데비안, 우분투 계열리눅스에서는 다음 경로의 파일에 쿠버네티스를 배포하는 APT 리포지토리를 추가해줘야 한다.

● 파일명 : /etc/apt/sources.list.d/kubernetes.list

● 리포지토리 경로 : deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /

리포지토리 경로를 보면 쿠버네티스의 버전이 보인다. 필자의 쿠버네티스 테스트 시스템의 경우 v1.28이고 v1.29로 업그레이드 할 예정이므로 경로의 버전 부분을 v1.29로 수정했다. 원래는 v1.28로 되어 있었다. 혹시나 하며 경로를 바꿔 테스트했는데 역시나 잘 동작했다.

최신 APT 패키지 목록 업데이트

다음의 명령을 실행하여 업그레이드 가능한 최신 패키지 목록을 업데이트 한다. 이 때 수정한 쿠버네티스 APT 리포지토리에서도 kubeadm 패키지 목록이 업데이트 된다.

$ sudo apt update

그리고 다음과 같이 kubeadm 패키지 목록을 확인한다. 이 버전들 중에서 최신버전으로 업그레이드할 예정이다.

$ sudo apt-cache madison kubeadm

kubeadm v1.29의 여러 버전이 보인다. 당연히 최신인 kubeadm 1.29.15-1.1로 업그레이드를 진행할 것이다.

kubeadm 업그레이드

먼저 kubeadm 패키지를 업데이트 한다. 다음의 명령으로 kubeadm 패키지를 유지하도록(자동 혹은 실수로 업그레이드 하지 않도록 홀드(hold) 한 것을 해제(unhold)하고 새 버전을 설치한다. 새 버전을 설치한 후에는 다시 홀드(hold) 한다.

$ sudo apt-mark unhold kubeadm && \
sudo apt-get update && \
sudo apt-get install -y kubeadm=1.29.15-1.1 && \
sudo apt-mark hold kubeadm

이 명령은 따로 따로 실행해도 되고 위 처럼 각각의 명령을 행을 분리해 여러줄에 입력 후 한꺼번에 실행해도 되며 줄을 구분하지 않고 (\를 삭제 후 한 행으로) 실행해도 된다.

업그레이드가 잘 진행되었다면 kubeadm 명령으로 버전을 확인해 본다.

$ kubeadm version

버전이 v1.29.15 로 바뀐 것을 확인할 수 있다.

쿠버네티스 콤포넌트 업그레이드

kubeadm 명령을 통해 쿠버네티스의 여러 구성요소 즉 kube-apiserver, kube-scheduler, CoreDNS, etcd 등을 업그레이드 할 수 있다. 먼저 업그레이드 될 버전을 다음의 명령을 통해 확인할 수 있다.

$ sudo kubeadm upgrade plan

kubeadm 명령으로 업그레이드 계획을 확인하였다면 이제 실제로 쿠버네티스 콤포넌트들의 업그레이드를 진행한다.

$ sudo kubeadm upgrade apply v1.29.15

이 작업에서 시간이 조금 걸릴 수 있다. 작업이 끝나면 다음과 같이 새 버전의 쿠버네티스를 즐기라는 화면이 표시된다. 과연 즐길(Enjoy) 수 있을까?

하지만 이것으로 끝이 아니다. 가장 중요한 쿠버네티스의 응용프로그램 가상화 엔진인 kubelet 과 제어도구인 kubectl을 업그레이드 해야한다.

쿠버네티스 가상화 엔진과 제어명령 업그레이드 (kubelet, kubectl)

쿠버네티스의 가상화 엔진은 kubelet이라고 부른다. kubelet은 흔히 쿠버네티스의 노드에서 실행되는 노드 에이전트라고 불리지만 실제로는 Pod(컨테이너 포함)의 생성, 실행, 모니터링을 수행하는 핵심 가상화 엔진이다.

kubelet과 kubectl을 업그레이드 하기 위해서는 두 모듈을 유지보수 모드 즉 드레인(drain)해야 한다. k8s-master-a 는 마스터노드의 이름(노드네임)이다.

$ kubectl drain k8s-master-a --ignore-daemonsets

마스터 노드를 유지보수 모드로 전환한 후 kubelet과 kubectl 패키지의 업그레이드를 진행한다.

$ sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && \
sudo apt-get install -y kubelet=1.29.15-1.1 kubectl=1.29.15-1.1 && \
sudo apt-mark hold kubelet kubectl

업그레이드가 모두 완료되면 다음과 같이 쿠버네티스 서비스를 재구동 하라는 메시지가 출력된다.

쿠버네티스 서비스 재기동 및 유지보수 모드 해제

다음 명령으로 쿠버네티스의 가상화 엔진인 kubelet 서비스를 재기동 하고 쿠버네티스의 유지보수 모드를 해제한다.

$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
$ kubectl uncordon k8s-master-a

쿠버네티스 마스터 노드의 업그레이드가 끝났다.

노드목록 및 버전 확인

마지막으로 마스터 노드와 워커 노드의 버전을 확인해본다.

$ kubectl get nodes

쿠버네티스의 컨트롤 플레인이자 마스터 노드인 k8s-master-a 노드의 상태가 Ready이고 버전이 v1.29.15로 업그레이드 된 것을 확인할 수 있다.

쿠버네티스 마스터 노드의 업그레이드가 완료되었다.

#쿠버네티스 #kubernetes #마스터노드업그레이드

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다