# K8s版本升级

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 其他
> 标签: AI, Linux, Kubernetes
> 原文链接: http://117.50.162.249:3000/yun/articles/1340

---

# K8s版本升级

> 来源: https://www.ucloud.cn/yun/129553.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

K8s版本升级

## **点击上方“IT那活儿”，关注后了解更多内容，不管IT什么活儿，干就完了！！！**

注意事项

本次演示为本地测试环境，k8s集群为单节点一主两从集群；在生产环境若是多主多从环境需要另外全部升级。

主机规划

默认主机系统为centos系统，使用别的系统安装的集群，升级过程中部分步骤命令可能需要更改。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_000.png)

升级流程

## **1. 升级前注意事项**

- 在升级开始前已拥有一个运行的kubernetes v1.17.0或更高小版本集群；
- 只能从一个大版本升级到下一个大版本，或者在同一个大版本下升级小版本，升级不能跳过大版本。例如：可以从1.17.4升级到1.17.20或者1.18.4，但是不能升级到1.19.x。

## **2. 确认需要升级的版本**

通过命令 yum list --showduplicates kubeadm --disableexcludes=kubernete 可以看到可下载的kubeadm版本，本次选择 1.18.4 版本。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_001.png)

## **3. 升级控制节点**

3.1 yum安装kubeadm1.18.4版本。

```
[root@master ~]# yum install -y kubeadm-1.18.4-0 --disableexcludes=kubernetesBash
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_002.png)

3.2 验证kubeadm版本是否为预期更新的版本，下列查看版本为1.18.4符合预期。

```
[root@master ~]# kubeadm versionkubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.4", GitCommit:"c96aede7b5205121079932896c4ad89bb93260af", GitTreeState:"clean", BuildDate:"2020-06-17T11:39:11Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}Bash
```

3.3 查看kubeadm需要升级的组件，kubeadm upgrade plan   ##此命令检查您的集群是否可以升级，并获取您可以升级到的版本。它还显示了一个包含组件配置版本状态的表格。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_003.png)

3.4 在控制节点执行kubeadm升级操作，出现如下更新成功：

```
kubeadm upgrade apply v1.18.4Bash
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_004.png)

3.5 若有其他控制节点需要升级，操作步骤与前四步一样，但需要使用kubeadm upgrade node代替kubeadm upgrade apply，不需要 kubeadm upgrade plan。

3.6 将master节点标记为不可调度并逐出工作负载来准备节点以进行维护。

```
[root@master ~]# kubectl drain master --ignore-daemonsetsnode/master cordonedevicting pod "coredns-9d85f5447-dfq9b"evicting pod "coredns-9d85f5447-rvckm"pod/coredns-9d85f5447-dfq9b evictedpod/coredns-9d85f5447-rvckm evictednode/master evictedBash
```

3.7 安装kubelet和kubectl。

