只是好奇,使用 mesos 我已经习惯了能够做到这一点systemctl stop mesos-master
and systemctl start mesos-master
(如果我因某种原因需要退回)。对于 k8s,控制平面中有多个组件需要“停止”,例如 apiserver、controller-manager 等。
当使用 kubeadm 创建集群时,它以 Pod 的形式运行控制平面(没有副本集或类似的东西,也许是因为我目前只有一个主服务器)。
在不破坏集群的情况下停止控制平面中的事物然后再次启动它们的最佳方法是什么?
Kubernetes 控制平面 Pod 通常部署为静态吊舱 https://kubernetes.io/docs/tasks/administer-cluster/static-pod/。这些不由任何类型的部署控制器管理,而是在放置在配置目录中的静态(因此得名)配置文件中定义(例如/etc/kubelet.d/
or /etc/kubernetes/manifests
,具体取决于您的集群的设置方式)。这些定义文件由运行在创建相应 Pod 的 Kubernetes 主节点上的 Kubelet 获取。
根据文档,您只需删除相应的配置文件即可停止/删除静态 Pod,并通过创建新文件再次启动/创建它们:
运行 kubelet 定期扫描配置的目录(/etc/kubelet.d
在我们的示例中)用于更改并添加/删除 pod,因为文件在此目录中出现/消失。
[joe@my-node1 ~] $ mv /etc/kubelet.d/static-web.yaml /tmp
[joe@my-node1 ~] $ sleep 20
[joe@my-node1 ~] $ docker ps
// no nginx container is running
[joe@my-node1 ~] $ mv /tmp/static-web.yaml /etc/kubelet.d/
[joe@my-node1 ~] $ sleep 20
[joe@my-node1 ~] $ docker ps
CONTAINER ID IMAGE COMMAND CREATED ...
e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago
要暂时禁用/启用这些 pod,只需将定义文件移至安全位置并再次移回即可:
$ mv /etc/kubelet.d/*.yaml /tmp # Disable static pods
$ mv /tmp/*.yaml /etc/kubelet.d # Re-enable static pods
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)