티스토리 뷰

1. 쿠버네티스 버전 

1) 쿠버네티스 버전 체계

- 주 버전, 부 버전, 패치버전으로 구성된 세가지 숫자로 버전을 관리

- Semantic Versioning을 따르며 각 버전이 어떤 종류의 변경을 포함하는지를 이해하는 데 도움을 줌 

- 주버전: 주요 변경사항을 포함하며, 이전 버전과 호환되지 않을 수 있다.

- 부버전: 새로운 기능과 개선사항을 포함하며, 기존 배포와 호환 

- 패치 버전: 버그 수정 및 보안 취약점 해결에 중점 

2) 릴리스 주기

- 쿠버네티스는 일반적으로 매년 세 번의 주요 릴리스를 발표. 

(1) 릴리스 주기 단계

- 알파 릴리스: 초기 기능이 도입되며 기본적으로 비활성화되어 있음. 불안정

- 베타 릴리스: 기능이 기본적으로 활성화되며, 안정성을 위해 철저히 테스트

- 안정 릴리스: 완전히 테스트된 후 프로덕션 환경에서 사용 가능 

3) 지원 주기 

- 쿠버네티스의 각 마이너 버전은 약 1년동안 패치 자원을 받으며, 이 기간 동안 보안 수정 및 중요한 오류 수정을 제공

4) 업그레이드 관리 

- 최신 패치 버전을 사용하여 보안 및 안정성을 유지 

- 모든 종속성과 애드온이 새로운 버전과 호환되는지 확인 

- 업그레이드 전에 백업을 수행하여 데이터를 보호

5) 외부 구성 요소 

- ETCD와 CoreDNS와 같은 일부 구성요소는 별도의 프로젝트로 관리되며 자체적인 버전을 가짐. 

 

2. 업그레이드

1) 업그레이드 개요

- 쿠버네티스 클러스터의 여러 구성요소로 이루어져 있으며, 이들 구성요소는 서로 다른 버전을 가짐 

- kube-apiserver는 모든 구성요소가 상호작용하는 중심이므로, 다른 구성요소는 kube-apiserver보다 높은 버전을 가질 수 없음.

- kube-apiserver는 최신 버전으로 유지

- controller-manager와 scheduler는 kube-apiserver보다 한 버전 낮을 수 있다. 

- kubelet과 kube-proxy는 두 버전 낮을 수 있음 

2) 업그레이드 절차

(1) 업그레이드 계획 수립: kubeadm upgrade plan 명령어를 사용하여 현재 클러스터 상태와 가능한 업그레이드 경로를 확인 

(2) 마스터 노드 업그레이드: 

- 마스터 노드를 먼저 업그레이드해야함. 이 과정에서 API 서버, 스케줄러, 컨트롤러 매니저가 잠시 다운될 수 있지만, 워커 노드의 어플리케이션은 계속 작동 

- kubeadm upgrade apply 명령어를 사용하여 마스터 노드를 업그레이드 

- 마스터노드의 kubelet도 수동으로 업그레이드 해야 함 

(3) 워커 노드 업그레이드

- 워커 노드는 한 번에 하나씩 업그레이드하여 다운타임을 최소화 

- kubelet drain 명령어를 사용하여 노드를 비우고 kubectl uncordon 으로 다시 스케줄링 가능하게 만듬

 - 각 워커 노드의 kubeadm과 kubelet을 업그레이드하고, kubelet 서비스를 재시작 

(4) 버전 순서대로 업그레이드 

- 쿠버네티스는 한 번에 한 마이너 버전씩 업그레이드 하는 것을 권장. 예를 들어, 1.10에서 1.13으로 바로 가지 않고, 1.10->1.11->1.12->1.13 순서로 진행

(5) kubectl 호환성 확인 

- kubectl은 API 서버보다 한 버전 높거나 낮을 수 있으며 이는 클라이언트 도구의 유연성을 제공 

3) 전략적 고려사항

- 노드 추가 및 제거: 클라우드 환경에서는 새로운 소프트웨어 버전을 가진 노드를 추가하고 기존 노드를 제거하는 방식으로 업그레이드를 수행

- 백업 및 복구 계획: 업그레이드 전후에 데이터 백업과 복구 계획을 세워야함.

3. 실제 업그레이드 절차(1.28->1.29)

1)업그레이드 준비

(1) 문서확인

- 쿠버네티스 공식 문서의 Upgrading a kubeadm cluster 섹션을 참조. 각 버전에 대한 지침이 제공되며, 업그레이드 경로에 따라 지침을 따름

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

(2) 패키지 저장소 업데이트

- 기존 app.kubernetes.io와 yum.kubernetes.io 저장소가 더 이상 사용되지 않으므로, 새로운 pkgs.k8s.io 저장소를 설정

- 운영체제에 맞는 명령어를 사용하여 저장소 URL을 업데이트하고 공개 서명키를 다운로드

(3) 클러스터 상태 확인

- kubectl get nodes 명령어로 현재 노드 상태와 버전을 확인

- OS 배포판 확인 ( cat /etc/*release* ) 후 적절한 명령어를 사용 

 

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

(1) kubeadm 업그레이드 

- apt-get install kubeadm=<target-version> 명령어로 kubeadm을 업그레이드

- kubeadm version 명령어로 성공적으로 업그레이드되었는지 확인 

(2) 업그레이드 계획 실행 

- sudo kubeadm upgrade plan 명령어를 실행하여 업그레이드 가능한 버전과 호환성을 확인 

- 이 명령은 업그레이드 시 자동으로 처리되는 구성 요소와 수동으로 처리해야 하는 항목(예: kubelet)을 보여줌

(3) 클러스터 업그레이드 실행

- sudo kubeadm upgrade apply v1.29.x 명령어로 컨트롤 플레인 구성요소(API, 컨트롤러 매니저, 스케줄러) 를 업그레이드 합니다.

- 성공 메시지가 출력되면 컨트롤 플레인 업그레이드가 완료

(4) kubelet및 kubectl 업그레이드

- kubectl drain <node> 명령어로 노드를 비우고 스케줄링을 중단 

- apt-get install kubelet=<target-version> kubectl=<target-version> 명령어로 kubelet과 kubectl을 업그레이드 한뒤 systemctl restart kubelet 재시작 

- 노드를 다시 스케줄링 가능하게 설정하려면 kubectl uncordon <node> 를 실행 

 

3) 워커 노드 업그레이드

(1) 노드 비우기 

- kubectl drain <worker-node> --ignore-daemonsets 명령어로 워커노드를 비움

(2) kubeadm 및 kubelet 업그레이드 

- 워커 노드에서도 sudo apt-get install kubeadm=<target-version>으로 kubeadm을 먼저 업그레이드한 뒤, sudo kubeadm upgrade node를 실행

- apt-get install kubelet=<target-version> kubectl=<target-version> 명령어로 kubelet과 kubectl을 업그레이드 한뒤 systemctl restart kubelet 재시작

(3) 노드 복구

- kubectl uncordon <worker-node> 명령어로 노드를 다시 스케줄링 가능하게 만듬 

 

4) 업그레이드 완료 후 확인

- 모든 노드를 업그레이드 한 뒤, kubectl get nodes 명령어로 클러스터 상태와 버전을 확인 

- 모든 노드는  Ready 상태여야 하며, 버전이 목표 버전(1.29.x)으로 업데이트되어야 한다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함