如何重启kubernetes主节点

tou*_*oil 6 kubernetes

我有一个kubernetes集群,有3个master和3个worker,我想重新启动其中一个master来更新master机器的系统。

那么我是否可以直接在控制台上使用 重新启动计算机reboot,或者在重新启动之前需要执行一些步骤以避免服务中断和数据丢失的风险?

Arg*_*dhu 6

如果需要重新启动节点(例如内核升级、libc 升级、硬件修复等),并且停机时间很短,那么当 Kubelet 重新启动时,它将尝试重新启动为其调度的 pod。如果重启时间较长(默认时间为 5 分钟,由控制器管理器上的 --pod-eviction-timeout 控制),则节点控制器将终止绑定到不可用节点的 pod。如果存在相应的副本集(或复制控制器),那么将在不同的节点上启动 pod 的新副本。因此,在所有 pod 都被复制的情况下,假设并非所有节点都会同时宕机,则无需特殊协调即可完成升级

如果您想更好地控制升级过程,可以使用以下工作流程:

使用 kubectl dance 优雅地终止节点上的所有 pod,同时将节点标记为不可调度:

kubectl drain $NODENAME
Run Code Online (Sandbox Code Playgroud)

当您尝试将新 Pod 卸下时,这可以防止新 Pod 登陆到节点上。对于具有副本集的 Pod,该 Pod 将被新的 Pod 替换,新的 Pod 将被调度到新节点。此外,如果 Pod 是服务的一部分,那么客户端将自动重定向到新的 Pod。对于没有副本集的 Pod,您需要启动 Pod 的新副本,并假设它不是服务的一部分,将客户端重定向到它。在节点上执行维护工作。使节点再次可调度:

kubectl uncordon $NODENAME
Run Code Online (Sandbox Code Playgroud)

此外,如果节点托管 ETCD,那么您需要在 ETCD 滚动升级和备份数据方面格外小心


Vai*_* PS 6

ETCD如果托管ETCD. 您可以使用内置命令来备份数据,例如

ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
     --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \
     snapshot save /tmp/snapshot-pre-boot.db
Run Code Online (Sandbox Code Playgroud)

现在使用耗尽节点

kubectl drain <master01>
Run Code Online (Sandbox Code Playgroud)

进行系统更新 | 打补丁并重新启动。

现在将节点解除封锁返回集群

kubectl uncordon <master01>
Run Code Online (Sandbox Code Playgroud)