<p>I am looking for a &quot;<em>simple</em>&quot; deployment system that can manage a cluster of computers.</p>
<p>I have one Docker image (hosted on <a href="https://hub.docker.com" rel="nofollow noreferrer">DockerHub</a>) that will run with different environment parameters in this cluster. For this image I have a docker_compose file that I can start on a machine directly (this works right now).</p>
<p>What I am looking for is a cluster management system to which I can add physical computers (nodes) and then I can issue commands like:</p>
<pre><code>$ docker-compose up
</code></pre>
<p>or</p>
<pre><code>$ docker run --device /dev/sda -e ENV1 -e ENV2 image_id
</code></pre>
<p>And ideally the cluster (manager) schedules it on one available node. All the nodes that I will join in the cluster have the necessary resources to run the container, so I am not interested in a cluster management system that can schedule containers depending on their hardware needs. Also, it doesn't necessarily need to have support for Docker, just to be able to issue the commands remotely on the cluster's nodes. Ideally, this would also an API other than command line that I could talk to.</p>
<h2>What I've tried / looked at</h2>
<ol>
<li><a href="https://docs.docker.com/engine/swarm/" rel="nofollow noreferrer">Docker swarm mode</a> - seemed like the perfect choice, but I hit a dead-end because I use the &quot;--device&quot; parameter, which is <a href="https://github.com/docker/swarmkit/issues/2682" rel="nofollow noreferrer">not supported</a> yet (and it might as well never be).</li>
<li><a href="https://docs.docker.com/machine/overview/" rel="nofollow noreferrer">Docker machine</a></li>
</ol>
<p><a href="https://i.stack.imgur.com/3I6yM.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3I6yM.png" alt="Docker run image" /></a></p>
<ul>
<li>this seems exactly what I want, but it's not supported anymore, so I don't think it's a good choice.</li>
</ul>
<ol start="3">
<li><a href="https://kubernetes.io" rel="nofollow noreferrer">Kubernetes</a> sounds good but seems at first sight like an overkill. Also not sure it can do &quot;--device&quot; so I hesitate in going through learning it and hitting another dead-end.</li>
</ol>
<p>Any suggestions are welcome!</p>

Copil tembel
<p>As it comes to <strong>kubernetes</strong> and support for something like <code>--device</code> in <code>docker</code>, <a href="https://stackoverflow.com/a/59291859/11714114">this</a> answer should dispel your doubts.</p>
<p>It was widely discussed in <a href="https://github.com/kubernetes/kubernetes/issues/5607" rel="nofollow noreferrer">this</a> thread on github. Although there is no exact <code>--device</code> equivalent in kubernetes, it's worth repeating that it's possible to use host devices in your kubernetes <code>Pods</code> by enabling <a href="https://kubernetes.io/docs/concepts/workloads/pods/pod/#privileged-mode-for-pod-containers" rel="nofollow noreferrer">privileged mode</a> as suggested in <a href="https://github.com/kubernetes/kubernetes/issues/5607#issuecomment-258195005" rel="nofollow noreferrer">this</a> comment:</p>
<blockquote>
<pre><code>  containers:
  - name: foo
    ...
    volumeMounts:
    - mountPath: /dev/snd
      name: dev-snd
    securityContext:
      privileged: true
  volumes:
  - name: dev-snd
    hostPath:
      path: /dev/snd
</code></pre>
</blockquote>
<p>It enables you to mount into your <code>Pod</code> any device available on specific node using <code>hostPath</code> and providing the divice path such as <code>/dev/snd</code> from the above example, enabling you to use soundcard available on the host.</p>
<p>You need to decide however, if running privileged containers is acceptable from security perspective in your particular case.</p>
<p>If you look for more secure way of mounting particular host devices that gives you more granular level of control, take a look at <a href="https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/" rel="nofollow noreferrer">device plugins</a> e.g. specific ones like the one mentioned <a href="https://stackoverflow.com/questions/59231393/how-to-mount-dev-kvm-in-a-non-privileged-pod/59254950#59254950">here</a> for exposing <code>/dev/kvm</code> or <a href="https://github.com/honkiko/k8s-hostdev-plugin#hostdev-device-plugin-for-kubernetes" rel="nofollow noreferrer">more general one</a>, allowing you to configure practically any devices under host <code>/dev</code> into your <strong>kubernetes</strong> <code>Pods</code> through device cgroup.</p>
<p>When you're planning to run and manage your <strong>docker containers</strong> on multiple-node cluster, <strong>Kubernetes</strong> doesn't have to be an overkill, especially if you decide to use a managed solution already suggested by @DannyB in comments. It's worth mentioning that its currently available in offers of all major cloud providers: <strong>GKE</strong> on <strong>GCP</strong>, <strong>EKS</strong> on <strong>AWS</strong> or <strong>AKS</strong> on <strong>Azure</strong>, which also says a lot about its growing popularity.</p>
<p><a href="http://kubernetes.io/" rel="nofollow noreferrer">Kubernetes</a> is also very scalable and dynamically developing solution, gaining popularity quite fast in recent years, so it's definitely worth of having a closer look at it.</p>
