Поиск по сайту:

Как создать поды с несколькими контейнерами в Kubernetes


На этой странице

  1. Предварительные условия
  2. Что будем делать?
  3. Создание модуля с несколькими контейнерами
  4. Заключение

Пакеты обычно имеют один контейнер, т. е. модули с одним контейнером являются наиболее распространенным вариантом использования, и нет необходимости иметь один контейнер в модуле. В некоторых случаях внутри одного модуля может быть несколько контейнеров. Модули с несколькими контейнерами — это модули, содержащие два или более связанных контейнера, которые совместно используют ресурсы, такие как сетевое пространство, общие тома и т. д., и работают вместе как единое целое.

Одной из причин использования модуля с несколькими контейнерами является более простая связь между контейнерами. Все контейнеры внутри модуля используют одно и то же сетевое пространство для связи через localhost. Еще одна причина для использования модуля с несколькими контейнерами заключается в том, что все контейнеры имеют одинаковый жизненный цикл, который должен выполняться на одном узле. Когда необходимо смонтировать все контейнеры на одном томе, чтобы они могли взаимодействовать друг с другом, читая и изменяя файлы в томе хранилища, можно использовать несколько модулей контейнеров.

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

Предпосылки

  1. Кластер Kubernetes по крайней мере с 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18.04 EC2.

Что мы будем делать?

  1. Создание модуля с несколькими контейнерами

Создайте модуль с несколькими контейнерами

Создайте файл определения порта с несколькими контейнерами, используя следующее содержимое.

vim multi-container-pod-example.yml
apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: container-1
    image: nginx
    ports:
    - containerPort: 80  
- name: container-2 image: alpine command: ["watch", "wget", "-qO-", "localhost"]

В этом файле есть определение для 2 контейнеров, которые будут использовать одну и ту же сеть, ресурсы и том.

Получите список существующих портов и создайте порт с несколькими контейнерами, используя следующие команды.

kubectl get pods #Get a list of existing pods
kubectl create -f multi-container-pod-example.yml #Create a multi container pod
kubectl get pods #Check the pods after creating in the above step

На приведенном выше снимке экрана видно, что 2/2 модуля находятся в состоянии ГОТОВО. Это означает, что есть 2 модуля, и из этих 2 модулей 2 работают.

Получите список модулей и опишите тот, который мы только что создали.

kubectl get pods
kubectl describe pod multi-container-pod #Get details of the Pod.

Описывая модуль, вы получите подробную информацию об обоих контейнерах внутри него.

На приведенном выше снимке экрана видно, что есть два контейнера container-1 и container-2. Оба эти контейнера принадлежат одному и тому же модулю.

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

kubectl get pods
kubectl logs multi-container-pod #This does not work
kubectl logs multi-container-pod container-1 #Specify the container name to get the logs

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

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

kubectl get pods
kubectl logs multi-container-pod #
kubectl logs multi-container-pod container-1 container-2 #Two containers can not be specified

На приведенном выше снимке экрана видно, что когда вы указываете 2 контейнера для получения журналов, команда не выполняется.

Простая команда для входа в модуль не работает, если в одном модуле есть несколько контейнеров.

kubectl get pods
kubectl exec -it multi-container-pod /bin/bash

Чтобы войти в конкретный контейнер, нам нужно указать имя контейнера в команде. Кроме того, вы не можете войти в 2 модуля одновременно.

kubectl get pods
kubectl exec -it multi-container-pod -c container-1 /bin/bash #Login into the container

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

kubectl get pod
kubectl delete pod multi-container-pod #Delete the pod

Заключение

В этой статье мы узнали, как создать модуль с несколькими контейнерами. Мы также увидели, как получить журналы определенного контейнера и войти в один контейнер. Модуль с несколькими контейнерами помогает нам иметь зависимые контейнеры в одном модуле.