要建设网站,徐州网站设计师,wordpress concise,网站建设遇到哪些问题污点和容忍
一、概念
k8s 集群中可能管理着非常庞大的服务器#xff0c;这些服务器可能是各种各样不同类型的#xff0c;比如机房、地理位置、配置等#xff0c;有些是计算型节点#xff0c;有些是存储型节点#xff0c;此时我们希望能更好的将 pod 调度到与之需求更匹配…污点和容忍
一、概念
k8s 集群中可能管理着非常庞大的服务器这些服务器可能是各种各样不同类型的比如机房、地理位置、配置等有些是计算型节点有些是存储型节点此时我们希望能更好的将 pod 调度到与之需求更匹配的节点上。
此时就需要用到污点Taint和容忍Toleration这些配置都是 key: value 类型的。
K8S的污点和容忍是其中一种高级调度功能作用是让 Kubernetes 集群中的节点有选择地接受或拒绝来自不同类型 Pod 的调度请求可以帮助运维人员更好地管理、调度和控制应用程序的部署。
二、污点
在节点上设置污点当我们在一个节点上打上污点以后k8s 会认为尽量不要将 pod 调度到该节点上。
配置污点主要分为两类
NoSchedule
设置了 NoSchedule 污点的节点将不会被调度器分配新的 Pod但已经运行的 Pod 不受影响。这个污点用于标记节点暂时无法接受新的 Pod 的情况例如节点维护或故障。
NoExecute
设置了 NoExecute 污点的节点将不会被调度器分配新的 Pod并且已经运行在该节点上的 Pod如果它们不容忍该污点则会被驱逐出该节点。这个污点用于标记节点上的某些服务或资源已经不再可用而正在运行的 Pod 需要尽快迁移到其他节点。
PreferNoSchedule
“软性”的 NoSchedule尽量避免往该节点上调度但不能保证完全避免
2.1、使用到的命令
# 为节点打上污点 这里的key和value是自定义的标签主要作用是为了解释为什么打污点
kubectl taint node k8s-master keyvalue:NoExecute# 移除污点就是打污点的命令后面加一个-
kubectl taint node k8s-master keyvalue:NoSchedule-# 查看污点
kubectl describe no k8s-master
------------------- 看Taints数据
Taints: node-role.kubernetes.io/master:NoSchedule
2.2、示例
在K8S中master节点默认有一个NoSchedule类型的污点现在我是想通过配置污点的方式将一个运行在节点1的pod转移到 master节点上。 1、去除master污点 kubectl taint node node-role.kubernetes.io/master:NoSchedule-2、给节点1添加一个NoExecute 类型的污点 kubectl taint node k8s-node1 ceshit:NoExecute做完这两步之后就会发现pod转移到master节点上运行了
三、容忍
容忍是标注在 pod 上的当 pod 被调度时如果没有配置容忍则该 pod 不会被调度到有污点的节点上只有该 pod 上标注了满足某个节点的所有污点则可能会被调度到这些节点
apiVersion: v1
kind: Pod
metadata:name: nginxlabels:env: test
spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresent#容忍配置 tolerations:- key: testoperator: Equalvalue: teffect: NoSchedulekey
表示要匹配的污点的键Key就是标签的key。必须与节点上设置的污点键一致。
operator
表示匹配操作符可以取值为 “Equal”、“Exists” 或 “DoesNotExist”分别表示完全匹配、存在匹配和不存在匹配。如果为Exists则不需要value
value
标签的值
effect
表示匹配效果Effect可以取值为 “NoSchedule”、“PreferNoSchedule” 或 “NoExecute”分别表示不可调度、尽量避免调度和驱逐。
这四个参数中前三个主要是为了匹配标签的key-valueeffect匹配污点类型 存在两种特殊情况 如果一个容忍度的 key 为空且 operator 为 Exists 表示这个容忍度与任意的 key、value 和 effect 都匹配即这个容忍度能容忍任何污点。 如果 effect 为空则可以与所有键名 key1 的效果相匹配。