如何在Kubernetes中排出一个节点

时间:2020-03-05 15:31:09  来源:igfitidea点击:

在此Kubernetes教程中,我们将学习使用kubectl disp命令拓节点以准备维护。

它与输入此命令一样简单:

kubectl drain node_name

我们可以使用"kubectl获取节点"命令获取节点详细信息。

但是有更多的是在Kubernetes中排出节点,所以让我们详细看看它。

你为什么需要删除节点?

Kubernetes旨在成为工人节点故障的容错。

可能有不同的原因,工人节点变得无法使用,例如硬件问题,云提供商问题,或者如果工作者和主节点之间存在网络问题,则Kubernetes主控器有效地处理。

但这并不意味着它将永远是这种情况。
而这就是当我们需要耗尽节点并删除所有POD时。

排水是安全地驱逐来自节点的所有Pods的过程。
这样,在Pods上运行的容器优雅地终止。

如何在Kubernetes中正确耗尽节点

让我们从实际演示开始。

步骤1:将节点标记为未划分的(Citon)

要在节点上执行维护,我们应该取消划分,然后漏节点。

首先查看当前运行的节点:

Hyman@theitroad:~# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kmaster-rj    Ready    master   44d   v1.18.8
kworker-rj1   Ready    <none>   44d   v1.18.8
kworker-rj2   Ready    <none>   44d   v1.18.8
Hyman@theitroad:~#

查看在不同节点上运行的Pods:

Hyman@theitroad:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-d2pmd   1/1     Running   1          4d15h     172.16.213.57   kworker-rj2   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
Hyman@theitroad:~#

现在通过运行以下命令将节点标记为未划分的命令:

Hyman@theitroad:~# kubectl cordon kworker-rj2
node/kworker-rj2 cordoned
Hyman@theitroad:~#

再次列出节点:

Hyman@theitroad:~# kubectl get nodes
NAME          STATUS                     ROLES    AGE   VERSION
kmaster-rj    Ready                      master   44d   v1.18.8
kworker-rj1   Ready                      <none>   44d   v1.18.8
kworker-rj2   Ready,SchedulingDisabled   <none>   44d   v1.18.8
Hyman@theitroad:~#

我们可以注意到节点kWorker-RJ2现在标记为SchedulingDisabled。

直到这一步,它不会逐步在该节点上运行的窗格。
验证POD状态:

Hyman@theitroad:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-d2pmd   1/1     Running   1          4d15h     172.16.213.57   kworker-rj2   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
Hyman@theitroad:~#

我们可以看到Pod"My-Dep-557548758D-D2PMD"仍在Kworker-RJ2节点上运行。

第2步:排出节点以准备维护

现在将节点耗尽,以便通过运行以下命令来删除在节点上运行的PODS:

Hyman@theitroad:~# kubectl drain kworker-rj2 --grace-period=300 --ignore-daemonsets=true
node/kworker-rj2 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-fl8dl, kube-system/kube-proxy-95vdf
evicting pod default/my-dep-557548758d-d2pmd
pod/my-dep-557548758d-d2pmd evicted
node/kworker-rj2 evicted
Hyman@theitroad:~#

注意:kubectl漏极无法删除由ReplicationController,Replicaset,作业,Daemonset或者Syounfuls管理的未管理的POD。
我们需要使用--Force覆盖,并且通过这样做将永久删除各个窗格。

现在看看Pods:

Hyman@theitroad:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-dsanh   1/1     Running   0          27s     172.16.213.38   kworker-rj1   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
Hyman@theitroad:~#

在kWorker-RJ2节点上运行的POD从那里传播并启动为Kworder-RJ1节点上的新POD。

节点状态保持相同:

Hyman@theitroad:~# kubectl get nodes
NAME          STATUS                     ROLES    AGE   VERSION
kmaster-rj    Ready                      master   44d   v1.18.8
kworker-rj1   Ready                      <none>   44d   v1.18.8
kworker-rj2   Ready,SchedulingDisabled   <none>   44d   v1.18.8
Hyman@theitroad:~#

步骤3:维护完成后拒绝节点

之后,我们需要运行以下命令,告诉Kubernetes,它可以恢复在节点上调度新窗口。

Hyman@theitroad:~# kubectl uncordon kworker-rj2
node/kworker-rj2 uncordoned

验证节点状态:

Hyman@theitroad:~# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kmaster-rj    Ready    master   44d   v1.18.8
kworker-rj1   Ready    <none>   44d   v1.18.8
kworker-rj2   Ready    <none>   44d   v1.18.8

节点Kworker-RJ2再次准备好处理新的工作负载。