Kubernetes集群实践(08)升级集群

网友投稿 286 2022-10-29

Kubernetes集群实践(08)升级集群

ECK在集群上还没部署多久还没有正式投入使用,试用阶段也发现了不少问题,现在马上要正式的部署了,想着在正式部署的时候把k8s集群升级。看了些资料,由于我的集群只有一个master节点虽然很强大,一台HUAWEI Taishan2280v2 服务器配双路鲲鹏920(单路48核,所以物尽其用,跑了master节点,traefik和kubernetes-dashboard,nexus没有arm64的镜像,很可惜),但终归是个单点。因此,在没有什么负载的情况下把升级工作做了。集群升级分为Kubernetes编排引擎升级和Docker容器运行引擎升级

Kubernetes升级

Kubernetes升级强烈建议参考官方文档,看英文没有问题,下面的可以忽略了,我这里可以看作个人翻译笔记。我的环境是离线升级,对应的rpm包和docker镜像包提前准备好了,具体方法可以参看本系列的前面3个章节。官方文档地址:replace x in 1.17.x-0 with the latest patch version sudo um install -y kubeadm-1.17.x-0 --disableexcludes=kubernetes

核对kubeadm的版本

sudo kubeadm version

2.排空节点上的容器

# replace with the name of your control plane node sudo kubectl drain --ignore-daemonsets

3.查看升级计划

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 -oyaml' [preflight] Running pre-flight checks. [upgrade] Making sure the cluster is healthy: [upgrade] Fetching available versions to upgrade to [upgrade/versions] Cluster version: v1.16.0 [upgrade/versions] kubeadm version: v1.17.0 Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply': COMPONENT CURRENT AVAILABLE Kubelet 1 x v1.16.0 v1.17.0 Upgrade to the latest version in the v1.16 series: COMPONENT CURRENT AVAILABLE API Server v1.16.0 v1.17.0 Controller Manager v1.16.0 v1.17.0 Scheduler v1.16.0 v1.17.0 Kube Proxy v1.16.0 v1.17.0 CoreDNS 1.6.2 1.6.5 Etcd 3.3.15 3.4.3-0 You can now apply the upgrade by executing the following command: kubeadm upgrade apply v1.17.0

上述命令只是检查集群是否能够升级,以及可以升级的版本。

4.输入实际的版本执行升级计划

# replace x with the patch version you picked for this upgrade sudo kubeadm upgrade apply v1.17.x

执行后可以在末尾看见

...... [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.17.0". Enjoy! [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

5.手动升级CNI provider plugin

如flannel,由于此次升级网络插件没有变化,因此没有升级。

6.解封节点

# replace with the name of your control plane node sudo kubectl uncordon

7.升级pause

有些版本升级的过程中涉及pause镜像的升级,如我自己在升级1.17.4到1.18.2时将pause:3.1升级到pause3.2。而pause容器的最主要的作用:创建共享的网络名称空间,以便于其它容器以平等的关系加入此网络名称空间。pause进程是pod中所有容器的父进程(即第一个进程)。通过命令

ps -ef|grep pause

可以看到有个kubelet进程涉及了pause的参数(但没有指出配置文件的位置),此时需要编辑配置文件/var/lib/kubelet/kubeadm-flags.env中的pause的版本参数,具体如下:

vim /var/lib/kubelet/kubeadm-flags.env # 原来的 KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=cnych/pause-amd64:3.1 # 更改后 KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=cnych/pause-amd64:3.2

升级其它控制节点(主节点)

离线环境先导入需要的镜像,如:kube-apiserver、kube-controller-manager、kube-scheduler、etcd、coredns等镜像,然后执行升级命令:

sudo kubeadm upgrade node

每个控制节点上升级kubelet和kubectl

# replace x in 1.17.x-0 with the latest patch version sudo yum install -y kubelet-1.17.x-0 kubectl-1.17.x-0 --disableexcludes=kubernetes

重新加载kubelet并重启

sudo systemctl daemon-reload sudo systemctl restart kubelet

工作节点升级

离线环境注意首先导入pause和kube-proxy镜像。

1.升级kubeadm

# replace x in 1.17.x-0 with the latest patch version sudo yum install -y kubeadm-1.17.x-0 --disableexcludes=kubernetes

2.排空节点上的容器

# replace with the name of your node you are draining sudo kubectl drain --ignore-daemonsets

上述命令执行后可能出现如下类似输出:

node/ip-172-31-85-18 cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-dj7d7, kube-system/weave-net-z65qx node/ip-172-31-85-18 drained

3.升级kubelet的配置

sudo kubeadm upgrade node

4.升级kubelet和kubectl

# replace x in 1.17.x-0 with the latest patch version yum install -y kubelet-1.17.x-0 kubectl-1.17.x-0 --disableexcludes=kubernetes

5.升级pause和其它镜像

有些版本升级的过程中涉及pause镜像的升级,如我自己在升级1.17.4到1.18.2时将pause:3.1升级到pause3.2。而pause容器的最主要的作用:创建共享的网络名称空间,以便于其它容器以平等的关系加入此网络名称空间。pause进程是pod中所有容器的父进程(即第一个进程)。通过命令

ps -ef|grep pause

可以看到有个kubelet进程涉及了pause的参数(但没有指出配置文件的位置),此时需要编辑配置文件/var/lib/kubelet/kubeadm-flags.env中的pause的版本参数,具体如下:

vim /var/lib/kubelet/kubeadm-flags.env # 原来的 KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=cnych/pause-amd64:3.1 # 更改后 KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=cnych/pause-amd64:3.2

重载并重启kubectl

sudo systemctl daemon-reload sudo systemctl restart kubelet

6.解封节点

# replace with the name of your node sudo kubectl uncordon

验证升级结果

sudo kubectl get nodes

升级Docker

在升级完Kubernetes后升级docker比较简单,离线安装准备好rpm后直接安装升级(docker官网也是如此介绍)

# 升级我的主节点 sudo yum update docker-ce-19.03.8-3.el7.aarch64.rpm docker-ce-cli-19.03.8-3.el7.aarch64.rpm # 升级计算节点 sudo yum update docker-ce-19.03.8-3.el7.x86_64.rpm docker-ce-cli-19.03.8-3.el7.x86_64.rpm

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:docker数据卷挂载使用
下一篇:SpringBoot构建ORM框架的方法步骤
相关文章

 发表评论

暂时没有评论,来抢沙发吧~