

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
nodeaffinityとは
nodeaffinityは Kubernetes の機能で Podを特定のノードへ割り当てる条件を設定する仕組みです。Kubernetes のスケジューラは常にどのノードで Pod を動かすかを決めますが nodeaffinity を使うと動かす場所を詳しく指定できます。
Kubernetes ではまず Pod を走らせる場所を決めるのがスケジューラの仕事です。ノードには ラベル と呼ばれる情報を自由に付けることができ、それを使って Pod を配置します。nodeaffinity を使うと「このPodは region=us-east のノードだけ」「このPodは disk=ssd のノードだけ」といった条件を作れるのです。
ノードのラベルは key=value の形で設定します。よく使われる例として region=us-east や disk=ssd などがあります。ラベルを工夫しておくと、後で Pod の配置を柔軟に変えられます。
nodeaffinity の2つのタイプ
最初に理解したいのは nodeaffinity には2つのタイプがあるという点です。
1) requiredDuringSchedulingIgnoredDuringExecution は「スケジューリング時に厳密に条件を満たすノードが見つからないと Pod を割り当てません」という意味です。つまりこの条件を満たすノードが見つかったときだけ Pod が置かれます。実行中に条件が変わっても Pod は自動で他のノードへ移動しません。
2) preferredDuringSchedulingIgnoredDuringExecution は「条件を満たす可能性が高いノードを優先して選ぶ」設定です。条件を満たすノードが少ないときは必須条件ほど厳しくはなく、別のノードにも割り当てられることがあります。
具体的な使い方のイメージ
例えば region=us-east かつ disk=ssd のノードだけに Pod を置きたい場合、上の2つのタイプを組み合わせて使います。必須条件として region=us-east と disk=ssd の2条件を同時に満たすノードだけを許可し、実行時に別のノードにも移動されることがないようにします。実務ではこのような組み合わせを使って高い信頼性と効率を両立させます。
設定の仕組みのイメージ
nodeAffinity の設定は Pod の spec の中に置くことになります。実際の YAML を書くときはわかりやすく「region と disk の両方を満たすノードを探す」ようにします。ここで重要なのは ラベルの命名と一貫性 です。ラベル名を region と disk に決めたら、すべてのノードで同じ名前のラベルを付けておくと混乱を避けられます。
| 項目 | 説明 | 例 |
|---|---|---|
| ノードラベル | ノードに付ける識別情報。key=value の組み合わせ | region=us-east、disk=ssd |
| 種類 | 必須条件と任意条件の2つ | 必須 region=us-east |
| 実行時の挙動 | 条件を満たすノードを優先して選ぶ | region=us-east のノードが多い場合は割り当てられる |
実務のコツとしてはまず小さな環境で試すこと、ラベルを整理しておくこと、kubectl でノードのラベルを確認することです。ノードラベルの確認は kubectl get nodes --show-labels や describe コマンドを使います。新しいラベルを追加するときは 慎重に名前を決め、他の人が混乱しないように命名規則を決めておくと良いでしょう。
最後に nodeaffinity は Pod の配置を細かく制御できる強力な機能です。適切に使えばリソースの偏りを防ぎ、特定のノードだけで重要なアプリを動かすといった運用が可能になります。最初は学ぶべき点が多いですが、基本を押さえれば初心者でも安全に活用できます。
nodeaffinityの同意語
- ノードアフィニティ
- Kubernetes などのコンテナオーケストレーションで、Pod を特定のノードに割り当てる際の条件。ノードのラベルに基づくスケジューリングを指定する機能。
- ノード親和性
- Pod を配置するノードを決める際の“親和性”という考え方を表す日本語表現。ノードのラベル条件に基づく配置ルールのこと。
- ノードセレクター
- 古い仕組みでノードを選ぶ条件(nodeAffinity の前身とされることが多い)。ノードのラベルに基づく配置先を指定する概念。
- ノードラベルベースのスケジューリング条件
- ノードのラベルを使って Pod の配置先を決める条件のこと。ノードアフィニティの核心となる考え方。
- ノード割り当て条件
- Pod をどのノードへ割り当てるかを決定する条件。ラベル条件を基にするスケジューリングの一部。
- ノード配置制約
- Pod の配置をノードの特定条件で制約するルール。ノードアフィニティによる配置のガイドラインを指す表現。
nodeaffinityの対義語・反対語
- ノードアフィニティなし
- ノードのラベルに基づく制約を一切設定せず、どのノードにもポッドをスケジュールできる状態。
- ノード非依存スケジューリング
- 特定のノード属性に依存せず、任意のノードへ割り当てられる考え方。
- 自由スケジューリング
- ノードの条件を緩和して、制約なしでスケジュールすることを意味する表現。
- 制約なしノード選択
- ノードを選ぶ際の条件(ラベル制約など)を設けず、全ノードを候補にする状態。
- ノードセレクターなし
- NodeSelectorの条件を使わず、全ノードがスケジューリング候補になる状態。
- 全ノード許容
- どのノードも受け入れ可能として、特定ノードに偏らないスケジューリングの考え方。
nodeaffinityの共起語
- nodeAffinity
- Podを特定のノード上で実行するため、ノードのラベル条件に基づいて割り当てる設定。必須条件として使う場合と、優先度として使う場合がある。
- nodeSelector
- 従来のノード選択方式。spec.nodeSelector によって、ラベルが一致するノードへPodを割り当てる。
- matchExpressions
- nodeAffinity 内で使われる条件表現の集合。key(ラベル名)・operator(In/NotIn/Exists/DoesNotExist など)・values(許可される値のリスト)で判定。
- requiredDuringSchedulingIgnoredDuringExecution
- スケジュール時に必須となる条件。Podがこの条件を満たすノードにのみ配置されるが、実行時にはこの条件は再評価されない。
- preferredDuringSchedulingIgnoredDuringExecution
- スケジュール時の優先条件。満たすノードを優先的に選ぶが、必ず守られるわけではない。
- topologyKey
- ノードをグルーピングする基準となるラベルキー。例: kubernetes.io/hostname。トップロジーごとの分散を制御するために使う。
- taints
- ノードに付与される拒否条件。taint があるとポッドは通常配置されにくく、toleration が必要。
- tolerations
- ポッドが taints を許容して、制約のあるノードへ配置されるようにする設定。
- podAffinity
- 他の Pod と同じノードや近接したノードでの配置を優先するアフィニティルール。
- podAntiAffinity
- 他の Pod と距離を取って配置することを指示する反アフィニティルール。
- labels
- ノードや Pod に付けるラベル。スケジューリングの条件を表す基本的な要素。
- labelSelector
- ラベルを用いて対象を絞り込む条件。Pod やノードを選択するのに使うセレクタ。
- matchLabels
- ラベルの完全一致条件。複数の key:value の組み合わせでマッチを判定。
- Kubernetes
- コンテナ化されたアプリをクラスタで運用するオーケストレーションツール。nodeAffinity などの機能を提供。
- scheduler
- Pod をノードへ割り当てる役割を担う Kubernetes のコンポーネント(スケジューラ)。
- Node
- Kubernetes の実際の計算ノード。Pod が実行される場所。
- NodeSelectorTerms
- nodeAffinity の条件集合。いくつかの terms のいずれかを満たせば良い。
- topologySpreadConstraints
- 複数の topologyKey(例: zone, region)に基づいて Pod を広く分散させる制約。可用性の向上を狙う設定。
- operator
- matchExpressions で使われる演算子(In、NotIn、Exists、DoesNotExist など)。
- values
- matchExpressions の values フィールドに指定する値のリスト。
nodeaffinityの関連用語
- nodeaffinity
- KubernetesでPodを実行するノードを、ノード上のラベルに基づいて選ぶ機能の総称。
- NodeAffinity
- PodSpecの一部として書くノード選択条件。ノードのラベルと一致するノードへPodを配置します。
- requiredDuringSchedulingIgnoredDuringExecution
- スケジューリング時に必須となる厳密な条件。すべての条件を満たすノードが見つかった場合のみ配置。実行時には再評価されません。
- preferredDuringSchedulingIgnoredDuringExecution
- スケジューリング時に優先度を与える条件。必須ではないが、より適したノードを選ぶ手掛かりになります。実行時には再評価されません。
- nodeSelector
- 旧式のノード選択方法。key=value形式のラベルマッチでノードを選びます。現在はNodeAffinityが推奨されます。
- nodeSelectorTerms
- nodeSelectorの複数条件を組み合わせる区分。Termsはいずれか一つに一致すればOK(論理OR)。
- matchExpressions
- ラベル条件を表す表現。key, operator, valuesを使い、In/NotIn/Exists/DoesNotExistなどの演算子を使います。
- matchFields
- ノードのフィールドに対する条件表現。例: metadata.nameなどを使います。
- labels
- ノードやPodに付けるキーと値のペア。識別子としてスケジューリングの判断基準になります。
- taints
- ノードに対する拒否条件。特定のPodだけを許可する仕組みで、ノードの受け入れ可能性を制御します。
- tolerations
- Pod側の設定で、特定のtaintを許容すること。これによりtaintされたノードにもPodを配置できます。
- taintEffect
- taintの効果。NoSchedule(スケジューラを拒否)、PreferNoSchedule、NoExecuteなど。
- topologyKey
- トポロジー単位を示すキー。zone, regionなど、配置の分散・近接を決める基準になります。
- topologySpreadConstraints
- ノード間でPodを均等・適切に分布させる制約。指定した topologyKey に基づき広く配置します。
- PodAffinity
- 他のPodを近くに配置したい場合の制約。ラベルを基に近接配置を試みます。
- PodAntiAffinity
- 他のPodと離して配置したい場合の制約。隣接を避ける配置を支援します。
- Kubernetes Scheduler
- Podを実際にどのノードへ配置するかを決めるコアコンポーネント。NodeAffinityやtaintsなどを考慮します。
- Node
- Kubernetesクラスタ内の実行ノード。実際の物理/仮想マシンで、Podを実行します。
- Pod
- Kubernetesの実行単位。1つ以上のコンテナを含み、Node上で動作します。
- LabelSelector
- ラベルを用いた絞り込み条件の表現。PodやNodeを対象に使われます。



















