개발강의정리/DevOps

[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 쿠버네티스 버전 업데이트

nineDeveloper 2021. 1. 20.
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

댓글

💲 추천 글