Kubernetes nodeSelector の使用方法

Kubernetes Nodeselector No Shi Yong Fang Fa



Kubernetes クラスターは、taints、labels、tolerations、nodeSelector などのスケジューリング制約を使用して、異なるノード プールでワークロードを分離およびスケジュールします。スケジューリングの制約は、インフラストラクチャ管理のための Kubernetes の一般的な要件です。この記事では、nodeSelector のスケジュール制約に焦点を当てます。 nodeSelector とは何か、どのように機能するか、Kubernetes でどのように使用できるかを探ります。 Kubernetes nodeSelector を効率的に使用する方法を理解するのに役立つ簡単なシナリオを紹介します。

Kubernetes nodeSelector とは何ですか?

nodeSelector は、キーの形式でマップを指定する Kubernetes のスケジューリング制約です。値のペア カスタム ポッド セレクターとノード ラベルを使用して、キーと値のペアを定義します。特定の Pod を特定のノードで実行できるように、ノードでラベル付けされた nodeSelector はキーと値のペアと一致する必要があります。 Pod をスケジュールするには、ノードでラベルが使用され、Pod で nodeSelector が使用されます。 OpenShift Container Platform は、nodeSelector を使用してラベルを照合し、ノードで Pod をスケジュールします。

さらに、特定のノードでどのポッドをスケジュールするかを制御するために、ラベルと nodeSelector が使用されます。ラベルと nodeSelector を使用する場合は、最初にノードにラベルを付けて Pod のスケジュールが解除されないようにしてから、nodeSelector を Pod に追加します。特定のノードに特定のポッドを配置するには、nodeSelector が使用されますが、クラスター全体の nodeSelector を使用すると、クラスター内の任意の場所に存在する特定のノードに新しいポッドを配置できます。プロジェクト nodeSelector は、プロジェクト内の特定のノードに新しいポッドを配置するために使用されます。







前提条件

Kubernetes nodeSelector を使用するには、システムに次のツールがインストールされていることを確認してください。



  • Ubuntu 20.04 またはその他の最新バージョン
  • 少なくとも 1 つのワーカー ノードを持つ Minikube クラスター
  • kubectl コマンドライン ツール

次のセクションでは、Kubernetes クラスターで nodeSelector を使用する方法を示します。



Kubernetes での nodeSelector の構成

nodeSelector を使用して、特定のノードでのみ実行できるように Pod を制限できます。 nodeSelector は、Pod 仕様の PodSpec で指定されているノード選択の制約です。簡単に言うと、nodeSelector は、ユーザーが nodeSelector ラベルに指定したのと同じラベルを持つノードで Pod をスケジュールするように Pod を制御できるスケジューリング機能です。 Kubernetes で nodeSelector を使用または構成するには、minikube クラスターが必要です。以下のコマンドで minikube クラスターを起動します。





> ミニキューブを始める

minikube クラスターが正常に開始されたので、Kubernetes で nodeSelector の構成の実装を開始できます。このドキュメントでは、nodeSelector を使用しないデプロイと nodeSelector を使用するデプロイの 2 つのデプロイを作成する方法を説明します。



nodeSelector なしで展開を構成する

まず、以下のコマンドを使用して、クラスターで現在アクティブなすべてのノードの詳細を抽出します。

> kubectl でノードを取得

このコマンドは、クラスター内に存在するすべてのノードを、名前、ステータス、役割、年齢、およびバージョン パラメーターの詳細と共に一覧表示します。以下のサンプル出力を参照してください。

ここで、クラスター内のノードでどのテイントがアクティブになっているかを確認し、それに応じてノードにポッドをデプロイする計画を立てることができます。以下のコマンドは、ノードに適用されたテイントの説明を取得するために使用されます。 Pod をノードに簡単にデプロイできるように、ノード上でアクティブなテイントがあってはなりません。それでは、次のコマンドを実行して、クラスターでアクティブなテイントを確認してみましょう。

> kubectl describe nodes ミニキューブ | | グリップ 汚染

上記の出力から、ノードにテイントが適用されていないことがわかります。ノードにポッドをデプロイするために必要なものだけです。次のステップは、nodeSelector を指定せずにデプロイメントを作成することです。さらに言えば、nodeSelector 構成を保存する YAML ファイルを使用します。ここに添付されたコマンドは、YAML ファイルの作成に使用されます。

> ナノ deplond.yaml

ここでは、nano コマンドで deplond.yaml という名前の YAML ファイルを作成しようとしています。

このコマンドを実行すると、デプロイ構成を保存する deplond.yaml ファイルが作成されます。以下の展開構成を参照してください。

次に、配置構成ファイルを使用して配置を作成します。 deplond.yaml ファイルは、構成を作成するために「create」コマンドとともに使用されます。以下に示す完全なコマンドを参照してください。

> kubectl 作成 -f deplond.yaml

上記のように、デプロイメントは正常に作成されましたが、nodeSelector はありません。次に、以下のコマンドを使用して、クラスターで既に使用可能なノードを確認しましょう。

> kubectl でポッドを取得

これにより、クラスターで使用可能なすべてのポッドが一覧表示されます。以下の出力を参照してください。

  自動生成されたテキスト説明

次に、deplond.yaml ファイルを編集して、レプリカの数を変更する必要があります。 deplond.yaml ファイルを開いて、レプリカの値を編集するだけです。ここでは、レプリカ: 3 をレプリカ: 30 に変更しています。以下のスナップショットの変更を参照してください。

次に、デプロイメント定義ファイルからデプロイメントに変更を適用する必要があります。これは、次のコマンドを使用して実行できます。

> kubectl 適用 -f deplond.yaml

  自動生成されたテキスト説明

次に、-o wide オプションを使用してポッドの詳細を確認しましょう。

> kubectl でポッドを取得 -ザ

  自動生成されたテキスト説明

上記の出力から、クラスターから使用しているノードでアクティブなテイントがないため、新しいノードが作成され、ノードでスケジュールされていることがわかります。したがって、ポッドが目的のノードでのみスケジュールされるようにするには、特にテイントを有効にする必要があります。そのためには、マスター ノードにラベルを作成する必要があります。

> kubectl ラベル ノード マスター on-master= 真実

nodeSelector でデプロイを構成する

nodeSelector を使用してデプロイメントを構成するには、nodeSelector を使用せずにデプロイメントを構成する場合と同じプロセスに従います。

まず、展開の構成を保存する必要がある「nano」コマンドを使用して YAML ファイルを作成します。

> ナノ nd.yaml

ここで、デプロイメント定義をファイルに保存します。両方の構成ファイルを比較して、構成定義の違いを確認できます。

次に、以下のコマンドを使用して nodeSelector のデプロイメントを作成します。

> kubectl 作成 -f nd.yaml

-o wide フラグを使用して、ポッドの詳細を取得します。

> kubectl でポッドを取得 -ザ

  テキスト、カレンダー 説明は中程度の信頼度で自動生成

上記の出力から、ポッドが minikube ノードにデプロイされていることがわかります。レプリカの数を変更して、新しいポッドがクラスター内のどこにデプロイされるかを確認しましょう。

次のコマンドを使用して、デプロイに新しい変更を適用します。

> kubectl 適用 -f nd.yaml

  自動生成されたテキスト説明

結論

この記事では、Kubernetes における nodeSelector 構成の制約の概要を説明しました。 Kubernetes の nodeSelector とは何かを学び、簡単なシナリオを使用して、nodeSelector 構成の制約がある場合とない場合でデプロイを作成する方法を学びました。 nodeSelector の概念に慣れていない場合は、この記事を参照して、すべての関連情報を見つけることができます。