为节点添加标签/污点
UCS支持为节点打上不同的标签,以定义节点的不同属性,通过这些标签,您可以快速地了解各个节点的特点。
污点(Taint)能够使节点排斥某些特定的Pod,从而避免将Pod调度到该节点上,通过添加污点,您可以实现各节点负载的合理分配。
节点标签使用场景
节点标签的主要使用场景有两类。
- 节点分类:通过添加标签对节点进行分类。
- 工作负载与节点的亲和与反亲和:
- 有的工作负载需要的CPU大,有的工作负载需要的内存大,有的工作负载需要IO大,可能会影响其他工作负载正常工作,此时建议给节点添加不同标签。在部署工作负载的时候,就可以选择相应标签的节点亲和部署,保证系统正常工作;反之,可以使用节点的反亲和部署。
- 一个系统可以分为多个模块,每个模块由多个微服务组成,为保证后期运维的高效,可以将节点打上对应模块的标签,让各模块的工作负载部署到各自的节点上,互不干扰、利于维护。
节点固有标签
创建节点后,UCS会为节点添加固有标签,这些标签是无法编辑和删除的。节点固有标签的含义请参见表1。
键 |
值 |
---|---|
failure-domain.beta.kubernetes.io/region |
表示节点当前所在区域 |
failure-domain.beta.kubernetes.io/zone |
表示节点所在区域的可用区 |
beta.kubernetes.io/arch |
表示节点处理器架构 例如:amd64,表示AMD64位的处理器 |
beta.kubernetes.io/os |
表示节点的操作系统 例如:linux,表示Linux操作系统 |
kubernetes.io/availablezone |
表示节点所在区域的可用区 |
kubernetes.io/hostname |
表示节点主机名称 |
os.architecture |
表示节点处理器架构 例如:amd64,表示AMD64位的处理器 |
os.name |
表示节点的操作系统名称 例如:EulerOS_2.0_SP2,表示欧拉2.2的版本 |
os.version |
表示节点内核版本 |
污点(Taints)说明
- NoSchedule:不能容忍此污点的Pod不会被调度到节点上,但是现有Pod不会从节点中逐出。
- NoExecute:表示不能容忍此污点的Pod不会被调度到节点上,同时会将节点上已存在的Pod驱逐。
容忍度(Toleration)说明
容忍度应用于Pod上,允许(但并不要求)Pod调度到带有与之匹配的污点的节点上。
污点和容忍度相互配合,可以用来避免Pod被分配到不合适的节点上。每个节点上都可以拥有一个或多个污点,而对这些污点没有设置容忍度的Pod,将不会被调度到该节点上。
在Pod中设置容忍度的示例如下:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule"
上面示例中表示节点上存在键名为“key1”,键值为“value1”,且效果为“NoSchedule”的污点时,该Pod能够调度到节点上。
容忍度还可以按如下方式进行设置,表示当节点上存在键名为“key1”,且效果为“NoSchedule”的污点时,该Pod也可以调度到节点上。
tolerations: - key: "key1" operator: "Exists" effect: "NoSchedule"
管理节点标签/污点
- 登录集群控制台。
- 在左侧导航栏中单击“节点管理”,在节点列表中选择节点,并单击“标签与污点管理”。
- 单击按钮,设置节点标签/污点。如需执行多项操作,可多次添加,最多支持10条操作。
图1 添加标签/污点
- 选择“添加”或“删除”操作。
- 选择操作对象为“K8S标签”或“污点(Taints)”。
- 填写需要增加标签/污点的“键”和“值”。
- 如选择操作对象为“污点(Taints)”,需选择污点效果,关于污点效果说明请参见污点(Taints)说明。
- 单击“确定”,对所选节点执行标签/污点操作。