如何恢復資料(如何恢復資料卡背景)
968
2022-05-30
寫在前面
學習K8s,涉及到這一塊,這里整理一下
博客內容涉及 k8s版本升級(kubeadm upgrade),環境是通過kubeadm安裝的,所以升級方式是否可用與生產環境未知
官網有更詳細權威的升級文檔,小伙伴可以移步到官網學習;
因為是多機器操作, 所以用了ansible ,閱讀本文需要知道一點ansible
這里需要說明一點,不能跨版本升級
生活的意義就是學著真實的活下去,生命的意義就是尋找生活的意義 -----山河已無恙
升級K8S
不能跨版本更新
一、確定要升級到哪個版本
┌──[root@vms81.liruilongs.github.io]-[~] └─$yum list --showduplicates kubeadm --disableexcludes=Kubernetes # 在列表中查找最新的 1.22 版本 # 它看起來應該是 1.22.x-0,其中 x 是最新的補丁版本
現有環境
┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$kubectl get nodes NAME STATUS ROLES AGE VERSION vms81.liruilongs.github.io NotReady control-plane,master 11m v1.21.1 vms82.liruilongs.github.io NotReady
二、升級master
控制節點上的升級過程應該每次處理一個節點。 首先選擇一個要先行升級的控制面節點。該節點上必須擁有 /etc/kubernetes/admin.conf 文件。
1、執行 “kubeadm upgrade”
# 用最新的補丁版本號替換 1.22.x-0 中的 x ┌──[root@vms81.liruilongs.github.io]-[~] └─$yum install -y kubeadm-1.22.2-0 --disableexcludes=kubernetes
┌──[root@vms81.liruilongs.github.io]-[~] └─$kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:37:34Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
┌──[root@vms81.liruilongs.github.io]-[~] └─$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.21.1 [upgrade/versions] kubeadm version: v1.22.2 [upgrade/versions] Target version: v1.22.2 [upgrade/versions] Latest version in the v1.21 series: v1.21.5 ................
┌──[root@vms81.liruilongs.github.io]-[~] └─$sudo kubeadm upgrade apply v1.22.2 ............ upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.22.2". Enjoy! [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so. ┌──[root@vms81.liruilongs.github.io]-[~] └─$
通過將節點標記為不可調度并騰空節點為節點作升級準備:
# 將
2、升級 kubelet 和 kubectl
# 用最新的補丁版本號替換 1.22.x-00 中的 x #yum install -y kubelet-1.22.x-0 kubectl-1.22.x-0 --disableexcludes=kubernetes ┌──[root@vms81.liruilongs.github.io]-[~] └─$yum install -y kubelet-1.22.2-0 kubectl-1.22.2-0 --disableexcludes=kubernetes
┌──[root@vms81.liruilongs.github.io]-[~] └─$sudo systemctl daemon-reload ┌──[root@vms81.liruilongs.github.io]-[~] └─$sudo systemctl restart kubelet
┌──[root@vms81.liruilongs.github.io]-[~] └─$kubectl uncordon vms81.liruilongs.github.io node/vms81.liruilongs.github.io uncordoned
┌──[root@vms81.liruilongs.github.io]-[~] └─$kubectl get nodes NAME STATUS ROLES AGE VERSION vms81.liruilongs.github.io Ready control-plane,master 11d v1.22.2 vms82.liruilongs.github.io NotReady
三、升級工作節點Node
工作節點上的升級過程應該一次執行一個節點,或者一次執行幾個節點, 以不影響運行工作負載所需的最小容量。
1、升級 kubeadm
┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$ansible node -a "yum install -y kubeadm-1.22.2-0 --disableexcludes=kubernetes" ┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$ansible node -a "sudo kubeadm upgrade node" # 執行 "kubeadm upgrade" 對于工作節點,下面的命令會升級本地的 kubelet 配置: ┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$kubectl get nodes NAME STATUS ROLES AGE VERSION vms81.liruilongs.github.io Ready control-plane,master 12d v1.22.2 vms82.liruilongs.github.io Ready
騰空節點,設置維護狀態
┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$kubectl drain vms82.liruilongs.github.io --ignore-daemonsets node/vms82.liruilongs.github.io cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-ntm7v, kube-system/kube-proxy-nzm24 node/vms82.liruilongs.github.io drained
2、升級 kubelet 和 kubectl
┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$ansible 192.168.26.82 -a "yum install -y kubelet-1.22.2-0 kubectl-1.22.2-0 --disableexcludes=kubernetes"
重啟 kubelet
┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$ansible 192.168.26.82 -a "systemctl daemon-reload" 192.168.26.82 | CHANGED | rc=0 >> ┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$ansible 192.168.26.82 -a "systemctl restart kubelet" 192.168.26.82 | CHANGED | rc=0 >>
┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$kubectl get nodes NAME STATUS ROLES AGE VERSION vms81.liruilongs.github.io Ready control-plane,master 13d v1.22.2 vms82.liruilongs.github.io Ready,SchedulingDisabled
取消對節點的保護
┌──[root@vms81.liruilongs.github.io]-[~] └─$kubectl uncordon vms82.liruilongs.github.io node/vms82.liruilongs.github.io uncordoned ┌──[root@vms81.liruilongs.github.io]-[~] └─$kubectl uncordon vms83.liruilongs.github.io node/vms83.liruilongs.github.io uncordoned
升級完成,檢查一下
┌──[root@vms81.liruilongs.github.io]-[~] └─$kubectl get nodes NAME STATUS ROLES AGE VERSION vms81.liruilongs.github.io Ready control-plane,master 13d v1.22.2 vms82.liruilongs.github.io Ready
kubeadm upgrade apply 做了以下工作:
檢查你的集群是否處于可升級狀態:
API 服務器是可訪問的
所有節點處于 Ready 狀態
控制面是健康的
強制執行版本偏差策略。
確保控制面的鏡像是可用的或可拉取到服務器上。
如果組件配置要求版本升級,則生成替代配置與/或使用用戶提供的覆蓋版本配置。
升級控制面組件或回滾(如果其中任何一個組件無法啟動)。
應用新的 CoreDNS 和 kube-proxy 清單,并強制創建所有必需的 RBAC 規則。
如果舊文件在 180 天后過期,將創建 API 服務器的新證書和密鑰文件并備份舊文件。
kubeadm upgrade node 在其他控制平節點上執行以下操作:
從集群中獲取 kubeadm ClusterConfiguration。
(可選操作)備份 kube-apiserver 證書。
升級控制平面組件的靜態 Pod 清單。
為本節點升級 kubelet 配置
kubeadm upgrade node 在工作節點上完成以下工作:
從集群取回 kubeadm ClusterConfiguration。
為本節點升級 kubelet 配置。
Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。