如何使用 podman 将整个 zookeeper 集合放入一个 pod 中?

如何使用 podman 将整个 zookeeper 集合放入一个 pod 中?

出于测试的原因,作为普通用户,我想在一个 pod 中创建一个完整的 zookeeper 集合,以便所有单独的 zookeeper 可以相互通信。

据我所知,要么 pod 中的所有容器共享相同的网络命名空间,因此它们可以使用 localhost 相互通信,要么它们各自都有自己的网络命名空间,根本无法相互通信。

具体来说,使用 podman,您可以使用此命令在网络中创建一个 pod,并且 uts 命名空间不共享。(如果您不共享网络命名空间,您还应该允许机器拥有不同的主机名。)

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

是否存在某种令人满意的中间立场,即 pod 中的所有容器都在一个子网上,并且可以通过这种方式相互通信?

podman 不支持 Docker 的--link命令行选项。

答案1

我在 Freenode 频道上得到的答案#podman是,按照我尝试的方式无法做到这一点。我必须让每个 zookeeper 监听不同的端口,然后它们才能localhost互相通信。

在我的环境中,这种方法可能可行,但由于 Zookeeper 使用三个端口,其中只有一个是公开的,因此情况比较复杂。其他端口用于领导者选举和其他节点间通信。

答案2

我遇到了同样的问题。由于新的 Zookeeper 使用“动态重新配置“,我认为,实现这一点并不复杂。只需在列表中指定端口(hpst:quorum:leaderelection;clienthost默认为0.0.0.0ZOO_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被共享,还有一个解决方案,现在复杂的:需要暴露所有端口,包括用于 zookeeper 互连和 Leader 选举的端口。不过这次所有服务器都可以使用 adminserver 的 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

相关内容