Спілкування між контейнерами в одному Podʼі за допомогою спільного тому
Ця сторінка показує, як використовувати Том для спілкування між двома контейнерами, що працюють в одному Podʼі. Також дивіться, як дозволити процесам спілкуватися між контейнерами через спільний простір процесів.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.Створення Pod, що запускає два контейнери
У цьому завданні ви створите Pod, який запускає два контейнери. Ці два контейнери спільно використовують Том, який вони можуть використовувати для спілкування. Ось конфігураційний файл для Podʼа:
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
У конфігураційному файлі видно, що Pod має Том з назвою shared-data
.
Перший контейнер, зазначений у конфігураційному файлі, запускає сервер nginx. Шлях монтування для спільного тому — /usr/share/nginx/html
. Другий контейнер базується на образі debian і має шлях монтування /pod-data
. Другий контейнер виконує наступну команду і потім завершується.
echo Hello from the debian container > /pod-data/index.html
Зверніть увагу, що другий контейнер записує файл index.html
в кореневу теку сервера nginx.
Створіть Pod і два контейнери:
kubectl apply -f https://k8s.io/examples/pods/two-container-pod.yaml
Перегляньте інформацію про Pod та контейнери:
kubectl get pod two-containers --output=yaml
Ось частина вихідних даних:
apiVersion: v1
kind: Pod
metadata:
...
name: two-containers
namespace: default
...
spec:
...
containerStatuses:
- containerID: docker://c1d8abd1 ...
image: debian
...
lastState:
terminated:
...
name: debian-container
...
- containerID: docker://96c1ff2c5bb ...
image: nginx
...
name: nginx-container
...
state:
running:
...
Ви бачите, що контейнер debian завершив роботу, а контейнер nginx все ще працює.
Отримайте доступ до shell контейнера nginx:
kubectl exec -it two-containers -c nginx-container -- /bin/bash
У вашому shell перевірте, що nginx працює:
root@two-containers:/# apt-get update
root@two-containers:/# apt-get install curl procps
root@two-containers:/# ps aux
Вихідні дані схожі на це:
USER PID ... STAT START TIME COMMAND
root 1 ... Ss 21:12 0:00 nginx: master process nginx -g daemon off;
Згадайте, що контейнер debian створив файл index.html
в кореневій теці nginx. Використовуйте curl
, щоб надіслати GET запит на сервер nginx:
root@two-containers:/# curl localhost
Вихідні дані показують, що nginx обслуговує вебсторінку, написану контейнером debian:
Hello from the debian container
Обговорення
Основна причина, через яку Podʼи можуть мати кілька контейнерів, полягає у підтримці допоміжних застосунків, що допомагають основному застосунку. Типові приклади допоміжних застосунків включають інструменти для завантаження, надсилання даних та проксі. Допоміжні та основні застосунки часто потребують спілкування між собою. Зазвичай це робиться через спільну файлову систему, як показано в цій вправі, або через інтерфейс локальної мережі, localhost. Прикладом цього шаблону є вебсервер разом із допоміжним застосунком, яка перевіряє репозиторій Git на наявність нових оновлень.
Том у цьому завданні надає спосіб спілкування контейнерів під час життя Pod. Якщо Pod видалено та створено знову, всі дані, збережені в спільному томі, будуть втрачені.
Що далі
Дізнайтеся більше про шаблони для композитних контейнерів.
Дізнайтеся про композитні контейнери для модульної архітектури.
Перегляньте Налаштування Pod для використання тому для зберігання.
Перегляньте Налаштування Pod для спільного використання простору процесів між контейнерами.
Перегляньте Том.
Перегляньте Pod.