更多副本中的Kubernetes Pod-反相似性规则

时间:2019-07-09 08:01:40

标签: kubernetes kubernetes-pod

我对K8S吊舱反亲和力规则有疑问。我有什么和我需要什么。

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

我发现,可以通过“反亲和力”规则来做到这一点,但是在这种情况下我找不到任何示例。你有例子吗?

3 个答案:

答案 0 :(得分:2)

从文档中 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

您需要在部署中设置选择器,并在“反亲和力”部分中指出要匹配的值并使反亲和力为true:

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将应用-亲和力。

答案 1 :(得分:1)

查看DaemonSet。它将在每个节点上部署一个副本。 如果一个DC崩溃了,那么吊舱将不会重新部署到其他DC。

答案 2 :(得分:0)

谢谢你们,提供了很好的例子。正是我所需要的!