1. 背景

  • 为了部分客户能自主控制集群升级,整理该文档。该文档适用于 1.16 及以前版本
  • 请在 3 台 Master 节点上,逐台完成节点版本升级操作
  • 确认 3 台 Mmaster 节点全部升级完成后,请联系 UK8S 团队,再次确认集群控制面完成升级,再进行 Node 节点的轮换工作

    2. ETCD 手动备份

    2.1 节点准备

    任意挑选一台master节点 设置IP=节点ip

2.2 目录准备

生成目录

  1. 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