节点标签亲和部署使用指导
背景信息
在使用BKE安装部署工具进行集群搭建时,用户可以实现:
- 节点标签能力:为集群中的节点添加自定义标签,用于描述节点特性(如硬件规格、业务用途等),支持多标签配置。
- Addon亲和部署:在部署Addon组件时,根据节点标签进行亲和调度,确保特定Addon只部署在符合条件的节点上。
前提条件
- 已完成引导节点初始化,引导集群运行正常。
- 已准备好集群配置文件。
说明:
下文中bke-cluster.yaml是引导节点上用于配置集群安装信息的文件,位于
/bke/cluster/目录下,如/bke/cluster/1master.yaml等。该文件用于定义集群的节点信息、Addon配置等内容。
使用限制
节点标签的key和value需符合Kubernetes标签命名规范。
操作步骤
为节点添加标签。
在
bke-cluster.yaml配置文件的nodes部分,为目标节点添加labels字段:yamlspec: clusterConfig: nodes: - hostname: master-1 ip: 192.168.100.226 password: '******' port: "22" role: - master/node - etcd username: root labels: - key: "machine-48" value: "true" - key: "gpu" value: "nvidia"说明:
- 每个节点可配置多个标签。
- 标签将在集群创建时自动应用到对应节点。
在Addon模板中添加nodeSelector支持。
在
bke-manifests/kubernetes/<addon-name>/<version>/目录下的Addon部署YAML文件中,为Pod规格添加nodeSelector模板变量:yaml# 示例:bke-manifests/redis/latest/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: redis spec: template: spec: nodeSelector: {{ .nodeSelector }} # 添加此行以支持节点选择 containers: - name: redis image: {{ .imageRepo }}/redis:latest说明:
{{ .nodeSelector }}会在部署时被替换为bke-cluster.yaml中配置的JSON对象。- 仅需对需要亲和调度的Addon模板进行修改。
配置Addon节点亲和参数。
在
bke-cluster.yaml的addons部分,为需要亲和调度的Addon添加nodeSelector参数:yamlspec: clusterConfig: addons: - name: redis param: nodeSelector: '{"machine-48":"true"}' version: latest说明:
nodeSelector的值为JSON格式字符串,需使用单引号包裹。- 确保目标节点已配置对应的标签,否则Addon将无法调度。
创建集群。
执行集群创建命令:
bashbke cluster create -f /path/to/bke-cluster.yaml验证亲和部署。
集群创建完成后,验证Addon是否部署在指定节点:
bashkubectl get pod -o wide -A | grep redis确认Pod所在节点是否包含配置的标签:
bashkubectl get node <node-name> --show-labels
配置示例
以下为包含节点标签的完整配置片段:
yaml
spec:
clusterConfig:
addons:
- name: kubeproxy
param:
clusterNetworkMode: calico
version: v1.33.1
- name: calico
param:
calicoMode: vxlan
version: v3.27.3
- name: coredns
version: v1.10.1
- name: redis
param:
nodeSelector: '{"machine-48":"true"}'
version: latest
nodes:
- hostname: master-1
ip: 192.168.100.***
password: '******'
port: "22"
role:
- master/node
- etcd
username: root
labels:
- key: "machine-48"
value: "true"