集群升级
https://v1-24.docs.kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
部署cri-docker (所有集群节点)
k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker
软件下载:https://github.com/Mirantis/cri-dockerd
安装
[root@k8s2 ~]# rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm
配置cri-docker
[root@k8s2 ~]# vim /usr/lib/systemd/system/cri-docker.service
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.westos.org/k8s/pause:3.7
[root@k8s2 ~]# systemctl daemon-reload
[root@k8s2 ~]# systemctl enable --now cri-docker
[root@k8s2 ~]# ll /var/run/cri-dockerd.sock
srw-rw---- 1 root docker 0 Jan 9 17:51 /var/run/cri-dockerd.sock
升级master节点
首先上传镜像到harbor仓库,便于升级
[root@k8s1 harbor]# docker images reg.westos.org/k8s/*
reg.westos.org/k8s/kube-apiserver v1.24.0
reg.westos.org/k8s/kube-proxy v1.24.0
reg.westos.org/k8s/kube-scheduler v1.24.0
reg.westos.org/k8s/kube-controller-manager v1.24.0
reg.westos.org/k8s/etcd 3.5.3-0
reg.westos.org/k8s/pause 3.7
reg.westos.org/k8s/coredns v1.8.6
升级kubeadm
[root@k8s2 ~]# yum install -y kubeadm-1.24.0-0
执行升级
[root@k8s2 ~]# kubeadm upgrade plan
修改节点套接字
[root@k8s2 ~]# kubectl edit nodes k8s2
...
kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/cri-dockerd.sock
[root@k8s2 ~]# kubeadm upgrade apply v1.24.0
腾空节点
[root@k8s2 ~]# kubectl drain k8s2 --ignore-daemonsets
升级kubelet
[root@k8s2 ~]# yum install -y kubelet-1.24.0-0 kubectl-1.24.0-0
配置kubelet使用cri-docker
[root@k8s2 ~]# vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--pod-infra-container-image=reg.westos.org/k8s/pause:3.7 --container-runtime=remote --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock"
重启kubelet
[root@k8s2 ~]# systemctl daemon-reload
[root@k8s2 ~]# systemctl restart kubelet
解除节点保护
[root@k8s2 ~]# kubectl uncordon k8s2
升级worker节点
升级kubeadm
[root@k8s3 ~]# yum install -y kubeadm-1.24.0-0
执行升级
[root@k8s3 ~]# kubeadm upgrade node
腾空节点
[root@k8s2 ~]# kubectl drain k8s3 --ignore-daemonsets #需要在master节点执行
升级kubelet
[root@k8s3 ~]# yum install -y kubelet-1.24.0-0 kubectl-1.24.0-0
配置kubelet使用cri-docker
[root@k8s3 ~]# vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--pod-infra-container-image=reg.westos.org/k8s/pause:3.7 --container-runtime=remote --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock"
修改节点套接字
[root@k8s2 ~]# kubectl edit nodes k8s3 #需要在master节点执行
...
kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/cri-dockerd.sock
重启kubelet
[root@k8s3 ~]# systemctl daemon-reload
[root@k8s3 ~]# systemctl restart kubelet
解除节点保护
[root@k8s2 ~]# kubectl uncordon k8s3 #需要在master节点执行
其它节点依此类推