如何阻止kubernetes集群?

时间:2017-10-19 20:16:05

标签: kubernetes google-cloud-platform google-kubernetes-engine

我在kube-up.sh的帮助下在Google计算引擎上启动了claster。此脚本创建了主节点和minion组。在我不再需要它之后,我想停止一个集群并关闭所有虚拟机,以免浪费资金用于工作。当我关闭它时(我只关闭了所有的集群虚拟机,因为我不知道另一种方法),然后在一段时间后再次启动我的集群将不再工作。 " kubectl获取节点"显示有关节点的信息不正确(例如,我有A B C节点== minions,它只显示甚至不存在的D),并且所有命令都非常慢。也许我关闭它不正确。如何在一段时间内停止集群并停止VM以便再次启动它? (不删除)

我有什么集群:

kubernetes-master             | us-central1-b
kubernetes-minion-group-nq7f  | us-central1-b
kubernetes-minion-group-gh5k  | us-central1-b

什么显示" kubectl获取节点"命令:

[root@common frest0512]# kubectl get nodes
NAME                           STATUS                     AGE       VERSION
kubernetes-master              Ready,SchedulingDisabled   7h        v1.8.0
kubernetes-minion-group-02s7   Ready                      7h        v1.8.0
kubernetes-minion-group-92rn   Ready                      7h        v1.8.0
kubernetes-minion-group-kn2c   Ready                      7h        v1.8.0

在关闭主节点之前,它显示正确(小兵的名字和数量相同)。

5 个答案:

答案 0 :(得分:5)

感谢Carlos的提示。

您可以按照以下步骤从Kubernetes集群中分离所有活动节点。

1-转到Kubernetes Engine仪表板并选择集群。
https://console.cloud.google.com/kubernetes

enter image description here

2-转到详细信息,然后单击“编辑”,将池大小设置为零(0)。

enter image description here

3-在Compute Engine仪表板上关闭验证节点
https://console.cloud.google.com/compute

enter image description here

答案 1 :(得分:3)

除非我误解,否则听起来您正试图通过Compute Engine单独停止VM来杀死群集。如果是这样,Container Engine将会看到VM已被杀死,并在其位置启动新的VM以保持群集健康。如果要停止群集,则必须通过 Container 引擎界面执行此操作。通过这种方式,它将知道杀死节点不是一个错误,它将关闭所有配置的VM和磁盘。

答案 2 :(得分:0)

如果使用的是kubeadm,则没有直接方法可以正常关机。只能重置

kubeadm重置

答案 3 :(得分:0)

我已经找到了解决此问题的方法,因为在开发阶段工作时由于google cloud收费而面临同样的问题。您发出命令停止实例后,Kubernetes会严格重新启动Google Cloud Computing VM,因为kubenetes就是这样做的。例如:

gcloud compute instances stop [instance-name] --async --zone=us-central1-b

将停止实例一次,然后kubernetes在意识到实例已关闭时将自动触发重新启动。该命令将在任何其他实例上完美运行,但不适用于使用kuberneted集群创建的实例

因为kubernetes正在处理计算实例,因为它倾向于重新启动已关闭的实例。为了停止实例tp降低运营成本,您必须使用以下命令耗尽kuberneted节点。

要停止计算VM实例。

  • 获取使用kubectl get nodes运行的列表od节点。这将列出在kuberneted集群的当前上下文中运行的节点。
  • 您可能需要以耗尽模式关闭所有节点才能停止kuberneted服务。使用以下命令kubectl drain [pod/node-name]
  • 然后使用gcloud命令通过以下命令gcloud compute instances stop [instances-name] --async --zone=[zone]关闭计算实例。这将停止VM实例,并且Kubernetes不会触发实例的自动重启,因为它的节点/吊舱已经关闭。

要重新启动计算VM实例

  • 使用以下命令重新启动计算VM实例gcloud compute instances start [instances-name] --async --zone=[zone]。但是,此命令不足以开始使用您的kubernetes集群。您需要uncordon上一步中耗尽的kubernetes节点。
  • 由于我们的节点处于drain模式,请使用此命令将其启动kubectl uncordon [node/pod-name]
  • 现在,您将能够访问kubernetes集群节点公开的API。

注意:使用Google Cloud Console可以实现相同的解决方案,但是我是DevOps的从业者,所以我一直在制作脚本以使工作流自动化,并且希望为您做一些脚本可以从长远来看对您有所帮助。

答案 4 :(得分:-1)

使用kubectl delete deployment deployment_name

kubectl delete pods --all

kubectl drain node_name准备维护节点之后,您可以使用kubectl delete node node_name重新启动或删除

如果您全部删除,请使用kubeadm reset清除所有数据并删除群集 或者如果您使用GKE只删除群集。