k8s-IPV6升级(3)

发布时间 2023-06-14 17:11:53作者: 中亿丰数字科技

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重启

作者:姜博文