kuberenetsで複数のコンテナを複数クラスタ上で運用すると、リソースの関係などで特定のコンテナ(Pod)だけ特定のホストで実行したいケースがある。
label機能を使うことで実現できる。
参照) Constraining pods to run on particular nodes
http://kubernetes.io/docs/user-guide/node-selection/
#host(minion node)にlabelを付ける
初期状態として以下のworker(minion) nodeとする
$ kubectl get nodes
NAME LABELS STATUS AGE
ip-172-31-25-70 kubernetes.io/hostname=ip-172-31-25-70 Ready 1m
ip-172-31-25-72 kubernetes.io/hostname=ip-172-31-25-72 Ready 1m
それぞれのホストにlabelを付与する
kubectl label nodes ip-172-31-25-70 type=app1
kubectl label nodes ip-172-31-25-72 type=app2
※上書きするときは--overwrite オプションを付ければ良い。
任意のkey=value形式で、例ではtype=app1、app2とそれぞれ付与した。
以下のようにlabelが付与されていることが確認できる。
$ kubectl get nodes
NAME LABELS STATUS AGE
ip-172-31-25-70 kubernetes.io/hostname=ip-172-31-25-70,type=app1 Ready 31m
ip-172-31-25-72 kubernetes.io/hostname=ip-172-31-25-72,type=app2 Ready 31m
※バージョンによっては kubectl get node -L type
で確認
#Pod/RC(or Replica Set/Deployment)にlabelを付与する
yamlファイルのspecにて nodeSelectorを追記。
以下はReplication Controllerのyaml設定例。
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
nodeSelector:
type: app2
上記ではtype=app2のlabelを付与したホスト(ip-172-31-25-72)に限定することを意味する。
#動作確認
RCを起動して、Podが指定したホストのみで起動されることを確認。
$ kubectl create -f test.yaml
以下の通り、type=app2のlabelを付与したホスト(ip-172-31-25-72)へのみアサインされていることがわかる。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-5w09v 1/1 Running 0 17m ip-172-31-25-72
nginx-mf4l7 1/1 Running 0 20m ip-172-31-25-72
nginx-p79e9 1/1 Running 0 17m ip-172-31-25-72
試しにyamlファイルのreplicasを3から5に変更してapplyすると、新たに2つのPodが追加され、かつtype=app2のlabelを付与したホスト(ip-172-31-25-72)へのみアサインされていることがわかる。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx-5w09v 1/1 Running 0 17m ip-172-31-25-72
nginx-mf4l7 1/1 Running 0 20m ip-172-31-25-72
nginx-p79e9 1/1 Running 0 17m ip-172-31-25-72
nginx-r7dmc 1/1 Running 0 20m ip-172-31-25-72
nginx-yu0r3 1/1 Running 0 20m ip-172-31-25-72