有一个集群 Kubernetes 和 IBM Cloud Private,有两个工作人员。我有一个创建两个 pod 的部署。如何强制部署将其 pod 安装在两个不同的工作人员上?在这种情况下,如果我失去了一名 icp 工人,我总是有其他需要 pod。
3 回答
如果您希望 pod 不在同一节点上调度,那么您将要使用的正确概念是跨 pod 反亲和性。https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity-beta-feature
观察:
spec:
replicas: 2
selector:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- my-app
topologyKey: kubernetes.io/hostname
除了@Santiclause 关于亲和模式下调度策略的回答外,还有两种不同的亲和模式:
requiredDuringSchedulingIgnoredDuringExecution
首选DuringSchedulingIgnoredDuringExecution。
在使用requiredDuringSchedulingIgnoredDuringExecution 亲和性调度程序时,我们需要确保满足所有规则才能调度 pod。
如果您没有足够的节点来生成所有 pod,调度程序将永远等待,直到有足够的节点可用。
如果您使用preferredDuringSchedulingIgnoredDuringExecution亲和调度程序,它将尝试根据节点从定义的规则及其权重的组合中获得的最高分数来生成所有副本。
权重是与规则一起使用的参数,每个规则可以有不同的权重。为了计算节点的分数,我们使用以下逻辑:
对于每个节点,我们遍历配置中定义的规则(即资源请求、requiredDuringScheduling、亲和表达式等)。如果规则匹配,我们将权重值添加到该节点的分数。处理完所有节点的所有规则后,我们将获得所有节点的列表及其最终分数。得分最高的节点是最优选的。
总而言之,较高的权重值会增加规则的重要性,并有助于调度程序决定选择哪个节点。
您可以将 pod 创建为 kubernetes DaemonSet。DaemonSet 确保所有(或部分)节点运行 Pod 的副本。您可以访问以下链接以查看详细信息。 https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/