Kubernetes下InnoDB Cluster:NodeSelect/Affinity能否避开Master/Longhorn?
在Kubernetes InnoDB Cluster中指定Worker节点调度的方案
可以实现指定Worker节点调度、避开Master或Longhorn节点的需求。Oracle MySQL Operator的InnoDBCluster CRD虽然没有直接暴露nodeSelector或affinity顶级字段,但支持通过**spec.podTemplate**定义Pod级别的调度规则,以此控制MySQL实例Pod的调度范围;如果需要控制Router Pod的调度,同样可以在spec.router.podTemplate中配置相同规则。
具体配置示例
以下是基于你提供的模板修改后的完整配置,添加了调度规则以避开Master节点和Longhorn节点:
apiVersion: mysql.oracle.com/v2 kind: InnoDBCluster metadata: name: mycluster spec: secretName: mypwds tlsUseSelfSigned: true instances: 3 version: 8.3.0 # 配置MySQL实例Pod的调度规则 podTemplate: spec: # 节点选择器:直接匹配目标Worker节点的标签(示例标签:node-type=worker) nodeSelector: node-type: worker # 节点亲和性:强制避开Master和Longhorn节点 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: # 避开带有Master角色标签的节点 - key: node-role.kubernetes.io/master operator: DoesNotExist # 避开Longhorn管理的节点(假设节点标签为node.longhorn.io/managed=true) - key: node.longhorn.io/managed operator: NotIn values: - "true" # 如果目标节点有污点,需要添加容忍规则(可选) tolerations: - key: "worker-only" operator: "Exists" effect: "NoSchedule" router: instances: 1 version: 8.3.0 # 配置Router Pod的调度规则(与MySQL实例一致,按需调整) podTemplate: spec: nodeSelector: node-type: worker affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/master operator: DoesNotExist - key: node.longhorn.io/managed operator: NotIn values: - "true" datadirVolumeClaimTemplate: accessModes: - ReadWriteOnce resources: requests: storage: 4Gi mycnf: | [mysqld] max_connections=150
关键配置说明
nodeSelector:直接匹配带有指定标签的节点,比如示例中的node-type=worker,确保Pod只调度到标记为Worker的节点。nodeAffinity:通过DoesNotExist或NotIn规则,强制排除带有Master角色标签或Longhorn管理标签的节点,避免Pod被调度到这些节点上。tolerations:如果目标Worker节点存在污点(Taint),需要添加对应的容忍规则,否则Pod无法调度到这些节点。- Router Pod调度:如果需要Router也避开指定节点,在
spec.router.podTemplate中添加相同的调度配置即可。
内容的提问来源于stack exchange,提问作者user23316105
相关产品推荐
相关产品推荐

