ポッドを特定のインスタンスプールにのみデプロイする必要があることをkubectlに伝える方法はありますか?
例えば:
nodeSelector:
pool: poolname
私がすでに私のようなもので私のプールを作成したと仮定します:
gcloud container node-pools create poolname --cluster=cluster-1 --num-nodes=10 --machine-type=n1-highmem-32
わかりました、私は解決策を見つけました:
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
taintsおよびtolerationsを使用することもできます。そうすれば、特定のプール名を知っている/ハードコードする必要はありませんが、たとえばtainthigh-cpu
が含まれるだけです。次に、ポッドにその汚染に対してtoleranceを指定します。ポッドはそのターゲットプールでスケジュールできます。
これにより、複数のプールを使用したり、HAプールをデプロイしたりできます。プールの汚染を変更することで、あるプールから別のプールに移行できます。
ただし、ここでのgotchaは、許容によってポッドが汚染されたプールでスケジュールできるようにする一方で、ポッドが他の場所でスケジュールすることを妨げないということです。したがって、pool-a
をtaint-a
で汚染し、pool-b
をtaint-b
で汚染し、pool-a
とpool-b
のポッドを適切にする必要があります。お互いのプールからそれらを保つために汚染。