两个 pods 强制部署到不同的 ICP worker

Two pods force deploy to different ICP workers

有一个集群 Kubernetes 和 IBM Cloud Private,有两个工人。 我有一个部署创建两个 pods。我如何强制部署将其 pods 安装在两个不同的工作人员上?在这种情况下,如果我失去了一个 icp 工作人员,我总是有其他需要的 pod。

您可以将 pods 创建为 kubernetes DaemonSet。 DaemonSet 确保所有(或部分)节点 运行 一个 Pod 的副本。您可以访问下面 link 查看详细信息。 https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

除了@Santiclause 关于亲和模式下调度策略的回答之外,还有两个 different mods 亲和:

  • requiredDuringSchedulingIgnoredDuringExecution

  • preferredDuringSchedulingIgnoredDuringExecution。

在使用 requiredDuringSchedulingIgnoredDuringExecution affinity scheduler 时,我们需要确保满足所有规则以安排 pod。

如果您没有足够的节点来生成所有 pods,调度程序将永远等待,直到有足够的节点可用。

如果您使用 preferredDuringSchedulingIgnoredDuringExecution affinity scheduler 它将尝试根据节点从以下组合获得的最高分数生成所有副本定义的规则及其 权重.

权重是和规则一起使用的参数,每条规则可以有不同的权重。为了计算节点的分数,我们使用以下逻辑:

对于每个节点,我们遍历配置中定义的规则(即资源请求、requiredDuringScheduling、亲和力表达式等)。如果规则匹配,我们将权重值添加到该节点的分数。一旦处理了所有节点的所有规则,我们将获得所有节点及其最终得分的列​​表。得分最高的节点是最优选的。

总而言之,较高的权重值会增加规则的重要性,并有助于调度程序决定选择哪个节点。

如果您希望 pods 不安排在同一节点上,您要使用的正确概念是 inter-pod anti-affinity。 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