用kubectl均匀分配docker箱

如果我在集群中创build3个节点,那么如何将Docker容器均匀分布在容器中? 例如,如果我在每个节点上创build一个包含8个cpus的3个节点的集群,我通过性能分析确定了每个CPU运行一个容器时性能最佳。

gcloud container clusters create mycluster --num-nodes 3 --machine-type n1-standard-8 kubectl run myapp --image=gcr.io/myproject/myapp -r 24 

当我跑上面的kubectl ,它把11个容器放在第一个节点上,第二个10个,第三个放3个。 我如何做到每个都是8?

你和jpapejr的解决scheme看起来就像是可以工作的,但是使用nodeSelector来强制调度到单个节点,其缺点是需要多个RC用于单个应用程序,并且使得该应用程序对节点故障的适应能力降低。 自定义调度程序的想法很好,但是在编写和维护代码的工作量方面存在不足。

认为另一个可能的解决scheme是在您的pod规范中设置运行时限制,以使您可以接近您的要求。 根据这个新合并的文档和运行时限制的例子 ,我想你可以在RC的pod spec部分中设置resources.requests.cpu并且接近每个CPU的CPU:

 apiVersion: v1 kind: Pod metadata: name: myapp spec: containers: - name: myapp image: myregistry/myapp:v1 resources: requests: cpu: "1000m" 

该文档还有其他很好的例子,说明了requestslimits如何区分和相互作用。 可能有一个组合,给你你想要的,并保持你的应用程序在适当的能力,当一个单独的节点失败。

如果我没有弄错,你所看到的就是期望。 如果你想更好地控制pod放置,你可能需要一个客户调度程序。

就我而言,我想在每个节点中放置一个固定数量的容器。 我可以通过标记每个节点,然后使用一个configurationnodeSelector来做到这一点。 忽略这个事实,我mislabeled第三节点,这里是我的设置:

 kubectl label nodes gke-n3c8-7d9f8163-node-dol5 node=1 kubectl label nodes gke-n3c8-7d9f8163-node-hmbh node=2 kubectl label nodes gke-n3c8-7d9f8163-node-kdc4 node=3 

这可以自动执行:

 kubectl get nodes --no-headers | awk '{print NR " " $1}' | xargs -l bash -c 'kubectl label nodes $1 node=$0' 

在这里输入图像说明

 apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 8 selector: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: node: "1" containers: - name: nginx image: nginx