更多副本中的 Kubernetes pod - 反亲和规则

Kubernetes pod in more replicas - anti affinity rule

我有一个关于 K8S pod 反亲和规则的问题。我有什么,我需要什么。

我有跨2个数据中心的K8S集群。例如,每个 DC 中有 5 个节点。我有一个 Pod 部署,它在所有 10 个节点上运行 10 个副本。每个节点是 1 个 Pod 副本。 如果一个 DC 崩溃,我想设置规则,不要将 5 个副本从崩溃的 DC 迁移到运行状况良好的 DC。

我发现,可以通过 "Anti-affinity" 规则来完成,但我找不到这种情况的任何示例。你有例子吗?

看看 DaemonSet。它将在每个节点上部署一个副本。 如果一个 DC 崩溃,则 pods 将不会重新部署到另一个 DC。

来自文档 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

您需要在部署中设置一个选择器并在 anti-affinity 部分指明要匹配的值是什么并使 anti-affinity 为真:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 3
  template:
    metadata:
      labels:
        app: store
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

你可以看到它正在使用一个标签选择器来尝试找到键 app 和值 store 这意味着如果一个节点已经有一个带有该标签和值的 pod,kubernetes 将申请 anti-affinity.