```
[root@master ~]# yum install -y kubelet-1.18.4-0 kubectl-1.18.4-0 --disableexcludes=kubernetesBash
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_005.png)

3.8 重启守护程序和kubelet。

```
[root@master ~]# systemctl daemon-reload[root@master ~]# systemctl restart kubeletBash
```

3.9 解除对节点不可调度的限制。

```
[root@master ~]# kubectl uncordon masterBash
```

3.10 查看节点信息，如下所示，master节点成功升级成1.18.4版本。

```
[root@master ~]# kubectl get nodes NAME     STATUS   ROLES    AGE   VERSIONmaster   Ready    master   36d   v1.18.4node01   Ready    <none> 36d   v1.17.4node02   Ready    <none> 36d   v1.17.4Bash
```

## **4. 升级工作节点**

- 如果有多台node节点，每台执行同样操作；
- drain和取消drain都是在master上操作的。

4.1 在node节点上yum安装kubeadm1.18.4版本。

```
[root@master ~]# yum install -y kubeadm-1.18.4-0 --disableexcludes=kubernetesBash
```

4.2 在master上排空节点，将节点标记为不可调度并将所有pod排出该节点。

```
[root@master ~]# kubectl drain node01 --ignore-daemonsetsnode/node01 cordonederror: unable to drain node "node01", aborting command...There are pending nodes to be drained:node01cannot delete Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): default/nginx-58777cc9fd-cwj77cannot delete Pods with local storage (use --delete-local-data to override): kube-system/metrics-server-6b976979db-8d59w
```

# 出现报错，由于演示机是本地测试环境就直接添加参数--delete-local-data --force 了，生产环境请做好数据备份并清除pod后再执行操作。

```
[root@master ~]# kubectl drain node01 --ignore-daemonsets --delete-local-data --force node/node01 already cordonedWARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-mrxm4, kube-system/kube-proxy-8tvvm; deleting Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet: default/nginx-58777cc9fd-cwj77evicting pod default/nginx-58777cc9fd-nv7s9evicting pod default/nginx-58777cc9fd-cwj77evicting pod default/nginx-58777cc9fd-hnd6cevicting pod default/redis-cluster-5evicting pod default/redis-cluster-1evicting pod default/redis-cluster-3evicting pod kube-system/coredns-7ff77c879f-4hstvevicting pod kube-system/metrics-server-6b976979db-8d59wevicting pod kubernetes-dashboard/kubernetes-metrics-scraper-6b97c6d857-c6r6kI0318 11:17:34.515068    7386 request.go:621] Throttling request took 1.146898968s, request: GET:https://192.168.158.136:6443/api/v1/namespaces/kubernetes-dashboard/pods/kubernetes-metrics-scraper-6b97c6d857-c6r6kI0318 11:17:44.701717    7386 request.go:621] Throttling request took 1.33562914s, request: GET:https://192.168.158.136:6443/api/v1/namespaces/default/pods/nginx-58777cc9fd-hnd6cpod/nginx-58777cc9fd-cwj77 evictedpod/coredns-7ff77c879f-4hstv evictedpod/nginx-58777cc9fd-hnd6c evictedpod/metrics-server-6b976979db-8d59w evictedpod/redis-cluster-5 evictedpod/nginx-58777cc9fd-nv7s9 evictedpod/redis-cluster-3 evictedpod/kubernetes-metrics-scraper-6b97c6d857-c6r6k evictedpod/redis-cluster-1 evictednode/node01 evictedBash
```

4.3 确认pod全部驱逐后在master节点执行kubeadm更新操作，出现下图标记表示更新成功。

```
[root@master ~]# kubeadm upgrade nodeBash
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_006.png)

4.4 升级kubelet和kubectl，重启kubelet。

```
[root@node01 ~]# yum install -y kubelet-1.18.4-0 kubectl-1.18.4-0 --disableexcludes=kubernetes[root@node01 ~]# systemctl daemon-reload[root@node01 ~]# systemctl restart kubeletBash
```

4.5 在master节点取消woker节点drain标记，查看node信息验证版本是否更新成功。

```
[root@master ~]# kubectl uncordon node01node/node01 already uncordoned
```

# 如下可以看到node01节点已成功升级为1.18.4版本：

```
[root@master ~]# kubectl get nodes NAME     STATUS   ROLES    AGE   VERSIONmaster   Ready    master   37d   v1.18.4node01   Ready    <none> 37d   v1.18.4node02   Ready    <none> 37d   v1.17.4Bash
```

4.6 剩下的node02节点也可以按照上述5个步骤完成整个集群的升级。

故障恢复

如果kubeadm upgrade失败且没有回滚，例如由于执行期间意外关闭，可在再次执行kubeadm upgrade；

在升级期间，kubeadm将一下备份文件写入/etc/kubernetes/tmp。

```
kubeadm-backup-etcd-<date>-<time>kubeadm-backup-manifests-<date>-<time>
```

参考文档：

*https://blog.csdn.net/cuichongxin/article/details/121488986?utm\_medium=distribute.pc\_relevant.none-task-blog-2~default~baidujs\_title~default-0.pc\_relevant\_antiscanv2&spm=1001.2101.3001.4242.1&utm\_relevant\_index=3*

*https://v1-19.docs.kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/*

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_007.png)

## 本文作者：刘 欢

## 本文来源：IT那活儿（上海新炬王翦团队）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129553/images/129553_008.png)