TOC
最近kubernetes爆严重安全漏洞,赶紧升级下。 漏洞连接
k8s环境是通过kubeasz搭建部署的。 搭建参考
因为整个升级比较简单,就没用kubeasz中的升级脚本,图省事 可以使用项目中的 脚本。 kubeasz升级文档
准备二进制文件
github地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md#downloads-for-v1123
server: https://dl.k8s.io/v1.12.3/kubernetes-server-linux-amd64.tar.gz
docker: https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz (官方推荐版本)
我下载的时候被墙了,网盘地址:https://pan.baidu.com/s/1vgSXE01JHxd2bQqDGJLWEQ
在deploy节点上
先备份 原有二进制
cp -a /etc/ansible/bin /etc/ansible/bin-1.11.3
解压server 然后把kube开头的文件 copy到 /etc/ansible/bin 覆盖掉原有
# 如果需要更新docker
解压docker 把所有二进制文件 也覆盖/etc/ansible/bin
升级前好好看下官方升级文档,注意下所有组件启动时配置参数是否有大的改动,建议参考kubeasz项目中的systemd模板进行修改,也可以拉取 kubeasz master分支的最新代码 重新执行部署kube-master kube-node 角色, 注意如果跨大版本升级需要修改/etc/ansible/hosts文件中的参数K8S_VER
备份etcd
保险起见还是先备份 etcd,以免后续出问题了能重建
在任意 etcd节点上执行:
# snapshot备份
ETCDCTL_API=3 etcdctl snapshot save backup.db
# 查看备份
ETCDCTL_API=3 etcdctl --write-out=table snapshot status backup.db
分发二进制文件
ansible kube-node,deploy -m copy -a 'src=/etc/ansible/bin/ dest=/opt/kube/bin/'
ansible kube-master -m copy -a 'src=/etc/ansible/bin/ dest=/opt/kube/bin/'
重启服务
ansible kube-master -a 'systemctl restart kube-apiserver'
ansible kube-master -a 'systemctl restart kube-controller-manager'
ansible kube-master -a 'systemctl restart kube-scheduler'
ansible kube-node -a 'systemctl restart kubelet'
ansible kube-node -a 'systemctl restart kube-proxy'
docker
就目前k8s 对迁移的支持,升级docker 肯定会对业务有影响的,应尽量避免升级docker!
先分发docker最新二进制到各节点
待升级节点,先应用kubectl drain命令迁移业务pod,然后删除kubectl delete node
待升级节点执行 systemctl restart docker 然后systemctl restart kubelet 重新加入集群
验证
kubectl get node
kubectl get cs
kubectl version
整个流程还是比较简单的,替换二进制,重启相关服务即可。