
# 多虚拟节点配置
#### 功能说明
- 支持在集群中存在1个全局虚拟节点和多个AZ级虚拟节点，调度到全局节点上的Pod在CCI侧会在所有支持的可用区中随机调度，调度到AZ级虚拟节点上的Pod在CCI侧只会被调度到对应的一个AZ中。如果您不想要CCI侧随机调度，您需要手动将全局级别的虚拟节点（即bursting-node节点）设为不可调度状态。
- AZ级虚拟节点具有\`failure-domain.beta.kubernetes.io/zone\`和\`topology.kubernetes.io/zone\`两个Label，值为AZ名，可让Pod根据该节点Label来调度。
- 全局虚拟节点默认存在，不可删除，AZ级虚拟节点可以根据configMap配置动态增减。
- 支持配置节点的可调度CPU、Memory资源（capacity、allocatable）。
- 自插件1.5.29版本起，CCI服务会在AZ故障时将对应的虚拟节点设置为不可调度，租户可以查看虚拟节点的status.conditions信息感知对应AZ是否故障以及故障原因。当CCI将虚拟节点设置为不可调度时，表示租户的存量业务可能受损，新业务不应继续往对应的虚拟节点调度。
 
#### 约束与限制
- 不带"."的键，键的名称即为AZ名（不能配置为"global"，global意为全局节点），其值配置为"true"表示启用该AZ对应的虚拟节点。
- 带"."的键，第一个"."之前为AZ名，"."之后为节点参数，当前支持"cpu"、"memory"，值与k8s resource规则一致（支持k、Mi、Gi等单位）。"cpu"、"memory"为可选配置，不配置则会为较大的默认值（cpu：200k，memory：1600000Gi）。
- 键只能为小写，且需要满足RFC 1123 subdomain格式（同节点名规则），AZ名最长支持47个字符。
- AZ级虚拟节点的数量最多支持20个。
- Bursting检测AZ故障周期默认是5分钟，用户可以通过设置resource-syncer的启动参数'--az-status-sync-period'参数自行决定检测周期，最小为1min。
 
#### 配置样例
在kube-system命名空间下配置如下ConfigMap
```
apiVersion: v1
kind: ConfigMap
metadata:
  name: bursting-node
  namespace: kube-system
data:
  global.cpu: 2k           # global代表全局虚拟节点，全局虚拟节点默认创建，不可删除，可选配置节点的可用cpu、memory资源，不配置则为较大的默认值（cpu：200k，memory：1600000Gi）
  global.memory: 4000Gi
  region-a: "true"      # 如添加了键等于AZ名的配置项，且值为"true"，则会自动创建出对应AZ的虚拟节点
  region-a.cpu: 5k      # cpu、memory为可选配置，不配置则为较大的默认值（cpu：200k，memory：1600000Gi）
  region-a.memory: 8000Gi
  region-b: "true"
```
如上配置则集群中预期存在3个节点
- bursting-node
- bursting-node-region-a
- bursting-node-region-b
 
