Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点,本文介绍污点taint 与容忍度tolerations,可以影响pod的调度。,使用污点taint 与容忍度tolerations的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》,节点亲和性 是 Pod 的一种属性,它使 Pod 被吸引到一类特定的节点 (这可能出于一种偏好,也可能是硬性要求)。 污点(Taint) 则相反——它使节点能够排斥一类特定的 Pod。,给节点增加一个污点的语法如下:给节点 node1 增加一个污点,它的键名是 key1,键值是 value1,效果是 NoSchedule。 这表示只有拥有和这个污点相匹配的容忍度的 Pod 才能够被分配到 node1 这个节点。,移除污点语法如下:,节点的描述信息里有一个Taints字段,Taints字段表示节点有没有污点,查看节点是否有污点,Taints: node-role.kubernetes.io/master:NoSchedule表示k8s集群的master节点有污点,这是默认就存在的污点,这也是master节点为什么不能运行应用pod的原因。,创建pod,nodeSelector:kubernetes.io/hostname: k8scloude1表示pod运行在标签为kubernetes.io/hostname=k8scloude1的节点上。,关于pod的调度详细内容,请查看博客《pod(八):pod的调度——将 Pod 指派给节点》,标签为kubernetes.io/hostname=k8scloude1的节点为k8scloude1节点,创建pod,因为k8scloude1上有污点,pod1不能运行在k8scloude1上,所以pod1状态为Pending,容忍度(Toleration) 是应用于 Pod 上的。容忍度允许调度器调度带有对应污点的 Pod。 容忍度允许调度但并不保证调度:作为其功能的一部分, 调度器也会评估其他参数。,污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。,只有拥有和这个污点相匹配的容忍度的 Pod 才能够被分配到 node节点。,查看k8scloude1节点的污点,你可以在 Pod 规约中为 Pod 设置容忍度,创建pod,tolerations参数表示可以容忍污点:node-role.kubernetes.io/master:NoSchedule ,nodeSelector:kubernetes.io/hostname: k8scloude1表示pod运行在标签为kubernetes.io/hostname=k8scloude1的节点上。,查看pod,即使k8scloude1节点有污点,pod还是正常运行。,taint污点和cordon,drain的区别:某个节点上有污点,可以设置tolerations容忍度,让pod运行在该节点,某个节点被cordon,drain,则该节点不能被分配出去运行pod。,关于cordon,drain的详细信息,请查看博客《cordon节点,drain驱逐节点,delete 节点》,注意,tolerations容忍度有两种写法,任选一种即可:,给k8scloude2节点打标签,对k8scloude2设置污点,创建pod,tolerations参数表示容忍污点wudian=true:NoSchedule,nodeSelector:taint: T参数表示pod运行在标签为nodeSelector=taint: T的节点。,查看pod,k8scloude2节点就算有污点也能运行pod,污点容忍的另一种写法:operator: "Exists",没有value值。,查看pod,k8scloude2节点就算有污点也能运行pod,给k8scloude2节点再添加一个污点,创建pod,tolerations参数表示容忍2个污点:wudian=true:NoSchedule和zang=shide:NoSchedule,nodeSelector:taint: T参数表示pod运行在标签为nodeSelector=taint: T的节点。,查看pod,k8scloude2节点就算有2个污点也能运行pod,创建pod,tolerations参数表示容忍污点:wudian=true:NoSchedule,nodeSelector:taint: T参数表示pod运行在标签为nodeSelector=taint: T的节点。,查看pod,一个节点有两个污点值,但是yaml文件只容忍一个,所以pod创建不成功。,取消k8scloude2污点,Tips:如果自身机器有限,只能有一台机器,则可以把master节点的污点taint取消,就可以在master上运行pod了。,以上就是pod污点taint 与容忍度tolerations详解的详细内容,更多关于污点taint容忍度tolerations 的资料请关注其它相关文章!