マルチプール 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

ノード セレクターを使用すると、特定のノードのセットへのポッドの配置が強制されます。 容認を使用すると、指定されたテイント済みノードのセットでのポッドの実行は許可されますが、テイントされていないノードへのポッドの配置は防げません。

知識チェック

1.

Contoso は、Windows および Linux のコンテナー化されたワークロードを AKS on Azure Stack HCI にデプロイすることを計画しています。 あなたは、Windows ベースのポッドが、Windows を実行している Kubernetes クラスター ノードに確実にデプロイされるようにする手順を文書化する必要があります。 この目的のため、あなたはテイントと容認を使用することを決めました。 テイントは、どのクラスター コンポーネントに適用する必要がありますか?