我正在寻找扩展用于对多个远程位置的设备执行定期性能测试的 docker 应用程序的方法。此应用程序需要在每个远程工作节点上运行相同的性能测试(使用相同的底层映像),并且每个工作节点都有特定的配置。
考虑这个例子,我有三台服务器......
worker.denver.example.com
worker.chicago.example.com
worker.newyork.example.com
...我想在所有三个工作节点上运行我的容器fizbuz-tester
。foobar-performance
我该如何做:
fizbuz-tester
在 每小时运行一次worker.denver
,worker.chicago
在 则每六小时运行一次worker.newyork
。foobar-performance
在MY_JAM=ABBA
onworker.chicago
、MY_JAM=IRONMAIDEN
onworker.denver
和MY_JAM=BEATLES
on中设置环境变量worker.newyork
。
运行容器的底层 Docker 映像是相同的,但运行时设置不同(并将定期调整)。目前,我的流程是查阅文档并docker run
在每个工作器上运行适当的命令。如果我想更改容器的配置选项之一,则再次涉及连接到工作器。可扩展性问题应该很明显。
当该应用程序从 3 个工作节点扩展到 5 个、10 个、20 个时,我该如何管理它?
我发现的 Docker 编排工具似乎基于“在很多地方以同样的方式做同样的事情”,而对于我的申请,我需要“做同样的事情不同的在很多地方都有这样的方法”
远程容器编排的首选-Docker Swarm-不符合我的用例。我读过的有关 Swarm 的所有内容都表明,它抽象了实际 Docker 工作主机的管理,而这恰恰不是我需要的。
是否有一种工具可以让我从中央服务器远程管理多个 docker 工作节点,同时仍然可以让我单独控制每个工作节点,而不仅仅是作为资源池的一部分?
我希望两年后这个问题可能有一个答案
答案1
OpenSVC 可用于满足您的需求。
- 首先在所有 worker 上安装 opensvc 代理https://docs.opensvc.com/latest/agent.install.html
- 将所有工作进程连接起来形成一个集群https://docs.opensvc.com/latest/agent.configure.cluster.html
fizbuz-tester
创建 2 个名为and 的服务foobar-performance
(如果两个容器应该一起执行,则可以是单个服务,这意味着它们在功能上与相同的应用程序目的/堆栈相关)- 基本服务配置如下https://github.com/opensvc/docker_ovh_callbot/blob/master/opensvc.as.task.template.conf
* fizbuz-测试员 *
[DEFAULT]
nodes = *
topology = flex
flex_target = 2
[task#fizbuz]
type = docker
image = fizbuz-tester:latest
netns = host
rm = true
[email protected] = @360
schedule = @60
请参阅计划定义文档以了解高级语法https://docs.opensvc.com/latest/agent.scheduler.html#schedule-definition
* foobar-性能 *
[DEFAULT]
nodes = *
topology = flex
flex_target = 3
[task#foobar]
type = docker
image = foobar-performance:latest
netns = host
[email protected] = MY_JAM=ABBA
[email protected] = MY_JAM=IRONMAIDEN
[email protected] = MY_JAM=BEATLES
rm = true
当任务没有计划时,你可以使用以下方式手动运行它:om foobar-performance run --rid task#foobar
当您扩大节点时,您只需将新节点加入集群(加入节点上的 2 个命令),服务就会自动扩大。
OpenSVC 2.0 还可通过集群 TLS 套接字进行远程管理https://docs.opensvc.com/latest/agent.configure.client.html
答案2
当您运行 docker 命令时,“docker”二进制文件只是一个客户端(= docker cli),它向 docker 引擎发送 HTTP 请求,默认情况下发送到本地 unix 套接字。
当您在服务器上激活远程访问时,您可以从远程计算机运行 docker 命令。
搜索“docker remote api”或查看https://gist.github.com/kekru/4e6d49b4290a4eebc7b597c07eaf61f2
如果你安装了最新的docker cli 19.03,那么你可以使用新的docker context命令在远程服务器之间切换
https://docs.docker.com/engine/context/working-with-contexts/