个别时候,我们需要对我们cluster中的node进行维护,例如重启,我们如果不希望客户的pod手动影响,我们可以先drain这个node, 意思就是把上边的pod都迁移到其他node上,这样你重启这个机器就影响任何pod了
1 |
kubectl drain node-1 |
当我们重启完后,这个node状态时是cordoned(无法schedule 任何pod到这个node),我们需要手动标记这个node可用
1 |
kubectl uncordorn node-1 |
当然,我们平时也可以标记一个node不可用
1 |
$ kubectl cordorn node-1 |
注意,cordorn命令执行后,node-1上的pod并不受影响,但是新的pod不会被schedule到这个node-1了
那么如何升级我们的kubernetes?
对于workernode ,我们基本上会有两种主要的方法:
1: 逐一升级(drain first)
2: 创建全新的Node加入集群,然后迁移pod,然后干掉旧的node
对于Master Node,我们如果用的是kubeadm 安装的集群,可以通过如下命令:
1 |
kubeadm upgrade plan |
1 |
apt-get upgrade -y kubeadm=1.12.0-00 |
1 |
kubeadm upgrade apply v1.12.0 |
注意,这个时候如果你执行kubectl get nodes
你看到的还是旧版本,因为刚我们升级的是API server ,kube proxy等,并不是Node 上的kubelet版本
我们需要手动升级kubelet
1 2 3 |
apt-get upgrade kubelet=1.12.0-00 systemctl restart kubelet systemctl restart kubelet |
node也是同样的升级步骤
先在master node上drain node-1
1 |
$ kubectl drain node-1 |
然后登陆node-1
1 2 |
$ apt-get upgrade -y kubeadm=1.12.0-00 $ apt-get upgrade -y kubelet=1.12.0-00 |
1 2 |
$ kubeadm upgrade node config --kubelet-version v1.12.0 systemctl restart kubelet |
然后我们再去master上执行如下命令:
1 |
systemctl restart kubelet |
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021