Pods с несколькими контейнерами (боковые контейнеры)
Изучите шаблоны запуска нескольких расположенных вместе контейнеров внутри одного Pod, например боковых контейнеров.
«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/logYAML сборщика журналов (часть 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 — локальная установка не требуется.
Все уроки этого курса
- Pods: самая малая единица
- Жизненный цикл и состояния Pod
- Pods с несколькими контейнерами (боковые контейнеры)
- Инициализирующие контейнеры и порядок запуска