728x90
쿠버네티스 버전 업데이트
쿠버네티스 버전
2014년 처음 v0.4을 시작하여 2015년에 v1.0으로 메이저 버전 업그레이드
버전이 나타내는 내용
- MAJOR
- MINOR: 특징, 기능
- PATCH: 버그 픽스
모든 버그를 고치기 위해 alpha와 beta로 나누어 출시 후 정식 버전 진행
- alpha: 추가되는 기능들을 disable한 형태로 배포
- beta: 추가 기능들을 enable한 형태로 배포
- release: 안정화된 버전을 배포
패키지마다 모든 컴포넌트는 동일한 버전으로 배포
- API 서버, 컨트롤러 매니저, 스케줄러, 큐블렛, 큐브프록시 등
- ETCD, 네트워크, CoreDNS는 제외
쿠버네티스에서 버전 호환
- 쿠버네티스는 apiserver를 기준으로 호환성을 제공
애플리케이션 | 지원 버전 범위 (apiserver minor version x) |
지원 버전 예 (apiserver version 1.13) |
---|---|---|
kube-apiserver | x ~ x-1 | 1.13, 1.12 |
kubelet | x ~ x-2 | 1.13, 1.12, 1.11 |
kube-controller-manager kube-scheduler cloud-controller-manager |
x ~ x-1 | 1.13, 1.12 |
kubectl | x+1 ~ x-1 | 1.14, 1.13, 1.12 |
쿠버네티스의 버전 업그레이드가 필요한 경우
- 노드의 OS 업데이트와 하나씩 drain 하며 버전을 업데이트 하는 방법을 사용(롤링 업데이트)
- 업데이트를 적용할 때는 마이너 버전이 하나씩 업데이트 되도록 설정하는 것이 좋음
master $ kubectl drain node-1
master $ ssh node-1
node-1 $ apt-get upgrade -y kubeadm=1.12.0-00
node-1 $ apt-get upgrade -y kubelet=1.12.0-00
node-1 $ kubeadm upgrade node config --kubelet-version v1.12.0
node-1 $ systemctl restart kubelet
node-1 $ exit
master $ kubectl uncordon node-1
실습
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
버전에 따라 업데이트 방법이 조금씩 변경될 수 있으니 진행이 안된다면 공식 가이드 문서를 참조하기 바란다
node 의 kubernetes 버전 확인
$ kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 23d v1.20.1
work1 Ready <none> 23d v1.20.1
work2 Ready <none> 23d v1.20.1
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:07:13Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
업데이트 버전 확인
$ sudo kubeadm upgrade plan
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[preflight] Running pre-flight checks.
[upgrade] Running cluster health checks
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.20.1
[upgrade/versions] kubeadm version: v1.20.1
[upgrade/versions] Latest stable version: v1.20.2
[upgrade/versions] Latest stable version: v1.20.2
[upgrade/versions] Latest version in the v1.20 series: v1.20.2
[upgrade/versions] Latest version in the v1.20 series: v1.20.2
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
kubelet 3 x v1.20.1 v1.20.2
Upgrade to the latest version in the v1.20 series:
COMPONENT CURRENT AVAILABLE
kube-apiserver v1.20.1 v1.20.2
kube-controller-manager v1.20.1 v1.20.2
kube-scheduler v1.20.1 v1.20.2
kube-proxy v1.20.1 v1.20.2
CoreDNS 1.7.0 1.7.0
etcd 3.4.13-0 3.4.13-0
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.20.2
Note: Before you can perform this upgrade, you have to update kubeadm to v1.20.2.
_____________________________________________________________________
The table below shows the current state of component configs as understood by this version of kubeadm.
Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
upgrade to is denoted in the "PREFERRED VERSION" column.
API GROUP CURRENT VERSION PREFERRED VERSION MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io v1alpha1 v1alpha1 no
kubelet.config.k8s.io v1beta1 v1beta1 no
_____________________________________________________________________
업데이트 준비
master node drain 명령을 실행해서 evicted(추출) 처리 진행
$ kubectl drain master --ignore-daemonsets
node/master already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-4frsb, kube-system/weave-net-qq5bk
evicting pod kube-system/coredns-74ff55c5b-lg7wr
pod/coredns-74ff55c5b-lg7wr evicted
node/master evicted
업데이트 진행
kubeadm 업데이트
$ sudo apt-get upgrade -y kubeadm=1.20.0-00
kubelet 업데이트
$ sudo apt-get upgrade -y kubelet=1.20.0-00
node 업데이트
$ sudo kubeadm upgrade node
master node nocordon 처리
$ kubectl uncordon master
node/master uncordoned
업데이트 된 버전 확인
$ kubectl get nodes -w
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 23d v1.20.1
work1 Ready <none> 23d v1.20.1
work2 Ready <none> 23d v1.20.1
728x90
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 보안을 위한 다양한 리소스 (0) | 2021.01.20 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 백업과 복원 방법 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 노드 OS 업그레이드 절차 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 서비스 매쉬 환경 모니터링 도구 isio 시작하기 (0) | 2021.01.19 |
[데브옵스를 위한 쿠버네티스 마스터] 리소스 로깅과 모니터링 - EFK를 활용한 k8s 로그 모니터링 (0) | 2021.01.19 |
댓글