Skip to main content

[22] Kubernetes Upgrade

❓Cluster Upgrade - only Master

  • upgrade system: k8s-master
  • Given an existing Kubernetes cluster running version 1.22.4, upgrade all of the Kubernetes control plane and node components on the master node only to version 1.23.3
  • Be sure to drain the master node before upgrading it and uncordon it after the upgrade.

Reference

docs에서 upgrade kubeadm 검색

Upgrading kubeadm clusters

실습

[user@console ~]$ kubectl config use-context k8s

[user@console ~]$ ssh k8s-master

[user@k8s-master ~]$ sudo -i

# 시험환경은 ubuntu 환경이니까 헷갈려 하지 않기
# Ubuntu
[root@k8s-master ~]# apt-update
[root@k8s-master ~]# apt-cache madison kubeadm

# Ubuntu
[root@k8s-master ~]# apt-mark unhold kubeadm && \\
 apt-get update && apt-get install -y kubeadm=1.23.3-00 && \\
 apt-mark hold kubeadm

# v1.23.3 버전으로 업그레이드 할 수 있는 master component 목록 확인
[root@k8s-master ~]# kubeadm upgrade plan v1.23.3
[root@k8s-master ~]# sudo kubeadm upgrade apply v1.23.3

# 현재 우리는 문제에서 요구한대로 k8s-master로 ssh를 통해 들어와서 작업중인데
# 이 마스터노드를 master노드를 drain 하는 작업을 해야하기 때문에
# exit로 console로 나와서 작업해줘야 한다.
[root@k8s-master ~]# exit
[user@k8s-master ~]$ exit
[user@console ~]$ kubectl drain k8s-master --ignore-daemonsets

# 이제 다시 마스터 노드로 들어간다
[user@console ~]$ ssh k8s-master

# Ubuntu
[user@k8s-master ~]$ sudo apt-mark unhold kubelet kubectl && \\
apt-get update && \\
apt-get install -y kubelet=1.23.3-00 kubectl=1.23.3-00 && \\
apt-mark hold kubelet kubectl

[user@k8s-master ~]$ sudo -i 
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart kubelet

# 이제 다 끝나서 다시 콘솔로 나온 후에 언코던을 해준다
[root@k8s-master ~]# exit
[user@k8s-master ~]$ exit
[user@console ~]$ kubectl uncordon k8s-master
[user@console ~]$ kubectl get nodes

기출문제

upgrade system : k8s-worker1, k8s-worker2 k8s 클러스터의 모든 worker를 1.23.3 으로 업그레이드 하시오.

  • 답안

    # Ubuntu 환경
    kubectl config use-context k8s
    
    ssh k8s-worker1
    
    sudo -i
    
    apt-mark unhold kubeadm && \\
    apt-get update && apt-get install -y kubeadm=1.23.3-00 && \\
    apt-mark hold kubeadm
    
    sudo kubeadm upgrade node
    
    # console 창으로 이동
    exit
    
    kubectl drain k8s-worker1 --ignore-daemonsets
    
    ssh k8s-worker1
    
    apt-mark unhold kubelet kubectl && \\
    apt-get update && apt-get install -y kubelet=1.23.3-00 kubectl=1.23.3-00 && \\
    apt-mark hold kubelet kubectl
    
    sudo systemctl daemon-reload
    
    sudo systemctl restart kubelet
    
    # console 창으로 이동
    exit
    
    kubectl uncordon k8s-worker1
    --> k8s-worker2도 동일하게 진행
    
    kubectl get nodes
    --> 노드 버전 확인
    

기출문제 (25번)

Given an existing Kubernetes cluster running version 1.20.0, upgrade all of the Kubernetes control plane and node components on the master node only to version 1.20.1. Be sure to drain the master node before upgrading it and uncordon it after the upgrade.

You are also expected to upgrade kubelet and kubectl on the master node.

  • 답안
    kubectl get nodes
    --> node 이름 확인
    
    ssh {Node 이름}
    
    sudo -i 
    
    # Ubuntu 버전
    apt update
    
    apt-cache madison kubeadm
    
    apt-mark unhold kubeadm && \\
     apt-get update && apt-get install -y kubeadm=1.20.1-00 && \\
     apt-mark hold kubeadm
    
    kubeadm version
    
    kubeadm upgrade plan
    
    sudo kubeadm upgrade apply v1.20.1
    
    # console 창으로 이동
    exit
    
    kubectl drain <node-to-drain> --ignore-daemonsets
    
    ssh {Node 이름}
    
    apt-mark unhold kubelet kubectl && \\
    apt-get update && apt-get install -y kubelet=1.20.1-00 kubectl=1.20.1-00 && \\
    apt-mark hold kubelet kubectl
    
    sudo systemctl daemon-reload
    
    sudo systemctl restart kubelet
    
    # console 창으로 이동
    exit
    
    kubectl uncordon <node-to-drain>
    
    # 버전 확인
    kubectl get nodes
    -> 업그레이드 한 Node 버전 확인