Ubuntu 上的 LXC 和 Saltstack minion_id 配置

Ubuntu 上的 LXC 和 Saltstack minion_id 配置

我使用 LXC 作为测试 SaltStack 脚本的实验室平台。实验室由 +5 个 Ubuntu 12.04 LTS 容器组成,这些容器是我通过克隆salt-minion预安装的模板容器创建的。

一旦我创建模板容器并安装salt-minion,模板就会minion_id根据hostnametest-template)获取其 Salt。如果我使用lxc-clone此模板,则所有克隆都将具有该模板的minion_id,但我希望克隆具有minion_id与其hostnametest-machine-{1,2,3,4,5})匹配的。

有没有办法使这个脚本化bash,或者我应该采取另一种方式来达到同样的效果?

更新

我研究了一些lxc脚本,发现lxc脚本使用/usr/share/lxc/lxc.functions定义get_default_lxcpath函数的文件,所以我当前的脚本看起来像这样:

. /usr/share/lxc/lxc.functions

# clone template
lxc-clone -o $template -n "$container"

# create saltstack minion config dir if does not exist    
minion_id_path="$(get_default_lxcpath)/$container/rootfs/etc/salt"
mkdir -p "$minion_id_path"

# set minion-id directly from container name
echo "$container" > "$minion_id_path/minion_id"                

我不喜欢这个解决方案,因为它严重依赖于 lxc 和 saltstack 的内部结构,但它确实能完成工作。

更新2

在评论中提出了关于如何在删除现有命令后salt-minion生成新命令的建议后,我将其简化为两个命令:minion_id

. /usr/share/lxc/lxc.functions

# clone template
lxc-clone -o $template -n "$container"

# delete minion_id to allow salt-minion to generate a new one
rm "$(get_default_lxcpath)/$container/rootfs/etc/salt/minion_id"

我仍然希望看到更通用/更强大的方法,而不依赖于 SaltStack 和 LXC 内部结构。

答案1

使用dockerdockerfile。你可以很容易地在网上找到例子salt-minionsalt-master

获取文件并继续构建图像(这总是标记它们是个好主意给定一个像这样的目录结构(紧密遵循上面指出的示例):

docker/
├── salt-master
│   ├── Dockerfile
│   └── supervisor-salt.conf
└── salt-minion
    ├── Dockerfile
    └── supervisor-salt.conf

您需要cd docker/salt-master并发出:

# docker build -t kstaken/ubuntu-salt-master .

相当于salt-minion

# cd docker/salt-minion
# docker build -t kstaken/ubuntu-salt-minion .

此过程创建可重复使用的图像:

# docker images | grep kstaken
kstaken/ubuntu-salt-minion   latest              557c052f5b14        19 seconds ago      253.5 MB
kstaken/ubuntu-salt-master   latest              1f41866d05e1        5 minutes ago       262.7 MB

您可以根据需要在前台启动(并附加到它们)或在后台启动。您还可以关联他们:

# docker run --detach=true --hostname=salt-master --networking=true kstaken/ubuntu-salt-maste
# docker run --detach=true --hostname=minion1 --networking=true --link bersek_morse:linked-server kstaken/ubuntu-salt-minion
# docker run --detach=true --hostname=minion2 --networking=true --link berserk_morse:linked-server kstaken/ubuntu-salt-minion

结果非常容易编写脚本:

# docker ps
CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                NAMES
4fae47241a73        kstaken/ubuntu-salt-minion:latest   /usr/bin/supervisord   4 seconds ago       Up 2 seconds                             goofy_fermi
6030e7f882ba        kstaken/ubuntu-salt-minion:latest   /usr/bin/supervisord   25 seconds ago      Up 23 seconds                            desperate_hawking
22b18a387e21        kstaken/ubuntu-salt-master:latest   /usr/bin/supervisord   3 minutes ago       Up 3 minutes        4505/tcp, 4506/tcp   berserk_morse,desperate_hawking/linked-server,goofy_fermi/linked-server

相关内容