内置污点(一)

2023-05-03 11:24:46 浏览数 (1)

Kubernetes中的节点可以带有内置污点(taint),这些污点是在节点创建时自动设置的,并且不能被删除或修改。内置污点可以用来标记那些不希望运行Pod的节点,或者只允许某些Pod在该节点上运行。

Kubernetes内置污点的介绍

Kubernetes中有三个内置污点:

  • node.kubernetes.io/not-ready:表示节点当前不可用,可能由于网络故障、硬件故障等原因导致;
  • node.kubernetes.io/unreachable:表示节点当前无法访问,可能由于网络分区、节点故障等原因导致;
  • node.kubernetes.io/out-of-disk:表示节点上的磁盘空间已满,无法再运行新的Pod。

这些内置污点是集群级别的,即对所有节点都有效。当节点带有这些污点时,调度器会自动将不可调度的Pod从这些节点上删除,直到节点变得可用或者新的节点被加入集群。由于这些污点是内置的,所以它们不能被删除或修改。

使用内置污点的示例

我们来看几个使用内置污点的示例,以便更好地理解它们的用途。

标记不可用节点

我们可以使用node.kubernetes.io/not-ready污点来标记一个不可用的节点,以便避免将新的Pod调度到这个节点上。

首先,我们需要找到要标记的节点的名称。可以使用kubectl get nodes命令来查看节点列表:

代码语言:javascript复制
$ kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
node1    Ready    <none>   20h   v1.21.0
node2    Ready    <none>   20h   v1.21.0
node3    Ready    <none>   20h   v1.21.0

在这个示例中,我们将标记node3节点为不可用。可以使用kubectl taint nodes命令来添加污点:

代码语言:javascript复制
$ kubectl taint nodes node3 node.kubernetes.io/not-ready=:NoSchedule

这个命令会在node3节点上添加一个node.kubernetes.io/not-ready的污点,并将影响效果(effect)设置为NoSchedule,表示新的Pod将不能调度到这个节点上。

我们可以使用kubectl describe node命令来查看节点的详细信息,以确认污点是否被正确添加:

代码语言:javascript复制
$ kubectl describe node node3
...
Taints:             node.kubernetes.io/not-ready=:NoSchedule

现在,如果我们尝试在集群中创建新的Pod,调度器将不会将它们调度到node3节点上。当我们修复了这个节点的问题后,可以使用kubectl taint命令来删除这个污点:

代码语言:javascript复制
$ kubectl taint nodes node3 node.kubernetes.io/not-ready-

0 人点赞