跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > 【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

时间:2024-04-17 19:10:22 来源:网络cs 作者:付梓 栏目:卖家故事 阅读:

标签: 容忍  污点  理解  深入 
阅读本书更多章节>>>>

【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

1、污点(Taints)2、容忍度(Tolerations)3、示例演示-测试污点的具体应用场景3.1 给节点打污点,创建pod3.2 删除节点污点


💖The Begin💖点点关注,收藏不迷路💖

在 Kubernetes(k8s)中,污点(Taints)与容忍度(Tolerations)是两个重要的概念,它们用于控制 Pod 对节点的调度行为。污点允许节点标记自身,以指示它们不接受特定类型的 Pod,而容忍度允许 Pod 标记自身,以指示它们可以容忍特定类型的节点。

本文将深入探讨污点与容忍度的概念、用法以及如何在 Kubernetes 集群中使用它们。

1、污点(Taints)

污点是 Kubernetes 中节点的一个属性,它用于标记节点不接受哪些类型的 Pod。节点上的污点会阻止具有相同键值对的 Pod 被调度到该节点上。用在节点上,定义的是污点。

组成结构:key=value:Effect

1、查看节点(Node)资源对象的 spec.taints 字段的详细说明kubectl explain node.spec.taints

污点包含以下几个关键属性:

1、Key(键): 污点的键,用于唯一标识污点。
2、Value(值): 污点的值,与键一起构成键值对,用于具体指定污点的类型。
3、Effect(效果): 污点的效果,表示当 Pod 与节点的污点匹配时所采取的行动。常见的效果包括:

NoSchedule:阻止调度新的 Pod 到节点上。PreferNoSchedule:尽量避免调度新的 Pod 到节点上,但不是强制性的。NoExecute:将节点上已有的 Pod 驱逐出去,直到 Pod 满足对应的容忍度规则。

4、timeAdded: 表示污点(Taint)被添加的时间,这个字段只有在 NoExecute 类型的污点中才会被写入。这意味着它仅在节点上已经存在的 Pod 需要被驱逐时才会记录。

污点的效果详解:

在这里插入图片描述

在这里插入图片描述

# 添加污点到节点kubectl taint nodes <node-name> <key>=<value>:<effect># 删除节点污点kubectl taint nodes <node-name> key-key- 表示要删除的污点的键。在键后面加上 -,以表示删除该键对应的污点。# 查看节点的污点信息kubectl describe nodes <node-name>kubectl describe nodes k8s-master

在这里插入图片描述

例如:查看 kube-apiserver-k8s-master Pod 的详细信息

kubectl describe pod kube-apiserver-k8s-master

在这里插入图片描述

在这里插入图片描述

2、容忍度(Tolerations)

容忍度是 Pod 的一个属性,它允许 Pod 在调度时容忍具有指定污点的节点。通过为 Pod 添加容忍度,可以让 Pod 在特定类型的节点上运行。
用在Pod上,定义的是容忍度,能容忍哪些污点。

# 在 Pod 的规范中添加容忍度tolerations:- key: <key>  operator: <operator>  value: <value>  effect: <effect>  tolerationSeconds: <seconds>例如:apiVersion: v1  # 指定 Kubernetes API 版本为 v1kind: Pod  # 定义资源类型为 Podmetadata:  # 元数据部分,包含 Pod 的名称等信息  name: special-pod  # 指定 Pod 的名称为 special-podspec:  # Pod 的规格部分,包含容器和容忍度等信息  containers:  # 容器部分,定义 Pod 中的容器  - name: special-container  # 容器的名称为 special-container    image: nginx  # 容器使用的镜像为 nginx  tolerations:  # 容忍度部分,定义 Pod 的容忍度  - key: special-node  # 定义容忍度的键为 special-node    operator: Exists  # 定义容忍度的操作符为 Exists,表示只要存在该键即可容忍    effect: NoSchedule  # 定义容忍度的效果为 NoSchedule,表示节点上有特定污点时不会调度该 Pod

3、示例演示-测试污点的具体应用场景

3.1 给节点打污点,创建pod

1、不定义容忍度

1、使用 kubectl taint 命令来给节点打上污点。以下是具体的命令:[root@k8s-master ~]# kubectl taint nodes k8s-node01 special-node=true:NoSchedulenode/k8s-node01 tainted[root@k8s-master ~]### 为 k8s-node01 的节点打上一个名为 special-node 的污点,值为 true,效果为 NoSchedule,## 即表示这个节点上的 Pod 将不会被调度,除非它们定义了对应的容忍度。2、创建pod,不定义容忍度,yaml清单:apiVersion: v1kind: Podmetadata:  name: nginx-podspec:  containers:  - name: nginx-container    image: nginx## 定义了一个简单的 Pod,其中包含一个名为 nginx-container 的容器,使用了 Nginx 的镜像。## 由于没有定义任何容忍度,因此这个 Pod 将会尝试在集群中的任何节点上被调度。3、更新资源文件kubectl apply -f nginx-pod.yaml4、查看podkubectl get pods -o wide

在这里插入图片描述

2、定义污点效果-设置排斥等级

1、删除前面创建的污点kubectl taint nodes k8s-node01 special-node-2、定义排斥等级,效果为 NoExecutekubectl taint nodes k8s-node01 special-node=true:NoExecute这意味着该节点上的 Pod 如果不满足容忍度条件,将会被驱逐(Evicted)。

3、定义容忍度

创建一个名为 nginx-pod 的 Pod,并定义容忍度以允许在带有 special-node=true:NoExecute 污点的节点上调度:

apiVersion: v1kind: Podmetadata:  name: nginx-podspec:  containers:  - name: nginx-container    image: nginxtolerations:- key: special-node  # 污点的键值  operator: Equal    # 操作符,这里使用等于  value: "true"      # 污点的值为 true  effect: NoExecute  # 污点的效果为 NoExecute,即会驱逐不满足容忍度的 Pod# 在spec 部分的 tolerations 字段中定义了容忍度,指定了对于带有 special-node=true:NoExecute 污点的节点的容忍度。

3.2 删除节点污点

要删除节点上的污点,使用 kubectl taint 命令,并指定 - 作为值。

# 删除 k8s-node01 的节点上名为 special-node 的污点。kubectl taint nodes k8s-node01 special-node-

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖
阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-17/159862.html,文章来源:网络cs,作者:付梓,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论