web-dev-qa-db-ja.com

Kubernetesがポッドをプールに割り当てる

ポッドを特定のインスタンスプールにのみデプロイする必要があることをkubectlに伝える方法はありますか?

例えば:

nodeSelector:
      pool: poolname

私がすでに私のようなもので私のプールを作成したと仮定します:

gcloud container node-pools create poolname --cluster=cluster-1 --num-nodes=10 --machine-type=n1-highmem-32
19
PlagTag

わかりました、私は解決策を見つけました:

gcloudはプール名のラベルを作成します。私のマニフェストでは、ノードセレクターの下にドロップしました。非常に簡単。

これが私のmanifest.yamlです:ipyparallelをkubernetesでデプロイします

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
34
PlagTag

taintsおよびtolerationsを使用することもできます。そうすれば、特定のプール名を知っている/ハードコードする必要はありませんが、たとえばtainthigh-cpuが含まれるだけです。次に、ポッドにその汚染に対してtoleranceを指定します。ポッドはそのターゲットプールでスケジュールできます。

これにより、複数のプールを使用したり、HAプールをデプロイしたりできます。プールの汚染を変更することで、あるプールから別のプールに移行できます。

ただし、ここでのgotchaは、許容によってポッドが汚染されたプールでスケジュールできるようにする一方で、ポッドが他の場所でスケジュールすることを妨げないということです。したがって、pool-ataint-aで汚染し、pool-btaint-bで汚染し、pool-apool-bのポッドを適切にする必要があります。お互いのプールからそれらを保つために汚染。

4
Joseph Lust