在differents节点上运行两个kubernetes pod

时间:2019-07-04 13:11:21

标签: docker kubernetes high-availability

是否有一种方法可以告诉Kubernetes永远不要在同一节点上运行两个Pod,例如我有两个Pod副本,我希望它们始终分布在zone1/zone2上,并且永远不要在同一区域中。< / p>

apiVersion: app/v1
kind: Deployment
metadata:
  name: testApp
  labels:
    app: testApp-front
  namespace: 
spec:
  replicas: 2
  selector:
    matchLabels:
      app: testApp-front
  template:
    metadata:
      labels:
        app: testApp-front
    spec:      
      nodeSelector:
        failure-domain.beta.kubernetes.io/zone: zone1

4 个答案:

答案 0 :(得分:1)

似乎可以使用Interpod Affinity完成:

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

您可以看到完整的example here

答案 1 :(得分:1)

我认为您需要“吊舱抗亲和力”概念。该群集位于一个群集内,以确保pod不在一个工作节点上。 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity

答案 2 :(得分:1)

非常简单,您可以使用守护进程集来运行不同节点中的每个Pod,或者就像其他人所说的那样,您可以使用Pod Anti-Affinity

答案 3 :(得分:0)

k8s调度程序是一款智能软件。

  1. Kubernetes调度程序将首先根据您的亲和力/反亲和力/资源限制/等来确定可以部署Pod的所有可能节点。

  2. 然后,调度程序将找到可以部署Pod的最佳节点。 如果可能的话,调度程序将自动将Pod调度到单独的可用区域和单独的节点上。

P.S。 如果您从不希望将Pod的2个副本放在同一节点上,请定义一个反关联性规则。