Запуск двух модулей kubernetes на разных узлах - PullRequest
3 голосов
/ 04 июля 2019

Есть ли способ сказать Kubernetes никогда не запускать два модуля на одном узле, например, у меня есть две реплики модуля, я хочу, чтобы они всегда были распределены по 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

Ответы [ 4 ]

1 голос
/ 04 июля 2019

Я думаю, вам нужна концепция анти-аффинности. Это в пределах одного кластера, чтобы гарантировать, что модули не находятся на одном рабочем узле. https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity

1 голос
/ 04 июля 2019

очень просто, вы можете использовать deamon set для запуска каждого модуля в другом узле или, как говорили другие, вы можете использовать анти-сродство модуля

1 голос
/ 04 июля 2019

Похоже, что это можно сделать с помощью 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 голосов
/ 05 июля 2019

Планировщик k8s - это умное программное обеспечение.

  1. Планировщик kubernetes сначала определит все возможные узлы, в которых может быть развернут модуль, на основе ваших ограничений на сродство / анти-сродство / ресурсов / и т. Д.

  2. После этого планировщик найдет лучший узел, в котором можно развернуть модуль. Планировщик будет автоматически планировать размещение модулей в отдельных зонах доступности и на отдельных узлах, если это, конечно, возможно.

P.S. Если вы никогда не хотите, чтобы 2 реплики модуля находились на одном и том же узле, определите правило антиаффинности.

...