iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
DevOps

前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記系列 第 7

Day 7 — 回頭!快回頭阿!我還沒上船阿~:重設 kubeadm init 參數、重置 Kubernetes、升級 Kubernetes

  • 分享至 

  • xImage
  •  

可愛鯨魚

為什麼人家裝起來都這麼順利,我就要一直重來一直改設定阿~

圖片來源:Docker (@Docker) / Twitter

今天來記錄一下修改設定、重置、升級版本的步驟~

修改 kubeadm init 的設定

如果 安裝過程都很順利 但想要更改 kubeadm init 的設定,或是已經運行一段時間想要更動 kubeadm 設定可以照以下步驟

  1. 將 node 上運行的服務清掉

    kubectl drain <node> --ignore-daemonsets
    
  2. 修改 kubeadm 設定檔

    sudo vim /var/lib/kubelet/kubeadm-flags.env
    

    https://ithelp.ithome.com.tw/upload/images/20220919/20151598pOyybIlyeM.png

  3. 使用 kubectl 編輯 node

    kubectl edit node <node>
    

    https://ithelp.ithome.com.tw/upload/images/20220919/20151598wAIodhTyg5.jpg

  4. 重啟 kubelet

    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  5. 恢復 node 運作

    kubectl uncordon <node>
    

Reset Kubernetes

如果你是安裝完之後想要把 node 重置可以參考一下

(像我是手殘設定錯誤、更改 pod-network-cidr 重新配內部 ip,因為還沒部署什麼服務所以乾脆 reset~)

到 Control Plane

  1. 將 node 上運行的服務清掉 (若有在該 node 上部署 hostPath PersistentVolume 也需要刪除)

    kubectl drain <node> --ignore-daemonsets
    
  2. 將 node 從 cluster 移除

    kubectl delete <node>
    

回到 node 上

  1. 重置 node

    sudo kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
    
  2. 檢查 port

    nc -v 127.0.0.1 6443
    

    output... 若顯示連接成功代表有 process 佔用

    Connection to 127.0.0.1 6443 port [tcp/*] succeeded!
    

    檢查是哪個 process

    sudo netstat -tulpn | grep :6443
    # or
    sudo lsof -i -P -n | grep :6443
    

    若看到的是 kube-apiserkube-apis 代表 api 還在運行

    有可能是 kubeadm reset 失敗請 先回頭看看錯誤資訊

    journalctl -xe _SYSTEMD_UNIT=kubelet.service
    

    真的無解再試試看下面幾個方法:

    • 重新開機
      sudo reboot
      

      對我最有用的還是重新開機...
      居然重開就好了,那我剛剛搞了好幾個小時到底在幹嘛...

    • 重新 reload kubelet 和 docker
      sudo systemctl stop kubelet
      sudo systemctl daemon-reload
      sudo systemctl restart kubelet docker
      
    • 直接用 sudo kill <PID> 把 api 砍掉
  3. 接著執行 kubeadm initkubeadm join

Upgrade Kubernetes

分為更新 Control Plane更新 Worker Node

註:我只測試了 v1.24 -> v1.25.1

先確認有哪些版本

sudo apt update
apt-cache madison kubeadm
# 只找最新的幾個版本
apt-cache madison kubeadm | head

output...

   kubeadm |  1.25.1-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.25.0-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.24.5-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.24.4-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.24.3-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.24.2-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.24.1-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm |  1.24.0-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm | 1.23.11-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
   kubeadm | 1.23.10-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages

假設我要升級到 1.25.1-00...

更新 Control Plane

  1. 安裝 kubeadm
sudo apt-mark unhold kubeadm
sudo apt-get update
sudo apt-get install -y kubeadm=1.25.1-00
sudo apt-mark hold kubeadm
  1. 檢查版本

    sudo kubeadm version
    

    驗證升級

    sudo kubeadm upgrade plan
    
  2. 選擇 kubeadm 要升級的版本

    sudo kubeadm upgrade apply v1.25.1
    
  3. 如果有多個 Control Plane

    sudo kubeadm upgrade node
    
  4. 清除 node 上的服務

    kubectl drain <node> --ignore-daemonsets
    
  5. 升級 kubelet, kubectl

    sudo apt-mark unhold kubelet kubectl
    sudo apt-get update
    sudo apt-get install -y kubelet=1.25.1-00 kubectl=1.25.1-00
    sudo apt-mark hold kubelet kubectl
    
  6. 重啟 kubelet

    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  7. 恢復 node 運作

    kubectl uncordon <node>
    

Worker Node 對於 kubeadm 的步驟比 Control Plane 少一點


更新 Worker Node

  1. 安裝 kubeadm

    sudo apt-mark unhold kubeadm
    sudo apt-get update
    sudo apt-get install -y kubeadm=1.25.1-00
    sudo apt-mark hold kubeadm
    
  2. 升級 node

    sudo kubeadm upgrade node
    
  3. 清除 node 上的服務

    kubectl drain <node> --ignore-daemonsets
    
  4. 升級 kubelet, kubectl

    sudo apt-mark unhold kubelet kubectl
    sudo apt-get update
    sudo apt-get install -y kubelet=1.25.1-00 kubectl=1.25.1-00
    sudo apt-mark hold kubelet kubectl
    
  5. 重啟 kubelet

    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
    
  6. 恢復 node 運作

    kubectl uncordon <node>
    

完成更新後使用 kubectl get nodes 可以看到版本資訊

NAME        STATUS     ROLES           AGE     VERSION
whale1      NotReady   control-plane   2d16h   v1.25.1
whale2      Ready      <none>          48h     v1.25.1
whale3      Ready      <none>          44h     v1.25.1

Ref


舊的不去新的不來~ 遲早都要升級的啦~ /images/emoticon/emoticon07.gif


上一篇
Day 6 — 怎麼剛下水就迷航了:Kubernetes + Docker install Troubleshooting
下一篇
Day 8 — 艦隊內部通訊:CNI plugin
系列文
前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言