混合 OS Kubernetes クラスターでの使用のためにアプリケーションを適応させる
適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server
Azure Arc で有効になっている AKS を使用すると、Linux ノードと Windows ノードの両方で Kubernetes クラスターを実行できますが、これらの混合 OS クラスターで使用するには、アプリを小さな編集を行う必要があります。 この攻略ガイドでは、ノード セレクターまたはテイントと容認のどちらかを使用して、適切なホスト OS 上でアプリケーションが確実にスケジュールされるようにする方法について説明します。
この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「 Kubernetes core concepts for AKS enabled by Arc」を参照してください。
ノードのセレクター
ノード セレクターは、ポッド仕様 YAML の単純なフィールドであり、ポッドがオペレーティング システムに一致する正常なノードにのみスケジュールされるように制限します。 ポッド仕様 YAML で、次の例に示すように、Windows または Linux の値を指定 nodeSelector
します。
kubernetes.io/os = Windows
または、
kubernetes.io/os = Linux
nodeSelectors の詳細については、「 ノード セレクター」を参照してください。
テイントと容認
テイントと容認は、連携動作して、ポッドが意図せずノードにスケジュールされないようにします。 ノードを "テイント" して、ポッド仕様 YAML の "容認" によってテイントを明示的に許容しないポッドを拒否できます。
AKS Arc の Windows OS ノードは、 New-AksHciNodePool または New-AksHciCluster コマンドを使用して作成するときにテイントできます。 これらのコマンドを使用して、Linux OS ノードをテイントすることもできます。 次の例では、Windows ノードをテイントします。
新しいクラスターにテイントを適用する
新しいクラスターも作成する場合は、次のコマンドを実行して、テイントを使用して Windows ノード プールを作成します。 テイントを使用してノード プールを追加する既存のクラスターがある場合は、コマンドを使用する次の例を New-AksHciNodePool
参照してください。
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
既存のクラスターにテイント ノード プールを追加する
既存のクラスターにテイントされたノード プールを追加するには、次のコマンドを実行します。
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
次のコマンドを実行して、テイントでノード プールが正常にデプロイされたことを確認します。
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
出力例:
Status : {Phase, Details}
ClusterName : mycluster
NodePoolName : taintnp
Version : v1.20.7-kvapkg.1
OsType : Windows
NodeCount : 0
VmSize : Standard_K8S3_v1
Phase : Deployed
Taints : {sku=Windows:NoSchedule}
ポッドの容認を指定する
ポッドの容認は、ポッド仕様 YAML で指定できます。 次の容認は、前の例で示したテイント線によって kubectl
作成されたテイントと "一致" します。 その結果、容認を持つポッドは、テイントされたノードにスケジュールできます。
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
このセクションの手順は、デプロイするポッド スペックを制御している場合に適切に機能します。 しかし、状況によっては、たくさんの Linux コンテナー用デプロイがユーザーに事前に設定されていたり、コミュニティ Helm チャートなどの一般的な構成のエコシステムが存在したりすることがあります。 グラフをダウンロードして編集しない限り、ポッド スペックにアクセスすることはできません。
これらの Helm チャートを Linux と Windows の両方のワーカー ノードを含む混合クラスター環境にデプロイした場合、アプリケーション ポッドは "ImagePullBackOff" というエラーで失敗します。 例:
kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-deployment-558fc78868-795dp 0/1 ImagePullBackOff 0 6m24s
default nginx-deployment-6b474476c4-gpb77 0/1 ImagePullBackOff 0 11m
この例では、 テイントを 使用してこれを支援できます。 Windows Server ノードは、キーと値のペア node.kubernetes.io/os=windows:NoSchedule
でテイントできます。
テイントと容認の詳細については、「 テイントと容認」を参照してください。
次の手順
この攻略ガイドでは、kubectl を使用して、Kubernetes クラスターにノード セレクターまたはテイントと容認を追加する方法について説明しました。 次に、以下を実行できます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示