繁体   English   中英

在不同节点上运行两个kubernetes pod

[英]Running two kubernetes pods on differents nodes

有没有办法告诉Kubernetes永远不会在同一个节点上运行两个pod,例如我有两个pods副本,我希望它们总是分布在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

似乎可以通过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

你可以在这里看到完整的例子

我认为你需要pod反亲和力的概念。 这是在一个集群内,以确保pod不驻留在一个工作节点上。 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity

非常简单,你可以使用deamon set来运行不同节点中的每个pod,或者其他人说你可以使用pod反关联

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

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

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

PS如果您从不希望pod的2个副本位于同一节点上,请定义反关联性规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM