
# 为节点添加标签/污点
UCS支持为节点打上不同的标签，以定义节点的不同属性，通过这些标签，您可以快速地了解各个节点的特点。
污点（Taint）能够使节点排斥某些特定的Pod，从而避免将Pod调度到该节点上，通过添加污点，您可以实现各节点负载的合理分配。
#### 节点标签使用场景
节点标签的主要使用场景有两类。
- 节点分类：通过添加标签对节点进行分类。
- 工作负载与节点的亲和与反亲和：
  - 有的工作负载需要的CPU大，有的工作负载需要的内存大，有的工作负载需要IO大，可能会影响其他工作负载正常工作，此时建议给节点添加不同标签。在部署工作负载的时候，就可以选择相应标签的节点亲和部署，保证系统正常工作；反之，可以使用节点的反亲和部署。
  
  - 一个系统可以分为多个模块，每个模块由多个微服务组成，为保证后期运维的高效，可以将节点打上对应模块的标签，让各模块的工作负载部署到各自的节点上，互不干扰、利于维护。
   
 
#### 节点固有标签
创建节点后，UCS会为节点添加固有标签，这些标签是无法编辑和删除的。节点固有标签的含义请参见[表1]。
 表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）说明
污点格式为"Key=Value:Effect"，Key和Value作为污点的标签，Value可以为空，Effect用于描述污点的效果。当前Effect支持如下效果。
- 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"
```
#### 管理节点标签/污点
1. 登录[UCS控制台](https://console.huaweicloud.com/ucs/?#/aether/dashboard)，进入集群页面。
2. 在左侧导航栏中单击"节点管理"，在节点列表中选择节点，并单击"标签与污点管理"。
3. 单击![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000001377241982.png)按钮，设置节点标签/污点。如需执行多项操作，可多次添加，最多支持10条操作。
   
   图1添加标签/污点   
   ![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000001928888965.png "点击放大")
   - 选择"添加"或"删除"操作。
   
   - 选择操作对象为"K8S标签"或"污点（Taints）"。
   
   - 填写需要增加标签/污点的"键"和"值"。
   
   - 如选择操作对象为"污点（Taints）"，需选择污点效果，关于污点效果说明请参见[污点（Taints）说明]。
   
   
   
   
4. 单击"确定"，对所选节点执行标签/污点操作。
