如何停止和重新启动 kubernetes 中的节点

4 nodes kubernetes kubectl

我有3个节点 kubectl get nodes

NAME      STATUS   ROLES    AGE    VERSION
a1       Ready    master   133m   v1.18.6-gke.6600
a2       Ready    master   132m   v1.18.6-gke.6600
a3       Ready    master   132m   v1.18.6-gke.6600
Run Code Online (Sandbox Code Playgroud)

所以该节点的状态为“就绪”我想停止第一个节点并再次重新启动该节点

我尝试过

kubectl cordon a1

NAME      STATUS                     ROLES    AGE    VERSION
a1     Ready,SchedulingDisabled   master   138m   v1.18.6-gke.6600
a2     Ready                      master   137m   v1.18.6-gke.6600
a3     Ready                      master   137m   v1.18.6-gke.6600
Run Code Online (Sandbox Code Playgroud)

但我的后端仍在工作,虽然如果在这种情况下icordon所有节点,我的后端也正在工作,但我希望我的后端服务将停止并再次恢复,我也尝试过

kubectl drain a1

error: unable to drain node "abm-cp2", aborting command...

There are pending nodes to be drained:
 a2
error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/anetd-4pr9j, kube-system/etcd-defrag-8fs99, kube-system/kube-proxy-8cgpf, kube-system/localpv-mlfnf, kube-system/metallb-speaker-ljsdv, kube-system/node-exporter-dfrnq, kube-system/stackdriver-log-forwarder-t5s88
Run Code Online (Sandbox Code Playgroud)

Har*_*var 8

可能您对警戒线排水节点的含义有误解。

警戒线节点

这意味着不再有新的容器将被调度到该节点上,但是现有正在运行的容器将保留在同一节点上。

漏极节点

漏节点将从该特定节点删除所有容器,并将所有容器调度到另一个节点。

正如我在你想做的事情下一样

我想停止第一个节点并再次重新启动这些节点

如果您可以访问节点并通过 SSH 进入工作节点,您也可以在 SSH 之后在节点内运行:systemctl restart kubelet

或者

您可以停止部署或将部署缩减为零意味着您可以暂停或重新启动容器或 Pod

使用节点,您可以删除节点,新节点将加入 Kubernetes 集群。

kubectl delete node a1
Run Code Online (Sandbox Code Playgroud)

这与重新启动节点类似,在这种情况下,您必须使用 GKE 或 AWS 其他云提供商中的节点池。

注意:如果您正在运行应用程序的单个副本,则删除节点或重新启动kubelet可能会面临停机

我建议您在重新启动之前封锁排空节点。

  1. kubectl cordon a1(停止新的 Pod 调度)
  2. kubectl drain a1(删除正在运行的容器)
  3. kubectl delete node a1(从集群中删除节点)或systemctl restart kubelet(重新启动节点)

关于错误:

有待清空的待处理节点:a2 错误:无法删除 DaemonSet 管理的 Pod

--ignore-daemonsets当您耗尽 Kubernetes 节点时,您需要使用密钥:

--ignore-daemonsets=false: Ignore DaemonSet-managed pods.
Run Code Online (Sandbox Code Playgroud)

所以命令会是这样的

kubectl drain node <node-name> --ignore-daemonsets
Run Code Online (Sandbox Code Playgroud)