kubernetes 1.11升级1.12

Posted by     "李森" on Thursday, December 6, 2018

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

整个流程还是比较简单的,替换二进制,重启相关服务即可。