Как мне использовать podman, чтобы поместить целый ансамбль зоопарка в стручок?
Из соображений тестирования я хотел бы, как обычный пользователь, создать целый ансамбль зоопарка в капсуле, где все отдельные зоопарки могут общаться друг с другом.
Насколько я могу судить, либо все контейнеры в модуле совместно используют одно и то же пространство имен сети, поэтому они могут использовать localhost для общения друг с другом, либо у каждого из них есть свое собственное пространство, и они вообще не могут общаться друг с другом.
Если говорить явно, с помощью podman вы можете использовать эту команду для создания модуля в сети, и пространства имен uts не будут использоваться совместно. (Если вы не разделяете пространство имен сети, вам также следует разрешить компьютерам использовать разные имена хостов.)
podman pod create -n zensemble --share cgroup,ipc
Есть ли какое-то счастливое промежуточное положение, когда все контейнеры в модуле находятся в подсети и могут общаться друг с другом таким образом?
Подман не поддерживает Докера --link
опция командной строки.
1 ответ
Ответ, который я получил на #podman
Канал на Freenode состоит в том, что это не может быть сделано так, как я пытаюсь это сделать. Что мне придется заставить каждого зоопарка слушать разные порты, и все они могут использовать localhost
разговаривать друг с другом.
Это, вероятно, будет работать в моей ситуации, хотя это усложняется тем фактом, что Zookeeper использует три порта, только один из которых является общедоступным. Другие используются для выборов лидера и другой связи между узлами.
Я столкнулся с той же проблемой. Поскольку в новом Zookeeper используется " динамическая реконфигурация", я думаю, это не так уж сложно. Просто укажите порты (hpst:quorum:leaderelection;client
,
host
по умолчанию
0.0.0.0
) в
ZOO_SERVERS
список. Для серверов администрирования необходимо указать его для каждого контейнера, но это необязательно.
ZOO_SERVERS="server.1=:2888:3888;2181 \
server.2=:2889:3889;2182 \
server.3=:2890:3890;2183"
podman pod create -n zkensemble -p 8080-8082,2181-2183
podman run --pod zkensemble --name zk1 \
-e ZOO_MY_ID=1 \
-e ZOO_SERVERS=$ZOO_SERVERS \
-d zookeeper
podman run --pod zkensemble --name zk2 \
-e ZOO_MY_ID=2 \
-e ZOO_SERVERS=$ZOO_SERVERS \
-e JVMFLAGS="-Dzookeeper.admin.serverPort=8081" \
-d zookeeper
podman run --pod zkensemble --name zk3 \
-e ZOO_MY_ID=3 \
-e ZOO_SERVERS=$ZOO_SERVERS \
-e JVMFLAGS="-Dzookeeper.admin.serverPort=8082" \
-d zookeeper
Конечно, если вы не хотите
net
для совместного использования существует также решение, теперь уже сложное: все порты должны быть открыты, в том числе для соединения сотрудников зоопарка и выборов лидера. Однако на этот раз все серверы могут работать с 8080 для администратора. Нам нужно только сопоставить 8080 с разными портами на хосте.
IP=$(hostname -I | awk '{print $1}')
ZOO_SERVERS_1="server.1=:2888:3888;2181 \
server.2=$IP:2889:3889;2182 \
server.3=$IP:2890:3890;2183"
ZOO_SERVERS_2="server.1=$IP:2888:3888;2181 \
server.2=:2889:3889;2182 \
server.3=$IP:2890:3890;2183"
ZOO_SERVERS_3="server.1=$IP:2888:3888;2181 \
server.2=$IP:2889:3889;2182 \
server.3=:2890:3890;2183"
podman pod create -n zkensemble --share pid,ipc,uts
podman run --pod zkensemble --name zk1 \
-e ZOO_MY_ID=1 \
-e ZOO_SERVERS=$ZOO_SERVERS_1 \
-p 2181:2181,2888:2888,3888:3888,8080:8080 \
-d zookeeper
podman run --pod zkensemble --name zk2 \
-e ZOO_MY_ID=2 \
-e ZOO_SERVERS=$ZOO_SERVERS_2 \
-p 2182:2182,2889:2889,3889:3889,8081:8080 \
-d zookeeper
podman run --pod zkensemble --name zk3 \
-e ZOO_MY_ID=3 \
-e ZOO_SERVERS=$ZOO_SERVERS_3 \
-p 2183:2183,2890:2890,3890:3890,8082:8080 \
-d zookeeper