Kubernetes将pods分配到池中

Pla*_*Tag 16 gcloud kubernetes kubectl

有没有办法告诉kubectl我的pod应该只部署在某个实例池上?

例如:

nodeSelector:
      pool: poolname
Run Code Online (Sandbox Code Playgroud)

假设我已经创建了我的游泳池,例如:

gcloud container node-pools create poolname --cluster=cluster-1 --num-nodes=10 --machine-type=n1-highmem-32
Run Code Online (Sandbox Code Playgroud)

Pla*_*Tag 32

好的,我发现了一个解决方案:

gcloud为池名称创建标签.在我的清单中,我只是将它放在节点选择器下面.很容易.

这是我的manifest.yaml:我使用kubernetes部署ipyparallel

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ipengine
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: ipengine
    spec:
      containers:
      - name: ipengine
        image: <imageaddr.>
        args:
        - ipengine
        - --ipython-dir=/tmp/config/
        - --location=ipcontroller.default.svc.cluster.local
        - --log-level=0
        resources:
          requests:
            cpu: 1
            #memory: 3Gi
      nodeSelector:
        #<labelname>:value
        cloud.google.com/gke-nodepool: pool-highcpu32
Run Code Online (Sandbox Code Playgroud)


Jos*_*ust 5

您也可以使用污点tolerations。这样,您不必知道/硬编码特定的池名称,而只需知道它会有taint high-cpu,例如。然后你让你的 pod容忍这种污点,他们可以在那个目标池上进行调度。

这允许您拥有多个池,或拥有 HA 池部署,您可以通过更改池上的污点从一个池迁移到另一个池。

然而,这里的问题是,虽然容忍允许 pod 在受污染的池上进行调度,但它不会阻止它们在其他地方进行调度。所以,你需要污点pool-ataint-a,并pool-btaint-b,并给出豆荚pool-apool-b正确的污点,让他们出海誓山盟的池。

  • 一个例子会让你的答案更有帮助。如果有人对此解决方案感兴趣(我认为它更好),请参阅 https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ (3认同)