我想扩大/缩小计算机数量,以增加/减少Kubernetes集群中的节点数量。当我添加一台机器时,我能够成功地将其注册到Kubernetes;因此,按预期创建新节点。但是,我不清楚如何在以后顺利关闭机器。一个好的工作流程是:
如果我理解正确,即使kubectl drain
(discussion)也没有做到我所期望的,因为它在删除之前没有启动pod(它依赖于复制控制器来启动之后的吊舱可能导致停机)。我错过了什么吗?
我应该如何正确关闭机器?
答案 0 :(得分:13)
列出节点并获取要耗尽或(从集群中删除)的<node-name>
kubectl get nodes
1)首先排空节点
kubectl drain <node-name>
您可能不得不忽略计算机中的守护程序和本地数据
kubectl drain <node-name> --ignore-daemonsets --delete-local-data
2)编辑节点的实例组(仅在使用kops的情况下)
kops edit ig nodes
将MIX和MAX大小设置为-1 只需保存文件(无需执行其他操作)
在耗尽的节点中,您仍然可能会看到一些与守护程序相关的pod,例如网络插件,流利的日志,kubedns / coredns等
3)最后删除节点
kubectl delete node <node-name>
4)在s3中提交KOPS的状态:
kops update cluster --yes
答案 1 :(得分:10)
在主节点上
找到节点
kubectl get nodes
排干
kubectl drain nodetoberemoved
删除
kubectl delete node nodetoberemoved
在工作节点上(nodetoberemoved)。从节点中删除加入/初始化设置
kubeadm reset
答案 2 :(得分:4)
圣拉斐尔。 kubectl drain
确实可以按照您的描述运作。有一些停机时间,就像机器崩溃一样。
您能描述一下您的设置吗?您有多少个副本,是否配置了这样的副本以便您无法处理单个副本的停机时间?
答案 3 :(得分:0)
If the cluster is created by kops
1.kubectl drain <node-name>
now all the pods will be evicted
ignore daemeondet:
2.kubectl drain <node-name> --ignore-daemonsets --delete-local-data
3.kops edit ig nodes-3 --state=s3://bucketname
set max and min value of instance group to 0
4. kubectl delete node
5. kops update cluster --state=s3://bucketname --yes
Rolling update if required:
6. kops rolling-update cluster --state=s3://bucketname --yes
validate cluster:
7.kops validate cluster --state=s3://bucketname
Now the instance will be terminated.
答案 4 :(得分:0)
当 kubectl drain
时,我会出现一些奇怪的行为。这是我的额外步骤,否则在我的情况下数据将丢失!
简短回答:检查是否没有 PersistentVolume 安装到此节点。如果有一些PV,请参阅以下说明将其删除。
在执行 kubectl drain
时,我注意到一些 Pod 没有被驱逐(它们只是没有像 evicting pod xxx
那样出现在那些日志中)。
就我而言,有些是具有软反亲和性的 pod(所以他们不喜欢去剩余的节点),有些是大小为 1 的 StatefulSet 的 pod,并希望保留至少 1 个 pod。
如果我直接删除该节点(使用其他答案中提到的命令),数据将丢失,因为这些 Pod 有一些 PersistentVolume,删除一个节点也会删除 PersistentVolume(如果使用某些云提供商)。
因此,请手动一一删除这些 Pod。删除后,kuberentes 会重新调度 pod 到其他节点(因为这个节点是 SchedulingDisabled)。
删除所有 Pod(不包括 DaemonSets)后,请检查是否没有 PersistentVolume 挂载到该节点。
然后你可以安全地删除节点本身:)
答案 5 :(得分:0)
从 Kubernetes 中删除工作节点