Member-only story

Kubernetes node affinity: 特定のノードにポッドを配置する方法

gavin.zhou
6 min readAug 27, 2020

--

Kubernetesクラスタ内の特定のノードでアプリケーションを実行する必要がある場合というのがあります。例えば、クラスタ内のどのノードよりも多くのリソースを必要とするアプリケーションです。この場合、新しいノードを作成し、その中にアプリケーションを配置する必要があります。

では、それをどのように実行すればいいのでしょうか?Kubernetesでは、自分で決めた特定のノードにポッドを割り当てることができるようになるのでしょうか?もちろん、そうです。しかし、そのためにはKubernetesのスケジューラに少しだけインプットを与える必要があります。Kubernetesのスケジューラは、異なるオプションを使って、特定のノードにポッドを配置するように制約をかけることができます。

  1. Node Selector
  2. Node Affinity
  3. Pod Affinity
  4. Taints and Tolerations

この記事では、ハードルールかソフトルールのどちらかで特定のノードにポッドを配置することができるので、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:

--

--

No responses yet