本文纯粹为了升级而升级,不在解决v1.21.0的任何bug,只为了做一个K8s升级的文档
K8s的升级一般在1个大版本之内升级,超过2个请谨慎处理.
例如:1.21.x 升级到1.22.x,升级1.23.x理论上步骤是一样的
同时事先做好ETCD的备份
V2版本:
/opt/etcd_backup 此目录必须为空
ETCDCTL_API=2 etcdctl backup --data-dir /var/lib/etcd/ --backup-dir /bak/etcd_backup
V3版本:
etcdctl snapshot save /bak/snapshot.db

v1.21.12 release 下载地址:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md


下载并上传至服务器

mkdir /apps/kubernetes
上传kubernetes-server-linux-amd64.tar.gz
tax xf kubernetes-server-linux-amd64.tar.gz
cd /apps/kubernetes/kubernetes/server/bin/

先停用掉负载均衡的配置,停用升级的服务器分发


Master节点上需要升级kube-apiserver kube-controller-manager kubectl kubelet kube-proxy kube-scheduler
其中kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler有service,需要先停止

systemctl stop kube-apiserver kube-controller-manager \
kubelet kube-proxy kube-scheduler

替换文件
scp kube-apiserver kube-controller-manager \
kubectl kubelet kube-proxy kube-scheduler k8s-master-03:/usr/bin/

systemctl start kube-apiserver kube-controller-manager \
kubelet kube-proxy kube-scheduler

这里应该再确认下master3的升级后版本情况,但忘记截图了
kubectl get node


同样的停止服务,复制文件,启动服务
systemctl stop kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler
scp kube-apiserver kube-controller-manager \
kubectl kubelet kube-proxy kube-scheduler k8s-master-01:/usr/bin/
scp kube-apiserver kube-controller-manager \
kubectl kubelet kube-proxy kube-scheduler k8s-master-02:/usr/bin/
systemctl start kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler




当前k8s环境pods状态

kubelet和kube-proxy都有service文件,所以需要停止这2个服务,并复制kubectl,kubelet,kube-proxy3个文件

systemctl stop kubelet kube-proxy

scp kubectl kubelet kube-proxy node-1:/usr/bin


升级成功
可以看到重启kubelet和kube-proxy对已经启动的pods没有影响





至此整个k8s升级完成