1. 目的
本文纯粹为了升级而升级,不在解决v1.21.0的任何bug,只为了做一个K8s升级的文档
K8s的升级一般在1个大版本之内升级,超过2个请谨慎处理.
例如:1.21.x 升级到1.22.x,升级1.23.x理论上步骤是一样的
同时事先做好ETCD的备份
1.1 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
2. 准备工作
2.1 获取必要的二进制文件
v1.21.12 release 下载地址:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md
下载并上传至服务器
2.2 解压安装包
mkdir /apps/kubernetes
上传kubernetes-server-linux-amd64.tar.gz
tax xf kubernetes-server-linux-amd64.tar.gz
cd /apps/kubernetes/kubernetes/server/bin/
3. 升级Master节点
3.1 停置向升级的服务器转发请求
先停用掉负载均衡的配置,停用升级的服务器分发
3.2 Master节点上停止服务
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/
3.3 启动master3上的服务
systemctl start kube-apiserver kube-controller-manager \
kubelet kube-proxy kube-scheduler
这里应该再确认下master3的升级后版本情况,但忘记截图了
kubectl get node
3.4 再注释掉master1和master2,并解开master3的注释
3.5 升级master1和master2
同样的停止服务,复制文件,启动服务
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
3.6 恢复haproxy,使得3个master都被正常轮询
3.7 升级master节点完成
4. 升级node节点
当前k8s环境pods状态
kubelet和kube-proxy都有service文件,所以需要停止这2个服务,并复制kubectl,kubelet,kube-proxy3个文件
4.1 停用node1 kubelet和kube-proxy
systemctl stop kubelet kube-proxy
4.2 将文件复制到node1上
scp kubectl kubelet kube-proxy node-1:/usr/bin
4.3 启动node1上的kubelet和kube-proxy
4.4 确认node1版本
升级成功
可以看到重启kubelet和kube-proxy对已经启动的pods没有影响
4.5 依次升级node2和node3
至此整个k8s升级完成