Member-only story
Kubernetes node affinity: 特定のノードにポッドを配置する方法
Kubernetesクラスタ内の特定のノードでアプリケーションを実行する必要がある場合というのがあります。例えば、クラスタ内のどのノードよりも多くのリソースを必要とするアプリケーションです。この場合、新しいノードを作成し、その中にアプリケーションを配置する必要があります。
では、それをどのように実行すればいいのでしょうか?Kubernetesでは、自分で決めた特定のノードにポッドを割り当てることができるようになるのでしょうか?もちろん、そうです。しかし、そのためにはKubernetesのスケジューラに少しだけインプットを与える必要があります。Kubernetesのスケジューラは、異なるオプションを使って、特定のノードにポッドを配置するように制約をかけることができます。
この記事では、ハードルールかソフトルールのどちらかで特定のノードにポッドを配置することができるので、2つ目の方法に注目します。ハードルールとは、指定されたノードにポッドを配置するためには、条件を満たさなければならないことを意味します。ソフトルールとは、スケジューラが制約を満たせなくても、ポッドは別のノードに配置されることを意味します。つまり、スケジューラは強制しようとしますが、我々のスケジューリング制約を満たすことは保証しないということです。
ノードアフィニティ機能を利用して、特定のノードにポッドを配置する方法を説明します。
1.クラスタ内のノードをラベルと一緒にリストアップする:
kubectl get nodes --show-labels
2.アプリケーションを実行したいノード(1つもしくは複数)を選択し、そのノードにラベルを追加する。
kubectl label nodes <node-name> <label-key>=<label-value>
ノードをマークするためのキーと値のペアは自由に選ぶことができます。ここでは、「type:t2medium 」をノードのキーと値のペアのサンプルとして使用します。
3.ここで、選択したノードにスケジュールされるポッドを作成する必要が出てきた。
loyment yaml ファイルをクラスタに送信し、選択したノードでポッドが実行されていることを確認する。
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec: