将Percona雷竞技下载官网 XtraDB集群组件绑定到特定Kubernetes/OpenShift节点¶
操作员很好地自动将新的pod分配给节点,这些节点足够在集群中实现均衡分布。在某些情况下,仍然需要确保pod将降落在特定的节点上:例如,为了获得配备SSD的机器的速度优势,或者为了降低在同一可用分区中选择节点的成本。
的适当章节部署/ cr.yaml档案(例如pxc,haproxy,proxysql)包含可用于此目的的键,这取决于对特定情况的最佳选择。
节点选择器¶
nodeSelector包含一个或多个键-值对。如果节点没有使用Pod中的每个键值对进行标记nodeSelector,豆荚将无法降落在上面。
下面的例子将Pod绑定到任何具有自解释的节点disktype: ssd标签:
nodeSelector: disktype: ssd
亲和与反亲和¶
亲和性使Pod符合(或不符合——所谓的“反亲和性”)在已经拥有带有特定标签的Pod的节点上调度。特别是这种方法可以很好地降低成本,确保具有密集数据交换的几个pod将占用相同的可用性区域甚至相同的节点,或者相反,让它们落在不同的节点甚至不同的可用性区域上,以实现高可用性和平衡目的。
雷竞技下载官网Percona Operator for MySQL提供了两种方法:
简单的方法来设置Pods的反亲和性,内置到操作符中,
基于使用标准Kubernetes约束的更先进的方法。
简单的方法-使用Percona Operator的topologyKey雷竞技下载官网¶
雷竞技下载官网Percona Operator for MySQL提供了一个topologyKey选项,该选项可能具有以下值之一:
kubernetes.io /主机名pod将避免驻留在同一个主机中failure-domain.beta.kubernetes.io /区豆荚将避免居住在同一区域failure-domain.beta.kubernetes.io /地区豆荚将避免居住在同一区域没有一个-不应用任何约束。
以下示例强制Percona XtraDB Cluster 雷竞技下载官网Pods避免占用同一节点:
affinity: topologyKey:“kubernetes.io/hostname”
先进的方法-使用标准Kubernetes约束¶
以前的方法可以在没有Kubernetes将Pods分配到特定节点的特殊知识的情况下使用。在某些情况下,可能需要更复杂的调优。在这种情况下先进的选项。部署/ cr.yaml属性的效果topologyKey并且允许使用任何复杂度的标准Kubernetes亲和约束:
affinity: advanced: podAffinity: requiredduringscheduleingignoredduringexecution:—labelSelector: matchExpressions:—key: security operator: In values:—S1 topologyKey: failure-domain.beta.kubernetes。io/zone podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution:—weight: 100 podAffinityTerm: labelSelector: matchExpressions:—key: security operator: In values:—S2 topologyKey: kubernetes. io/zone podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution:—weight: 100io/hostname nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:—matchExpressions:—key: kubernetes. io/hostname nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:—matchExpressions:—key: kubernetes. io/hostnameio/e2 -az-name operator:取值为:—e2 -az1—e2 -az2 preferredduringscheduleingignoredduringexecution:—weight: 1 preference: matchexpression:—key: other-node-label-key operator:取值为:—other-node-label-value
请参阅高级亲和选项的说明在Kubernetes文档中。
的纵容¶
的纵容允许pod能够降落在匹配的节点上污染了。容忍用a表示关键和操作符,即存在或平等的(后一种变体也需要一个价值键值等于)。而且,公差要有规定效果,这可能是不言自明的NoSchedule不那么严格PreferNoSchedule,或NoExecute。最后一个变体的意思是如果a污染与NoExecute分配给节点,那么任何Pod不容忍这污染将从节点中移除,是立即还是之后tolerationSeconds间隔,如下例所示:
公差:-键:"node.alpha.kubernetes. "io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000
的Kubernetes污染和耐受包含有关此主题的更多示例。
优先级类¶
豆荚可能属于其中一些优先级类。这允许调度器区分更重要和更不重要的Pod,以解决某些高优先级Pod无法调度而不驱逐低优先级Pod的情况。这可以在Kubernetes集群中添加一个或多个PriorityClasses,并指定PriorityClassName在部署/ cr.yaml文件:
priorityClassName:高优先级
看到Kubernetes Pods优先级和抢占文档以了解如何在集群中定义和使用优先级类。
豆荚中断预算¶
创建吊舱破坏预算Kubernetes风格是否限制了应用程序的pod数量自愿中断作为集群管理员在更新部署或节点等过程中的操作。通过这种方式,分发预算允许大型应用程序在进行维护和其他管理活动时保持高可用性。
我们建议手动应用Pod中断预算,以避免Kubernetes停止所有数据库Pod的情况。看到Kubernetes官方文件获取详细信息。