关于 kubernetes版本升级的一些笔记

网友投稿 849 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 12s v1.21.1 vms83.liruilongs.github.io NotReady 11s v1.21.1 ┌──[root@vms81.liruilongs.github.io]-[~/ansible] └─$

二、升级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]-[~] └─$

通过将节点标记为不可调度并腾空节点为节点作升级准备:

# 将 替换为你要腾空的控制面节点名称 #kubectl drain --ignore-daemonsets ┌──[root@vms81.liruilongs.github.io]-[~] └─$kubectl drain vms81.liruilongs.github.io --ignore-daemonsets ┌──[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 11d v1.21.1 vms83.liruilongs.github.io Ready 11d v1.21.1 ┌──[root@vms81.liruilongs.github.io]-[~] └─$

三、升级工作节点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 12d v1.21.1 vms83.liruilongs.github.io Ready,SchedulingDisabled 12d v1.22.2

腾空节点,设置维护状态

┌──[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"

关于 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 13d v1.22.2 vms83.liruilongs.github.io Ready,SchedulingDisabled 13d v1.22.2

取消对节点的保护

┌──[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 13d v1.22.2 vms83.liruilongs.github.io Ready 13d v1.22.2 ┌──[root@vms81.liruilongs.github.io]-[~] └─$

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小时内删除侵权内容。

上一篇:五分钟带你玩转python(一)python入门,爬取图片,文字,视频,音频
下一篇:就靠这一篇文章,我就弄懂了 Python Django 的 django-admin 命令行工具集
相关文章