我在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
在关闭主节点之前,它显示正确(小兵的名字和数量相同)。
答案 0 :(得分:5)
感谢Carlos的提示。
您可以按照以下步骤从Kubernetes集群中分离所有活动节点。
1-转到Kubernetes Engine仪表板并选择集群。
https://console.cloud.google.com/kubernetes
2-转到详细信息,然后单击“编辑”,将池大小设置为零(0)。
3-在Compute Engine仪表板上关闭验证节点
https://console.cloud.google.com/compute
答案 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节点。
kubectl get nodes
运行的列表od节点。这将列出在kuberneted集群的当前上下文中运行的节点。kubectl drain [pod/node-name]
。gcloud compute instances stop [instances-name] --async --zone=[zone]
关闭计算实例。这将停止VM实例,并且Kubernetes不会触发实例的自动重启,因为它的节点/吊舱已经关闭。gcloud compute instances start [instances-name] --async --zone=[zone]
。但是,此命令不足以开始使用您的kubernetes集群。您需要uncordon
上一步中耗尽的kubernetes节点。drain
模式,请使用此命令将其启动kubectl uncordon [node/pod-name]
。注意:使用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只删除群集。