Kubernetes Basics · Урок

Pods с несколькими контейнерами (боковые контейнеры)

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

Урок 3 из 411 шагов

«Pods с несколькими контейнерами (боковые контейнеры)» — бесплатный урок Kubernetes Basics на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kubernetes Basics, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kubernetes Basics содержит 4 уроков всего.

За пределами одного контейнера

До сих пор мы рассматривали Pod как среду для запуска одного контейнера. Но что делать, если Вашему приложению нужен вспомогательный процесс?

Kubernetes позволяет запускать в одном Pod несколько контейнеров. Эти контейнеры всегда размещаются рядом и используют общие ресурсы.

Зачем нужны Pod с несколькими контейнерами?

Запуск нескольких контейнеров в одном Pod идеально подходит для приложений, компоненты которых тесно связаны и которым необходимо совместно использовать:

  • сетевое пространство имён (один IP-адрес, возможность обмениваться данными через localhost)
  • тома хранилища
  • жизненный цикл (они запускаются, останавливаются и перезапускаются вместе)

Это позволяет управлять связанными процессами как единым целым.

Объяснение шаблона sidecar

Распространённый подход — шаблон sidecar. При таком подходе контейнер «sidecar» работает рядом с контейнером основного приложения.

Он расширяет или улучшает функциональность основного приложения, не изменяя само основное приложение. Представьте его как полезного помощника!

Сценарии использования sidecar

Sidecar отличаются большой универсальностью. Распространённые варианты использования:

  • Сбор журналов: sidecar собирает журналы основного приложения и отправляет их в централизованную службу журналирования.
  • Прокси: sidecar обеспечивает проксирование сети, например для безопасности (mTLS) или управления трафиком.
  • Синхронизация файлов: sidecar поддерживает общий том в актуальном состоянии, обновляя конфигурацию или данные.

Pod с двумя контейнерами (YAML)

Рассмотрим, как определить несколько контейнеров в манифесте YAML для Pod. Каждый контейнер является элементом массива containers.

Обратите внимание на контейнеры nginx-proxy и main-app, определённые в spec.containers.

apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: nginx-proxy
    image: nginx:latest
    ports:
    - containerPort: 80
  - name: main-app
    image: busybox:latest
    command: ["sh", "-c", "echo 'Hello from main app!' && sleep 3600"]

Общее хранилище: emptyDir

Контейнеры в одном Pod могут совместно использовать данные с помощью томов Kubernetes. Простой способ сделать это — использовать том emptyDir.

Том emptyDir создаётся, когда Pod назначается узлу, и существует, пока этот Pod работает на данном узле. Это временное хранилище.

Пример: sidecar для сбора журналов

Представьте основное приложение, которое записывает журналы в файл. Затем sidecar может читать этот файл журнала и отправлять его содержимое в службу журналирования.

Так логика журналирования отделяется от основного приложения, благодаря чему оно остаётся чистым и сосредоточенным на своих задачах.

YAML сборщика журналов (часть 1)

Ниже приведён YAML для нашего примера сборщика журналов. Мы определяем том emptyDir с именем log-volume. Оба контейнера подключат этот том.

Контейнер main-app записывает сообщение журнала в /var/log/app.log внутри общего тома.

apiVersion: v1
kind: Pod
metadata:
  name: log-collector-pod
spec:
  volumes:
  - name: log-volume
    emptyDir: {}
  containers:
  - name: main-app
    image: busybox:latest
    command: ["sh", "-c", "while true; do echo $(date) 'Main app log entry' >> /var/log/app.log; sleep 1; done"]
    volumeMounts:
    - name: log-volume
      mountPath: /var/log

YAML сборщика журналов (часть 2)

Теперь контейнер log-sidecar подключает тот же том log-volume. Затем он использует tail -f, чтобы непрерывно читать файл журнала, записанный основным приложением.

В реальном сценарии этот sidecar обрабатывал бы журналы и отправлял их в систему журналирования, например Elasticsearch или Splunk.

apiVersion: v1
kind: Pod
metadata:
  name: log-collector-pod # Same Pod as before
spec:
  volumes:
  - name: log-volume
    emptyDir: {}
  containers:
  - name: main-app
    image: busybox:latest
    command: ["sh", "-c", "while true; do echo $(date) 'Main app log entry' >> /var/log/app.log; sleep 1; done"]
    volumeMounts:
    - name: log-volume
      mountPath: /var/log
  - name: log-sidecar
    image: busybox:latest
    command: ["sh", "-c", "tail -f /var/log/app.log"]
    volumeMounts:
    - name: log-volume
      mountPath: /var/log

Быстрая проверка: преимущества sidecar

Pod с несколькими контейнерами, особенно использующие шаблон sidecar, дают несколько преимуществ при управлении сложными приложениями.

Какие из перечисленных ниже являются ключевыми преимуществами использования контейнера sidecar?

Итоги: Pod с несколькими контейнерами

Отличная работа! Вы узнали о Pod с несколькими контейнерами и мощном шаблоне sidecar.

  • Pod могут содержать несколько контейнеров, совместно использующих сеть и хранилище.
  • Шаблон sidecar помогает расширять или улучшать функциональность основного приложения.
  • Распространённые варианты использования включают сбор журналов, прокси и синхронизацию данных.
  • Тома emptyDir предоставляют временное общее хранилище внутри Pod.

Этот шаблон крайне важен для создания надёжных модульных приложений в Kubernetes!

Можно начать бесплатно

Изучай Kubernetes Basics с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
12
Уроки
48

Часто задаваемые вопросы

Урок «Pods с несколькими контейнерами (боковые контейнеры)» бесплатный?

Да — полный текст урока «Pods с несколькими контейнерами (боковые контейнеры)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kubernetes Basics, подпишись на CoddyKit PRO. Курс Kubernetes Basics содержит 4 уроков всего.

Чему я научусь в уроке «Pods с несколькими контейнерами (боковые контейнеры)»?

Изучите шаблоны запуска нескольких расположенных вместе контейнеров внутри одного Pod, например боковых контейнеров. Ты практикуешь Kubernetes Basics с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kubernetes Basics?

Предыдущий опыт не требуется. Kubernetes Basics на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Pods с несколькими контейнерами (боковые контейнеры)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kubernetes Basics?

Да. Каждый урок Kubernetes Basics включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Pods: самая малая единица
  2. Жизненный цикл и состояния Pod
  3. Pods с несколькими контейнерами (боковые контейнеры)
  4. Инициализирующие контейнеры и порядок запуска
← Назад к Kubernetes Basics