この記事はKubernetes 1.11で確認しています。
Kubernetesでいっぺんに複数のPodを作るには「---」でYAMLを仕切って書いていくだけです。 以下のYAMLにより、「2つのWorkerノードにだたのPodを作る、GPUアプリをデプロイするPodを作る」の3つの作業をいっぺんに行うことができます。
nodeSelectorでKubernetes Workerノードをラベルで指定しています。ノードに対するラベルはkubectl get node --show-labelsで確認できます。おそらくkubernetes.io/hostnameというラベルがデフォルトで定義されているはずです。
apiVersion: v1
kind: Pod
metadata:
name: hello-world1
spec:
containers:
- name: busybox
image: busybox
tty: true
nodeSelector:
kubernetes.io/hostname: bay5
---
apiVersion: v1
kind: Pod
metadata:
name: hello-world2
spec:
containers:
- name: busybox
image: busybox
tty: true
nodeSelector:
kubernetes.io/hostname: 110g9
---
apiVersion: v1
kind: Pod
metadata:
name: gpu-hello-world
spec:
containers:
- name: cuda
image: nvidia/cuda:9.0-base
tty: true
nodeSelector:
kubernetes.io/hostname: 110g9
Podをいっぺんに作ります。
% kubectl create -f create-testpod.yml pod/hello-world1 created pod/hello-world2 created pod/gpu-hello-world created % kubectl get -f create-testpod.yml NAME READY STATUS RESTARTS AGE hello-world1 1/1 Running 0 16s NAME READY STATUS RESTARTS AGE hello-world2 1/1 Running 0 16s NAME READY STATUS RESTARTS AGE gpu-hello-world 1/1 Running 0 16s
NVIDIA-SMIを出力してみます。GPUの情報が出力されるはずです。
% kubectl exec -it gpu-hello-world -- nvidia-smi (NVIDIA-SMIの結果が表示される)
終わったらPodを片付けます。
% kubectl delete -f create-testpod.yml pod "hello-world1" deleted pod "hello-world2" deleted pod "gpu-hello-world" deleted (いっぺんにPodが消えますが、GPUリソースの開放だけ少々時間を要します)
これで、普通のアプリを動かすためのPodが作れるか、GPUが扱えるPodが作れるか確認できます。