Могут ли контейнеры одного пода быть размещены на разных узлах (нодах) в Kubernetes?

«Могут ли контейнеры одного пода быть размещены на разных узлах (нодах) в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не могут. Все контейнеры внутри одного пода всегда размещаются и запускаются на одном и том же узле (ноде). Это фундаментальное свойство пода в Kubernetes.

Почему это так? Поды — это атомарные единицы развертывания. Контейнеры внутри пода:

  • Разделяют одно сетевое пространство имен (общий IP-адрес и порты).
  • Могут общаться друг с другом через localhost.
  • Монтируют одни и те же тома (volumes).
  • Разделяют пространство имен PID (по умолчанию).

Размещение на разных узлах сделало бы эту общую модель невозможной.

Пример манифеста пода с несколькими контейнерами (sidecar-паттерн):

apiVersion: v1
kind: Pod
metadata:
  name: web-app-with-log-shipper
spec:
  containers:
  - name: web-app
    image: nginx:alpine
    ports:
    - containerPort: 80
  - name: log-shipper
    image: fluentd:latest
    volumeMounts:
    - name: log-volume
      mountPath: /var/log/nginx
  volumes:
  - name: log-volume
    emptyDir: {}

Контейнеры web-app и log-shipper гарантированно будут работать на одной ноде.