在 Kubernetes (简称 K8S) 中,节点是集群中的一个工作节点,负责运行容器并提供资源。有时候,我们需要停掉某个节点上的 Pod,可能是为了维护节点或者排查问题。本文将介绍如何通过适当的步骤,停掉节点上的 Pod。
整体流程:
1. 标记节点不可调度:将节点标记为不可调度,以确保没有新的 Pod 被调度到该节点上。
2. 撤掉节点上的运行着的 Pod:将节点上的所有 Pod 标记为删除状态,并等待它们终止。
3. 从集群中删除节点:将节点从集群中移除。
下面是一步一步的具体实现过程:
步骤 1:标记节点不可调度
要停掉一个节点上的 Pod,最好先将该节点标记为不可调度。这样,Kubernetes 将不会再将新的 Pod 调度到该节点上。
首先,使用以下命令获取节点列表:
```
kubectl get nodes
```
选择要停掉 Pod 的节点,并使用以下命令将其标记为不可调度:
```
kubectl cordon
```
这里的 `
步骤 2:撤掉节点上的运行着的 Pod
在将节点上的 Pod 终止之前,我们需要查找到该节点上的运行着的 Pod。可以使用以下命令获取节点上的 Pod 列表:
```
kubectl get pods --field-selector=spec.nodeName=
```
这里的 `
可以看到 Pod 的名称、状态、所在的命名空间等信息。
接下来,使用以下命令将节点上的所有 Pod 标记为删除状态,并等待它们终止:
```
kubectl delete pods --field-selector=spec.nodeName=
```
这里的 `
步骤 3:从集群中删除节点
终止节点上的 Pod 后,我们可以将该节点从集群中移除。
首先,使用以下命令查看节点的详细信息:
```
kubectl describe node
```
这里的 `
在输出结果中找到 `Taints` 这个段落。如果该节点已被标记为 `NoSchedule`,请先使用以下命令删除 `NoSchedule` 的标记:
```
kubectl taint nodes
```
这里的 `
最后,使用以下命令将节点从集群中删除:
```
kubectl delete node
```
这里的 `
整个过程的代码示例:
```bash
# 获取所有节点
kubectl get nodes
# 标记节点不可调度
kubectl cordon
# 获取该节点上的运行着的 Pod
kubectl get pods --field-selector=spec.nodeName=
# 删除节点上的所有 Pod
kubectl delete pods --field-selector=spec.nodeName=
# 查看节点详细信息,删除 NoSchedule 的标记(如果有)
kubectl describe node
kubectl taint nodes
# 删除节点
kubectl delete node
```
以上就是停掉 Kubernetes 集群中某个节点上的 Pod 的完整过程。通过标记节点不可调度、终止节点上的 Pod 并将节点从集群中删除,我们可以方便地停掉节点上的 Pod。希望本文对于刚入行的小白能够有所帮助。