只是好奇,与mesos我已经习惯了能够做systemctl stop mesos-master和systemctl start mesos-master(如果我需要反弹由于某种原因)。使用 k8s,控制平面中有多个组件可以“停止”,例如 apiserver、controller-manager 等。
使用 kubeadm 创建集群时,它将控制平面作为 pod 运行(没有副本集或类似的东西,可能是因为我目前只有一个主节点)。
在不拆除集群的情况下停止控制平面中的事物然后再次启动它们的最佳方法是什么?
Kubernetes 控制平面 Pod 通常部署为静态Pod 。这些不是由任何类型的部署控制器管理,而是在放置在配置目录中的静态(因此得名)配置文件中定义(例如/etc/kubelet.d/或/etc/kubernetes/manifests,取决于您的集群的设置方式)。这些定义文件由在 Kubernetes 主节点上运行的 Kubelet 获取,该节点创建相应的 pod。
根据文档,您可以通过删除相应的配置文件来停止/删除静态 Pod,并通过创建新文件重新启动/创建它们:
运行 kubelet 会定期扫描配置的目录(
/etc/kubelet.d在我们的示例中)以进行更改,并在文件在此目录中出现/消失时添加/删除 pod。Run Code Online (Sandbox Code Playgroud)[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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3038 次 |
| 最近记录: |