マルチプール Kubernetes クラスターでポッドを管理する
Contoso の開発者は、社内で開発された Windows および Linux アプリケーションを、Helm チャートを使用してデプロイできる Docker ベースのイメージに変換する作業に取り組んでいます。 Azure Stack HCI に Kubernetes クラスターを実装する計画では、両方のオペレーティング システム プラットフォームに対するサポートを確認する必要があります。
Azure Stack HCI 上の Kubernetes クラスターのノード プールとは
AKS on Azure Stack HCI では、同じ Kubernetes クラスター内の複数のノード プールがサポートされています。 各プールは、そのプールのプロビジョニング時に指定した設定に従って、まったく同じに構成された VM から成ります。
ノードを別のプールにグループ化することで、ポッドのデプロイ先を適切な VM のセットにすることができます。 たとえば、Windows オペレーティング システムでのみサポートされるコンテナー化されたワークロードがある場合や、グラフィックス プロセッサ ユニットなどの特殊なハードウェアが必要な場合があります。
Azure Stack HCI 上の Kubernetes クラスターにあるノード プールへのポッドのデプロイを制御する
Kubernetes では既定で、リソースの使用率が最適化される形で、使用可能なすべてのワーカー ノードに対して、コンテナー化されたワークロードのプロビジョニングがスケジュールされます。 この動作を変更するため、指定するカスタム条件に基づいてノードの選択に制約を適用できます。 こうした制約には、ノード セレクターや、テイントと容認が含まれます。
ノードのセレクター
ノード セレクターは、対応するポッドをスケジュールできる対象のターゲット ノードを識別する、YAML ベースの定義内に記述するポッドまたはデプロイの設定です。 オペレーティング システムに基づいてターゲット ノードを指定することが目的の場合は、Kubernetes によってノードに自動的に割り当てられる組み込みのラベルを利用できます。 意図したオペレーティング システムに応じて、ノード セレクターは kubernetes.io/os = Windows
または kubernetes.io/os = Linux
の形式になります。 たとえば、次の YAML ベースのポッド マニフェストでは、Linux ノードをデプロイ ターゲットとして指定しています。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
kubernetes.io/os = Linux
テイントと容認
テイントと容認は、ポッドの配置を制御するための別の方法を提供するものです。 この方法では、テイントはノード構成の一部であり、容認はポッド仕様の一部です。 ノードをテイントすることで、対応するテイント固有の容認が指定されていないポッドがホストされることを効果的に防止します。
たとえば AKS on Azure Stack HCI で、ポッドが Windows ノードに対してスケジュールされるように許可する場合は、その定義に次の容認を追加する必要があります。
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
さらに、対応する容認が指定されたポッドのデプロイにのみ提供する Windows ノードそれぞれに、テイント node.kubernetes.io/os=Windows:NoSchedule
を追加する必要があります。 これを実現するために、kubectl コマンド ライン ユーティリティを使用し、その後、ターゲット クラスターに接続した後で、スコープ内の各ノードに対して次のコマンドを実行します (<node_name>
プレースホルダーの場所には、ターゲット ノードの名前を指定します)。
kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule
Note
ノード セレクターを使用すると、特定のノードのセットへのポッドの配置が強制されます。 容認を使用すると、指定されたテイント済みノードのセットでのポッドの実行は許可されますが、テイントされていないノードへのポッドの配置は防げません。