1. 背景
- 为了部分客户能自主控制集群升级,整理该文档。该文档适用于 1.16 及以前版本
- 请在 3 台 Master 节点上,逐台完成节点版本升级操作
- 确认 3 台 Mmaster 节点全部升级完成后,请联系 UK8S 团队,再次确认集群控制面完成升级,再进行 Node 节点的轮换工作
2. ETCD 手动备份
2.1 节点准备
任意挑选一台master节点 设置IP=节点ip
2.2 目录准备
生成目录
mkdir -p /data/etcd-backup
2.3 备份命令
执行备份脚本
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem --endpoints=https://$IP:2379 snapshot save /data/etcd-backup/etcd-backup.db
2.4 检查数据
查看备份db的状态
ETCDCTL_API=3 etcdctl snapshot status /data/etcd-backup/etcd-backup.db
3. 节点版本升级
3.1 准备好新版本的二进制文件
下载对应版本的二进制并解压。以 1.12 升级至 1.14.10 为例
# 准备临时目录,用于新版本安装包下载
mkdir -p /data/tmpupgrade
cd /data/tmpupgrade
# 下载压缩包,如需升级到其他版本,替换 URL 中的版本号至相应版本即可
wget https://dl.k8s.io/v1.14.10/kubernetes-server-linux-amd64.tar.gz
# 解压
tar xvf kubernetes-server-linux-amd64.tar.gz
3.2 备份旧版本的二进制文件
cp /usr/local/bin/kubectl /usr/local/bin/kubectl.bak
cp /usr/local/bin/hyperkube /usr/local/bin/hyperkube.bak
3.3 安装新的二进制文件
install /data/tmpupgrade/kubernetes/server/bin/kubectl /usr/local/bin/kubectl
install /data/tmpupgrade/kubernetes/server/bin/hyperkube /usr/local/bin/hyperkube
3.4 重启服务
# 检查服务是否添加到开机启动,部分 1.13 以下版本集群无 kubelet 服务
systemctl is-enabled kube-apiserver kube-controller-manager kube-scheduler kubelet
# 加载 service 文件
systemctl daemon-reload
# 重启服务
systemctl restart kube-apiserver kube-controller-manager kube-scheduler kubelet
# 检查服务是否正常
systemctl is-active kube-apiserver kube-controller-manager kube-scheduler kubelet
3.5 检查集群组件
#查看版本
kubectl version
#查看组件状态
kubectl get cs
4. 节点版本回退
4.1 通过备份文件回退旧版本
install /usr/local/bin/kubectl.bak /usr/local/bin/kubectl
install /usr/local/bin/hyperkube.bak /usr/local/bin/hyperkube
4.2 重启服务及检查集群组件
参考 3.4 及 3.5 操作
5. etcd数据回退
5.1 删除数据
# 停止组件
systemctl stop kube-apiserver kube-controller-manager kube-scheduler
# 停止 etcd 服务
systemctl stop etcd
# 如有遗留数据则删除旧的 etcd 数据
rm -rf /var/lib/etcd
# 新建数据目录
mkdir /var/lib/etcd
5.2 恢复数据
# 登录另外两台master节点分别执行
# 目录
mkdir -p /data/etcd-backup/
# 分发数据
scp $ORIGINIP:/data/etcd-backup/etcd-backup.db /data/etcd-backup/
# 设置版本
export ETCDCTL_API=3
# vim /etc/etcd/etcd.conf 可以查看name
export ETCD_NAME=
#这只IP
export NODE_IP=
etcdctl --name=$ETCD_NAME --endpoints=https://$NODE_IP:2379 --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem --cacert=/etc/kubernetes/ssl/ca.pem --initial-cluster-token=etcd-cluster --initial-advertise-peer-urls=https://$NODE_IP:2380 --initial-cluster=etcd1=https://10.23.95.6:2380,etcd2=https://10.23.172.172:2380,etcd3=https://10.23.166.234:2380 --data-dir=/var/lib/etcd/default.etcd/ snapshot restore /data/etcd-backup/etcd-backup.db
5.3 启动etcd服务
systemctl start etcd
5.4 重启组件
参考3.4及3.5