Sobes.tech
Back to questions
Junior — Middle
72

Каким образом обеспечить размещение двух контейнеров в Kubernetes так, чтобы они не оказались на одной физической ноде?

Companies where asked
Нонтон

Answer from AI

sobes.tech AI

Чтобы гарантировать, что два контейнера не будут размещены на одной физической ноде в Kubernetes, можно использовать Pod Anti-Affinity. Это правило позволяет указать, что поды с определёнными метками не должны находиться на одной ноде.

Пример манифеста с anti-affinity:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    app: myapp
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - myapp
        topologyKey: kubernetes.io/hostname
  containers:
  - name: container1
    image: myimage1

Здесь topologyKey: kubernetes.io/hostname означает, что поды с меткой app: myapp не будут размещены на одном хосте (ноде). Таким образом, если у вас два пода с такой меткой, Kubernetes постарается разместить их на разных нодах.

Если у вас два контейнера в одном поде, то они всегда будут на одной ноде, так как под — минимальная единица размещения. Для разделения контейнеров на разные ноды нужно запускать их в разных подах с anti-affinity.