ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Kubernetesでいっぺんに複数のPodを作る

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