一、手动升级步骤
- 导入镜像至镜像仓库
# 将镜像导入到镜像仓库中
## 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
- 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/
- 逐节点更新所有节点的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
- 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
标签:kube,apps,升级,kubelet,manager,scheduler,IPV6,pod,k8s From: https://www.cnblogs.com/DTCLOUD/p/17436482.html作者:姜博文