繁体   English   中英

是否可以并行运行 sls 文件?

[英]Is it possible to run sls files parallel?

我正在运行一个 sls 文件,该文件启动一个 docker 容器,该容器应在后台保持活动状态。 它确实有效,容器已启动并正在运行。 但是,在我杀死我的 minions 上的容器之前,我无法运行任何其他 state.apply 命令,因为我得到:

 The function "state.apply" is running as PID 44455 and was started at 2020, Aug 19 18:49:13.242099 with jid 20200819184913242099

现在,我找到了以下文档: https://docs.saltstack.com/en/latest/ref/states/parallel.html这意味着它实际上是可能的。 但是,当我将它添加到我的 SLS 文件时,它不起作用。 在我杀死容器之前,我仍然无法调用新的 state.apply。 这是我的文件的样子:

docker.io:
pkg.installed: []
require:
- pkgrepo: docker_prerequisites
- pkg: docker_prerequisites
service.running:
- parallel: True
- name: docker
- enable: True
- restart: True
- image: ubuntu
- port_bindings: 800:80

docker:
cmd.run:
- name: docker run -t  ubuntu

我使用的命令错误吗? 这就是我认为它应该基于文档的方式。 或者是否可能有不同的方式来启动 docker 容器,该容器从 sls 文件保持活动状态?

如果你检查你的盐日志或你的过程管理器,你将很可能能够找出这里发生的事情。 只要命令运行,state 就在运行。 问题出在您的 cmd.run 中。 只要执行其中的命令,Salt 就会执行 cmd.run。 如果当前没有其他 cmd.run 正在运行,Salt 只会执行下一个 cmd.run。 否则你会得到你提到的错误。

- name: docker run -t  ubuntu

您使用的命令将附加容器 shell。 (-t) 因此 salt 正在等待命令结束。 在这种情况下,在您关闭容器 shell 之前,命令不会结束。解决方案是分离容器 shell,使其作为后台进程存在,然后附加它。

docker:
cmd.run:
- name: docker run -t -d ubuntu

只需添加 -d 参数即可分离容器 shell 并且容器在后台运行。 通过添加此参数,您的 saltstate 应该完成。

现在,当容器在后台运行时,您可以使用以下命令将自己附加到容器 shell:

docker exec -it <container_id> /bin/bash

然而,这里是并行运行 saltstates 的方式:

将 saltstate 应用于目标 minion 时,请尝试在末尾将以下参数添加到 salt 或 salt-call 命令: concurrent=true

请参考此文档并搜索并发: https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.state.html

这篇文章描述了这个问题。 但是你应该小心,因为同时运行同一个盐模块两次可能很危险。 所以尽量避免这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM