在不同节点上运行两个Kubernetes Pod

3

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

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

你能创建两个 Deployment 对象吗?每个对象使用不同的节点选择器。 - Jose Armesto
确实可以这样做,但我更喜欢让Kubernetes动态管理Pod位置的调度。 - Dady
4个回答

1

1
非常简单,您可以使用守护进程集来在不同的节点上运行每个Pod,或者像其他人所说的那样,您可以使用Pod反亲和性。

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

您可以在此处看到完整的示例

0

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

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

  2. 然后,调度器将找到最适合的节点来部署Pod。 如果可能的话,调度器将自动安排Pod在不同的可用区和不同的节点上。

P.S. 如果您永远不希望2个Pod副本位于同一节点,请定义反亲和规则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接