Как мне использовать podman, чтобы поместить весь ансамбль zookeeper в модуль?

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

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

Чтобы быть точным, с podman вы можете использовать эту команду для создания модуля в сети, а пространства имен uts не используются совместно. (Если вы не разделяете сетевое пространство имен, вы также должны разрешить машинам иметь разные имена хостов.)

podman pod create -n zensemble --share cgroup,ipc

Есть ли какая-то золотая середина, когда все контейнеры в модуле находятся в подсети и могут общаться с ними

podman не поддерживает параметр командной строки Docker - ссылка .

1
задан 21 August 2019 в 18:55
2 ответа

Ответ, который я получил на канале #podman на Freenode, заключается в том, что это невозможно сделать так, как я пытаюсь это сделать. Что мне придется заставить каждого zookeeper прослушивать другой порт, и все они могут использовать localhost , чтобы общаться друг с другом.

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

1
ответ дан 3 December 2019 в 23:01

Я столкнулся с той же проблемой. Поскольку новый 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

Конечно, если вы не хотите, чтобы сеть расшаривалась, тоже есть решение, теперь уже сложное: нужно открыть все порты, в том числе и для zookeeper. взаимосвязи и выборы лидеров. Однако на этот раз все серверы могут работать с 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
2
ответ дан 7 July 2020 в 00:02

Теги

Похожие вопросы