티스토리 뷰
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)으로 업데이트되어야 한다.
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 7. 보안 (1)PKI (0) | 2024.12.13 |
---|---|
[쿠버네티스] 6. Cluster Maintenace 3) 백업과 복원 (0) | 2024.12.13 |
[쿠버네티스] 6. Cluster Maintanence 1) Cordon, Uncordon, Drain (0) | 2024.12.12 |
[쿠버네티스] 5. Application Management 5) InitContainers (0) | 2024.12.12 |
[쿠버네티스] 5. Application Managent 4) Secrets (0) | 2024.12.11 |