Node
add label to Node
1 | kubectl label nodes <node-name> <label-key>=<label-value> |
Affinity
亲和性/反亲和性是在Node上设置如何被Scheduler选择的规则一种方式。
- 必需的规则(Required)
只有满足必需的规则的Pod才会被调度到特定的Node上。如果没有Node匹配条件(加上所有其他所有正常的条件,例如为Pod请求提供足够的可用资源),
否则Pod不会被调度。必需满足的规则在nodeAffinity的requiredDuringSchedulingIgnoredDuringExecution字段中指定。
例如,要求在多可用区域(Multiple Zones)的us-central1-a(GCE)区域中的节点上进行调度
1 | affinity: |
注意:如果修改为requiredDuringSchedulingRequiredDuringExecution,意味着一旦不满足节点亲和性规则,将从Node上驱逐不再匹配规则的Pod。
- 首选的规则(Preferred)
首选规则意味着如果节点与规则匹配,则将优先选择它们,并且仅当没有优选节点可用时才选择非优选节点。可以选择使用首选规则,而不是通过必需规则强制将
Pod部署到GCE的us-central1-a区域中的节点上。
使用首选规则,则需指定preferredDuringSchedulingIgnoredDuringExecution:
1 | affinity: |
AntiAffinity
Node的反亲和性能够使用负操作符(NotIn, DoesNotExist等)来表示。
例如,禁止Pod被调度到us-central1-a的区域中
1 | affinity: |
Taints and Tolerations
此功能允许您标记一个Node(“受污染”,“有污点”),以便没有Pod可以被调度到此节点上,除非Pod明确地“容忍”污点。
标记的是Node而不是Pod(如节点的亲和性和反亲和性),对于集群中大多数Pod应该避免调度到特定的节点上的功能特别有用。
例如,您可能希望主节点(Master)标记为仅可调度Kubernetes系统组件,或将一组节点专用于特定的用户组,或者让常规的
Pod远离具有特殊硬件的Node,以便为有特殊硬件需求的Pod留出空间。
- 设置Node的Taints
1 | kubectl taint nodes node1 key=value:NoSchedule |
创建一个污点并标记到Node,那些没有设置容忍的Pod,不能调度到该Node上。其他污点的选项是PerferredNoSchedule,这是NoSchedule首选版本。
NoExecute,这个选项意味着在当Node被标记有污点时,该Node上运行的任何没有设置容忍的Pod都将被驱逐。容忍将被添加到PodSpec中,看起来像这样:
1 | tolerations: |
除了将污点和容忍(Taints and Tolerations)特性在Kubernetes 1.6中移至Beta版外,我们还引入了一个使用污点和容忍的Alpha的特性:
允许用户自定义一个Pod被绑定到Node上后遇到了诸如网络分区的问题时的行为(可能Pod希望长时间允许在这个Node上,或者网络分区会很快恢复),
而不是现在默认的等待五分钟超时。
Pod
Affinity
- 部署到指定label的node
1 | apiVersion: v1 |
pod只会调度到具有disktype=ssd的node上面