この記事は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が作れるか確認できます。