1. 逐节点手动升级步骤2
1.1 master节点升级到1.21.5步骤
# 备份apiserver、kube-scheduler和controller-manager
cp -r /apps/conf/kubernetes/manifests/ /tmp/
1.1.1 更新管理平面组件至1.21.5
- 逐节点更新master节点的kube-apiserver
修改如下参数
vi /apps/conf/kubernetes/manifests/kube-apiserver.yaml
# 更新apiserver的镜像
registry.paas/cmss/kube-apiserver:v1.21.5-eki.0
等待pod重启,查看pod状态
# 升级完成后查看apiserver的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep apiserver
# 升级完成后查看apiserver的镜像版本是否是v1.21.5-eki.0
kubectl edit pod kube-apiserver-kcpm1 -n kube-system
- 逐节点更新master节点的kube-controller-manager
修改如下参数
vi /apps/conf/kubernetes/manifests/kube-controller-manager.yaml
# 更新controller-manager的镜像
registry.paas/cmss/kube-controller-manager:v1.21.5-eki.0
等待pod重启,查看pod状态
# 升级完成后查看controller-manager的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep controller-manager
# 升级完成后查看controller-manager的镜像版本是否是v1.21.5-eki.0
kubectl edit pod kube-controller-manager-kcpm1 -n kube-system
- 逐节点更新master节点的kube-scheduler
修改如下参数
vi /apps/conf/kubernetes/manifests/kube-scheduler.yaml
# 更新kube-scheduler的镜像
registry.paas/cmss/kube-scheduler:v1.21.5-eki.0
等待pod重启,查看pod状态
# 升级完成后查看scheduler的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep scheduler
# 升级完成后查看scheduler的镜像版本是否是v1.21.5-eki.0
kubectl edit pod kube-scheduler-kcpm1 -n kube-system
1.1.2 升级kubectl到1.21.5
# 拷贝1.21.5版本的kubectl到/usr/bin/ 覆盖原来的
cp kubectl /usr/bin/
# 查看kubectl的客户端版本是否是v1.21.5
kubectl version
1.1.3 master节点回退
# 1. 依次将apiserver、kube-controller-manager和scheduler回退到1.20.12,将镜像的tag更改为1.20.12
# 2. apiserver、kube-controller-manager和scheduler回退到1.20.12
mv /tmp/manifests/* /apps/conf/kubernetes/manifests/
1.2 逐节点更新所有节点的kubelet到1.21.5
1.2.1 准备工作
# 节点进入维护状态
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
# --force
# 当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候就需要用--force来强制执行 (例如:kube-proxy)
# --ignore-daemonsets
# 无视DaemonSet管理下的Pod
# --delete-local-data
# 如果有mount local volumn的pod,会强制杀掉该pod并把数据清除掉,另外如果跟本身的配置讯息有冲突时,drain就不会执行
# 停止节点的kubelet
systemctl stop kubelet
# 备份节点的配置文件和可执行文件
## 备份kubelet的环境变量
cp /apps/conf/kubernetes/kubelet.env /apps/conf/kubernetes/kubelet.env.bak
## 备份kubelet的可执行文件
cp /apps/bin/kubelet /apps/bin/kubelet.bak
## 备份apiserver、controller-manager和scheduler
cp -r /apps/conf/kubernetes/manifests /tmp/
1.2.2 kubelet
- 重启kubelet
cp kubelet /apps/bin/
cp kubelet /usr/bin/
chmod +x /apps/bin/kubelet
chmod +x /usr/bin/kubelet
systemctl daemon-reload && systemctl restart kubelet
- 查看升级状态
# 查看kubelet状态
systemctl status kubelet
# 如果kubelet没有启动成功,则需修改kubelet的环境变量
vim /apps/conf/kubernetes/kubelet.env
# 删除RotateKubeletServerCertificate配置(如下整行删除)
--feature-gates=RotateKubeletServerCertificate=True,RotateKubeletClientCertificate=true
# 查看kubelet版本是否是1.21.5
kubelet --version
# 设置节点取消维护状态
kubectl uncordon <node name>
1.2.3 回退
若kubelet状态异常且无法解决,则需要回退。
systemctl stop kubelet
cp /apps/conf/kubernetes/kubelet.env.bak /apps/conf/kubernetes/kubelet.env
cp /apps/bin/kubelet-1.20.12 /apps/bin/kubelet
cp /apps/bin/kubelet-1.20.12 /usr/bin/kubelet
systemctl daemon-reload && systemctl restart kubelet
1.3 addon更新到1.21.5
1.3.1 kube-proxy
kubectl edit ds kube-proxy -nkube-system
替换镜像为 registry.paas/cmss/kube-proxy:v1.21.5-eki.0
1.3.2 查看升级状态
# 升级完成后查看kube-proxy的pod是否重新启动,状态是否正常,若是不正常需要回退
kubectl get pod -n kube-system |grep kube-proxy
# 升级完成后查看scheduler的镜像版本是否是v1.21.5-eki.0
kubectl edit pod kube-proxy-kcpm1 -n kube-system
# 查看是否能够访问集群中的服务来验证kube-proxy的功能,若是能连通,则代表kube-proxy升级成功
curl serviceip:port
1.3.3 回退
若是组件状态有问题且无法解决,需要回退。
## kebe-proxy回退,替换镜像为registry.paas/cmss/kube-proxy:v1.20.12
/apps/bin/kubectl edit ds kube-proxy -n kube-system
1.4 etcd更新
1.4.1 备份etcd数据
# 在master节点执行如下命令查找leader节点
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/apps/conf/kubernetes/ssl/etcd/ca.crt --cert=/apps/conf/kubernetes/ssl/etcd/peer.crt --key=/apps/conf/kubernetes/ssl/etcd/peer.key member list
# 要是上述命令不适用,采用以下命令查看leader节点
ETCDCTL_API=3 etcdctl -w table --endpoints=https://127.0.0.1:2379 --cacert=/apps/conf/kubernetes/ssl/etcd/ca.crt --cert=/apps/conf/kubernetes/ssl/etcd/peer.crt --key=/apps/conf/kubernetes/ssl/etcd/peer.key endpoint status
+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://127.0.0.1:2379 | 9e5fcf8d71320eb3 | 3.4.3 | 13 MB | true | false | 7 | 6485967 | 6485967 | |
+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
# 在leader节点执行备份命令,得到备份文件snapshotdb
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/apps/conf/kubernetes/ssl/etcd/ca.crt --cert=/apps/conf/kubernetes/ssl/etcd/peer.crt --key=/apps/conf/kubernetes/ssl/etcd/peer.key snapshot save snapshotdb
1.4.2 更新etcd
## 以下操作需要在所有etcd节点执行,成功执行一个节点后再执行下一个节点。
# 备份etcd配置信息
cp -r /apps/conf/kubernetes/manifests/etcd.yaml /apps/conf/kubernetes/etcd.yaml.bak
# 修改etcd.yaml中的etcd镜像版本,替换etcd的镜像为registry.paas/cmss/etcd:3.4.13-0
vi /apps/conf/kubernetes/manifests/etcd.yaml
# 查看etcd的pod状态是否正常,查看镜像版本是否正确
kubectl get pod -n kube-system |grep etcd
# 升级完成后查看etcd的镜像版本是否是3.4.13-0
kubectl edit pod etcd-ekim1 -n kube-system
1.4.3 查看升级状态
# 所有节点操作完上述步骤后,在任意etcd节点查看etcd集群健康状态
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/apps/conf/kubernetes/ssl/etcd/ca.crt --cert=/apps/conf/kubernetes/ssl/etcd/peer.crt --key=/apps/conf/kubernetes/ssl/etcd/peer.key endpoint health --write-out=table
+-----------------------------+--------+-------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+-----------------------------+--------+-------------+-------+
| https://10.142.113.171:2379 | true | 17.0397ms | |
| https://10.142.113.172:2379 | true | 17.108517ms | |
| https://10.142.113.173:2379 | true | 17.532461ms | |
+-----------------------------+--------+-------------+-------+
# 如上状态,没有error,视为正常
1.4.4 回退
若是组件状态有问题且无法解决,需要回退。
# 替换etcd的镜像为registry.paas/cmss/etcd:v3.4.3-0
vi /apps/conf/kubernetes/manifests/etcd.yaml
# 等待etcd的pod重启
标签:kube,conf,kubernetes,apps,升级,kubelet,etcd,IPV6,k8s From: https://www.cnblogs.com/DTCLOUD/p/17480800.html作者:姜博文