Как создать поды с несколькими контейнерами в Kubernetes
На этой странице
- Предварительные условия
- Что будем делать?
- Создание модуля с несколькими контейнерами
- Заключение
Пакеты обычно имеют один контейнер, т. е. модули с одним контейнером являются наиболее распространенным вариантом использования, и нет необходимости иметь один контейнер в модуле. В некоторых случаях внутри одного модуля может быть несколько контейнеров. Модули с несколькими контейнерами — это модули, содержащие два или более связанных контейнера, которые совместно используют ресурсы, такие как сетевое пространство, общие тома и т. д., и работают вместе как единое целое.
Одной из причин использования модуля с несколькими контейнерами является более простая связь между контейнерами. Все контейнеры внутри модуля используют одно и то же сетевое пространство для связи через localhost. Еще одна причина для использования модуля с несколькими контейнерами заключается в том, что все контейнеры имеют одинаковый жизненный цикл, который должен выполняться на одном узле. Когда необходимо смонтировать все контейнеры на одном томе, чтобы они могли взаимодействовать друг с другом, читая и изменяя файлы в томе хранилища, можно использовать несколько модулей контейнеров.
В этой статье мы создадим модуль с двумя контейнерами внутри. Этот пример поможет понять создание пода с несколькими контейнерами.
Предпосылки
- Кластер Kubernetes по крайней мере с 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18.04 EC2.
Что мы будем делать?
- Создание модуля с несколькими контейнерами
Создайте модуль с несколькими контейнерами
Создайте файл определения порта с несколькими контейнерами, используя следующее содержимое.
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
Заключение
В этой статье мы узнали, как создать модуль с несколькими контейнерами. Мы также увидели, как получить журналы определенного контейнера и войти в один контейнер. Модуль с несколькими контейнерами помогает нам иметь зависимые контейнеры в одном модуле.