前回までの記事で、ACR/AKS デプロイ、リソースの作成、アプリケーションの実行、Pods への Label の割り当てを行いました。基本的に Pods の作成は マニフェストファイルの適用で実施しますが、実際に AKS アプリケーションをデプロイしていくと、Pod を動かす Node を明示的に設定するということが必要です。今回の記事は、その方法を見ていきます。
#クラスター内の Node を確認する
まずは、kubectl get node
コマンドを実行して、現在動いている Node を確認します。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
aks-nodepool1-XXXXXXXX-vmss000000 Ready agent 44h v1.13.12
aks-nodepool1-XXXXXXXX-vmss000001 Ready agent 44h v1.13.12
aks-nodepool1-XXXXXXXX-vmss000002 Ready agent 44h v1.13.12
上記のコマンドを実行した際に、NAME
の列に表示されているものが、Node の名前です。今回は明示的に aks-nodepool1-XXXXXXXX-vmss000002
に Pod を作成したいと思います。
#Node にラベルを割り当てる
kubectl label node aks-nodepool1-XXXXXXXX-vmss000002 server=webapp
を実行して、一台の Node にラベルを割り振ります。上記コマンドを実行したあとに、kubectl get node --show-labels
を実行することで、Node に割り振られている Label を確認することが可能です。
$ kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
aks-nodepool1-20426113-vmss000000 Ready agent 44h v1.13.12 XXXXXXXXXXXXXXXXXX
aks-nodepool1-20426113-vmss000001 Ready agent 44h v1.13.12 XXXXXXXXXXXXXXXXXX
aks-nodepool1-20426113-vmss000002 Ready agent 44h v1.13.12 XXXXXXXXXXXXXX,server=webapp,XXXXXXX
これで Node 側の準備は整いました。あとはマニュフェストファイルを編集して、指定したラベルが張られている Node に Pods を作成します。
#指定したラベルの付いた Node に Pod を作成する
まずは、マニフェストファイルを編集します。Pods を起動する node は spec:nodeSelector:server
の部分で設定します。今回は webapp
というラベルをしています。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: stage
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
server: webapp # webappというラベルの付いた Node に割り当てる
上記マニュフェスファイルを作成したら、kubectl apply -f labelsample.yaml
を実行し、 Pod を作成します。実行後、kubectl get pod --output=wide
で実行されている Pod を確認します。
$ kubectl get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 3m48s XX.XXX.X.XX aks-nodepool1-XXXXXXXX-vmss000002 <none> <none>
これで指定した Node に Pod が割り振られているのが確認できました。
次回はより深いところで、Pod に必要なメモリ / CPU を割り当てる方法についてみていきたいと思います。
#参考 URL
Assigning Pods to Nodes
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/