使用kubectl

时间:2015-10-08 00:28:43

标签: docker kubernetes

如果我在群集中创建3个节点,如何在整个容器中均匀分配docker容器?例如,如果我在每个节点上创建一个包含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个?

3 个答案:

答案 0 :(得分:1)

你和jpapejr的解决方案看起来都很合适,但使用nodeSelector强制调度到单个节点的缺点是需要多个RC用于单个应用程序并使该应用程序对节点的弹性降低失败。自定义调度程序的想法很不错,但编写和维护代码的工作量有所不足。

认为另一种可能的解决方案是在你的pod规范中设置运行时约束,这可能会让你接近你想要的。基于this newly merged doc with examples of runtime contraints,我认为您可以在RC的pod规范部分设置resources.requests.cpu并接近每个pod的CPU:

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

该文档还提供了requestslimits如何区别和互动的其他好例子。可能有一个组合可以为您提供所需的内容,并在单个节点出现故障时使应用程序保持适当的容量。

答案 1 :(得分:0)

如果我没弄错的话,你所看到的就是期望。如果您希望对pod放置进行更细粒度的控制,则可能需要客户调度程序。

答案 2 :(得分:0)

就我而言,我想在每个节点中放置固定数量的容器。我可以通过标记每个节点然后使用带有配置的nodeSelector来完成此操作。忽略我错误标记第3个节点的事实,这是我的设置:

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'

enter image description here

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