Kubernetes的版本升级需要考虑到不要让当前集群中正在运行的容
器受到影响。 应对集群中的各Node逐个进行隔离, 然后等待在其上运行
的容器全部执行完成, 再更新该Node上的kubelet和kube-proxy服务, 将
全部Node都更新完成后, 再更新Master的服务。
1.通过官网获取最新版本的二进制包kubernetes.tar.gz, 解压后提
取服务的二进制文件。
1 |
我们是二进制安装的,所以只关注二进制更新文件即可 |
当前我本机kubernetes版本是 1.9
1 |
kubectl version |
要升级到1.15版本
当前各个节点都有哪些组件?
worker节点的服务
1 2 3 4 |
kubelet kube-proxy kubectl kube-calico #网络一般不需更新 |
master
1 2 3 4 5 6 |
kube-controller-manager kube-apiserver kube-scheduler kube-calico #网络一般不需更新 etcd #数据库不需要更新 kubelet |
先更新worker节点,再更新master节点
逐个隔离Node, 等待在其上运行的全部容器工作完成后, 更新
kubelet和kube-proxy服务文件, 然后重启这两个服务
node隔离请看这里 传送门
隔离node1
1 |
kubectl cordon 192.168.66.188 #隔离node1 |
驱逐node1上的pod
1 |
kubectl drain 192.168.66.188 --delete-local-data --ignore-daemonsets --force |
- –delete-local-data: 即使pod使用了emptyDir也删除
- –ignore-daemonsets: 忽略deamonset控制器的pod,如果不忽略,deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,会成为死循环;
- –force: 不加force参数只会删除该NODE上由ReplicationController, ReplicaSet, DaemonSet,StatefulSet or Job创建的Pod,加了后还会删除’裸奔的pod’(没有绑定到任何replication controller)
更新 kubelet和kube-proxy服务文件, 然后重启这两个服务
1 2 3 4 5 6 7 8 9 10 11 |
mv /usr/bin/kubelet /usr/bin/kubelet.back.1106 mv /usr/bin/kube-proxy /usr/bin/kube-proxy.back.1106 mv /usr/bin/kubectl /usr/bin/kubectl.back.1106 cp /root/server/* /usr/bin/ chmod a+x kubelet kube-proxy kubectl service kubelet restart service kube-proxy restart |
解除隔离
1 |
kubectl uncordon k8s-node1 |
查看当前kubectl版本:
1 |
kubectl version |
更新master
1 2 3 4 5 6 7 8 |
mv /usr/bin/kube-apiserver /usr/bin/kube-apiserver.back.1106 mv /usr/bin/kubelet /usr/bin/kubelet.back.1106 mv /usr/bin/kube-proxy /usr/bin/kube-proxy.back.1106 mv /usr/bin/kube-scheduler /usr/bin/kube-scheduler.back.1106 mv /usr/bin/kubectl /usr/bin/kubectl.back.1106 mv /usr/bin/kube-controller-manager /usr/bin/kube-controller-manager.back.1106 cp /root/server/* /usr/bin/ |
重启服务
1 2 3 4 5 6 |
service kube-apiserver restart service kube-controller-manager restart service kube-scheduler restart service kube-proxy restart service kubelet restart |
查看集群节点状态
NotReady
why ? 查看组件状态
1 |
systemctl status kubelet |
大佬Qist说 因为1.9和 1.15版本差距较大 1.14以后的版本没有–allow-privileged=true \ 这个参数,所以删除这个参数重新启动组件
1 2 3 4 5 |
需要删除: kubelet 和 kube-apiserver 服务文件里的这行参数 vim /usr/lib/systemd/system/kubelet.service vim /usr/lib/systemd/system/kube-apiserver.service |
重启这2个服务
1 2 |
systemctl restart kube-apiserver.service systemctl restart kubelet.service |
需要等一会
项目部署yaml里的api也要更新到最新版本
api 更新到最新
1 |
kubectl api-versions |
- 本文固定链接: https://www.yoyoask.com/?p=4236
- 转载请注明: shooter 于 SHOOTER 发表