简单Docker容器集群部署系统
Simple Docker container cluster deployment system
我正在寻找可以管理计算机集群的“简单”部署系统。
我有一个 Docker 映像(托管在 DockerHub 上),它将 运行 在此集群中使用不同的环境参数。对于这张图片,我有一个 docker_compose 文件,我可以直接在机器上启动它(现在可以使用)。
我正在寻找的是一个集群管理系统,我可以在其中添加物理计算机(节点),然后我可以发出如下命令:
$ docker-compose up
或
$ docker run --device /dev/sda -e ENV1 -e ENV2 image_id
理想情况下,集群(管理器)将其安排在一个可用节点上。我将加入集群的所有节点都具有 运行 容器所需的资源,因此我对可以根据硬件需求调度容器的集群管理系统不感兴趣。此外,它不一定需要支持 Docker,只是为了能够在集群的节点上远程发出命令。理想情况下,这也是一个 API 除了我可以与之交谈的命令行。
我试过/看过的
- Docker swarm mode - seemed like the perfect choice, but I hit a dead-end because I use the "--device" parameter, which is not supported 还没有(也可能永远不会)。
- Docker machine
- 这似乎正是我想要的,但它不再受支持,所以我认为这不是一个好的选择。
- Kubernetes 听起来不错,但乍一看似乎有点矫枉过正。也不确定它是否可以执行“--device”,所以我犹豫是否要学习它并进入另一个死胡同。
欢迎提出任何建议!
关于 kubernetes 和对 docker
中 --device
之类的支持, 答案应该会消除您的疑虑。
this thread on github. Although there is no exact --device
equivalent in kubernetes, it's worth repeating that it's possible to use host devices in your kubernetes Pods
by enabling privileged mode as suggested in this评论中广泛讨论:
containers:
- name: foo
...
volumeMounts:
- mountPath: /dev/snd
name: dev-snd
securityContext:
privileged: true
volumes:
- name: dev-snd
hostPath:
path: /dev/snd
它使您能够使用 hostPath
将特定节点上可用的任何设备安装到 Pod
中,并提供上述示例中的 /dev/snd
等设备路径,使您能够使用主机上可用的声卡。
但是,您需要决定,在您的特定情况下,运行宁特权容器是否可以从安全角度接受。
如果您正在寻找更安全的方式来安装特定的主机设备,从而为您提供更精细的控制级别,请查看 device plugins e.g. specific ones like the one mentioned here for exposing /dev/kvm
or more general one,让您几乎可以配置主机 /dev
下的任何设备通过设备 cgroup 进入您的 kubernetes Pods
。
当您计划在多节点集群上运行和管理您的docker容器时,Kubernetes 不必矫枉过正,特别是如果您决定使用@DannyB 在评论中已经建议的托管解决方案。值得一提的是,它目前在所有主要云提供商的报价中可用:GKE on GCP、EKS在 AWS 或 AKS 上在 Azure 上,这也说明了它越来越受欢迎。
Kubernetes 也是一个非常可扩展和动态开发的解决方案,近年来流行得相当快,所以绝对值得仔细研究一下。
我正在寻找可以管理计算机集群的“简单”部署系统。
我有一个 Docker 映像(托管在 DockerHub 上),它将 运行 在此集群中使用不同的环境参数。对于这张图片,我有一个 docker_compose 文件,我可以直接在机器上启动它(现在可以使用)。
我正在寻找的是一个集群管理系统,我可以在其中添加物理计算机(节点),然后我可以发出如下命令:
$ docker-compose up
或
$ docker run --device /dev/sda -e ENV1 -e ENV2 image_id
理想情况下,集群(管理器)将其安排在一个可用节点上。我将加入集群的所有节点都具有 运行 容器所需的资源,因此我对可以根据硬件需求调度容器的集群管理系统不感兴趣。此外,它不一定需要支持 Docker,只是为了能够在集群的节点上远程发出命令。理想情况下,这也是一个 API 除了我可以与之交谈的命令行。
我试过/看过的
- Docker swarm mode - seemed like the perfect choice, but I hit a dead-end because I use the "--device" parameter, which is not supported 还没有(也可能永远不会)。
- Docker machine
- 这似乎正是我想要的,但它不再受支持,所以我认为这不是一个好的选择。
- Kubernetes 听起来不错,但乍一看似乎有点矫枉过正。也不确定它是否可以执行“--device”,所以我犹豫是否要学习它并进入另一个死胡同。
欢迎提出任何建议!
关于 kubernetes 和对 docker
中 --device
之类的支持,
this thread on github. Although there is no exact --device
equivalent in kubernetes, it's worth repeating that it's possible to use host devices in your kubernetes Pods
by enabling privileged mode as suggested in this评论中广泛讨论:
containers: - name: foo ... volumeMounts: - mountPath: /dev/snd name: dev-snd securityContext: privileged: true volumes: - name: dev-snd hostPath: path: /dev/snd
它使您能够使用 hostPath
将特定节点上可用的任何设备安装到 Pod
中,并提供上述示例中的 /dev/snd
等设备路径,使您能够使用主机上可用的声卡。
但是,您需要决定,在您的特定情况下,运行宁特权容器是否可以从安全角度接受。
如果您正在寻找更安全的方式来安装特定的主机设备,从而为您提供更精细的控制级别,请查看 device plugins e.g. specific ones like the one mentioned here for exposing /dev/kvm
or more general one,让您几乎可以配置主机 /dev
下的任何设备通过设备 cgroup 进入您的 kubernetes Pods
。
当您计划在多节点集群上运行和管理您的docker容器时,Kubernetes 不必矫枉过正,特别是如果您决定使用@DannyB 在评论中已经建议的托管解决方案。值得一提的是,它目前在所有主要云提供商的报价中可用:GKE on GCP、EKS在 AWS 或 AKS 上在 Azure 上,这也说明了它越来越受欢迎。
Kubernetes 也是一个非常可扩展和动态开发的解决方案,近年来流行得相当快,所以绝对值得仔细研究一下。