k8s-IPV6升级(二)

发布时间 2023-05-27 11:34:47作者: 中亿丰数字科技

一、手动升级步骤

  1. 导入镜像至镜像仓库
# 将镜像导入到镜像仓库中
## apiserver镜像
docker load -i kube-apiserver_v1.21.5.tar
docker push registry.paas/cmss/kube-apiserver:v1.21.5
## controller-manager镜像
docker load -i kube-controller-manager_v1.21.5.tar
docker push registry.paas/cmss/kube-controller-manager:v1.21.5
## kube-scheduler镜像
docker load -i kube-scheduler_v1.21.5.tar
docker push registry.paas/cmss/kube-scheduler:v1.21.5
## kube-proxy镜像
docker load -i kube-proxy_v1.21.5.tar
docker push registry.paas/cmss/kube-proxy:v1.21.5
## etcd镜像
docker load -i etcd_3.4.13-0.tar
  1. master节点升级到1.20步骤
# 备份apiserver、kube-scheduler和controller-manager
cp -r /apps/conf/kubernetes/manifests/ /tmp/

2.1 更新管理平面组件至1.19
2.2 逐节点更新master节点的kube-apiserver

修改如下参数

vi /apps/conf/kubernetes/manifests/kube-apiserver.yaml
# 启动参数删除
- --basic-auth-file=/apps/conf/kubernetes/users/known_users.csv
# volumeMounts中删除
    - mountPath: /apps/conf/kubernetes/users
      name: basic-auth-config
# hostPath中删除
  - hostPath:
      path: /apps/conf/kubernetes/users
      type: ""
    name: basic-auth-config      
​
# 更新apiserver的镜像
registry.paas/cmss/kube-apiserver:v1.19.16

等待pod重启,查看pod状态

# 升级完成后查看apiserver的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep apiserver
# 升级完成后查看apiserver的镜像版本是否是1.19.16
kubectl edit pod kube-apiserver-kcpm1 -n kube-system

2.1.2 逐节点更新master节点的kube-controller-manager
修改如下参数

vi /apps/conf/kubernetes/manifests/kube-controller-manager.yaml
# 更新controller-manager的镜像
registry.paas/cmss/kube-controller-manager:v1.19.16

等待pod重启,查看pod状态

# 升级完成后查看controller-manager的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep controller-manager
# 升级完成后查看controller-manager的镜像版本是否是1.19.16
kubectl edit pod kube-controller-manager-kcpm1 -n kube-system

2.1.3 逐节点更新master节点的kube-scheduler
修改如下参数

vi /apps/conf/kubernetes/manifests/kube-scheduler.yaml
# 更新kube-scheduler的镜像
registry.paas/cmss/kube-scheduler:v1.19.16

等待pod重启,查看pod状态

# 升级完成后查看scheduler的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep scheduler
# 升级完成后查看scheduler的镜像版本是否是1.19.16
kubectl edit pod kube-scheduler-kcpm1 -n kube-system

2.3 管理平面组件升级到1.20.0
2.3.1 逐节点更新master节点的kube-apiserver
修改如下参数

vi /apps/conf/kubernetes/manifests/kube-apiserver.yaml
# 新增启动参数
- --service-account-issuer=https://kubernetes.default.svc.cluster.local
- --service-account-key-file=/apps/conf/kubernetes/ssl/sa.pub    #这一行看文件中是否有,没有就新增
- --service-account-signing-key-file=/apps/conf/kubernetes/ssl/sa.key
# 更新apiserver的镜像
registry.paas/cmss/kube-apiserver:v1.20.12

等待pod重启,查看pod状态

# 升级完成后查看apiserver的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep apiserver
# 升级完成后查看apiserver的镜像版本是否是1.20.12
kubectl edit pod kube-apiserver-kcpm1 -n kube-system

2.3.2 逐节点更新master节点的kube-controller-manager
修改如下参数

vi /apps/conf/kubernetes/manifests/kube-controller-manager.yaml
# 更新controller-manager的镜像
registry.paas/cmss/kube-controller-manager:v1.20.12

等待pod重启,查看pod状态

# 升级完成后查看controller-manager的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep controller-manager
# 升级完成后查看controller-manager的镜像版本是否是1.20.12
kubectl edit pod kube-controller-manager-kcpm1 -n kube-system

2.3.3 逐节点更新master节点的kube-scheduler
修改如下参数

vi /apps/conf/kubernetes/manifests/kube-scheduler.yaml
# 更新kube-scheduler的镜像
registry.paas/cmss/kube-scheduler:v1.20.12

等待pod重启,查看pod状态

# 升级完成后查看scheduler的pod是否重新启动,状态是否正常,若是不正常且无法解决,需要回退,参考4.2.3
kubectl get pod -n kube-system |grep scheduler
# 升级完成后查看scheduler的镜像版本是否是1.20.12
kubectl edit pod kube-scheduler-kcpm1 -n kube-system

2.4 master节点回退

# 1. 依次将apiserver、kube-controller-manager和scheduler回退到1.18.5,将镜像的tag更改为1.18.5
# 2. apiserver、kube-controller-manager和scheduler回退到1.18.5
mv /tmp/manifests/* /apps/conf/kubernetes/manifests/
  1. 逐节点更新所有节点的kubelet到1.20
    3.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/

3.2 kubelet
3.2.1 重启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

3.2.2 查看升级状态

# 查看kubelet状态
systemctl status kubelet
# 查看kubelet版本是否是1.20.12
kubelet --version
# 设置节点取消维护状态
kubectl uncordon <node name> 

3.3 回退
若kubelet状态异常且无法解决,则需要回退。

systemctl stop kubelet
cp /apps/conf/kubernetes/kubelet.env.bak /apps/conf/kubernetes/kubelet.env
cp /apps/bin/kubelet-1.18.5 /apps/bin/kubelet
cp /apps/bin/kubelet-1.18.5 /usr/bin/kubelet
systemctl daemon-reload && systemctl restart kubele 
  1. addon更新到1.20

4.1 kube-proxy

kubectl edit  ds kube-proxy -nkube-system
# 替换镜像为 registry.paas/cmss/kube-proxy:v1.20.12 

4.2 查看升级状态

# 升级完成后查看kube-proxy的pod是否重新启动,状态是否正常,若是不正常需要回退
kubectl get pod -n kube-system |grep kube-proxy
# 升级完成后查看scheduler的镜像版本是否是1.20.12
kubectl edit pod kube-proxy-kcpm1 -n kube-system
# 查看是否能够访问集群中的服务来验证kube-proxy的功能,若是能连通,则代表kube-proxy升级成功
curl serviceip:port

4.3 回退
若是组件状态有问题且无法解决,需要回退。

## kebe-proxy回退,替换镜像为registry.paas/cmss/kube-proxy:v1.18.5
/apps/bin/kubectl edit ds kube-proxy -n kube-system

作者:姜博文