Azure Kubernetes Service(AKS)ノードプールのノード構成をカスタマイズする

ノード構成をカスタマイズすることで、ワークロードのニーズに合わせてオペレーティング システム (OS) の設定または kubelet パラメーターを調整できます。 AKS クラスターを作成するか、クラスターにノード プールを追加すると、一般的に使用される OS と Kubelet の設定のサブセットをカスタマイズできます。 このサブセット以外の設定を構成するには、 デーモン セットを使用して、ノードの AKS サポートを失うことなく、必要な構成をカスタマイズします。

Prerequisites

サービスによって新しい設定と kubelet パラメーターのサポートが追加されるため、プレビュー機能フラグの登録が必要になる場合があります。 プレビュー フラグが必要な場合は、 カスタム ノード構成パラメーター参照 によって呼び出されます。

kubelet 設定の kubeReserved と hardEvictionThreshold のプレビュー要件

重要

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。

aks-preview Azure CLI 拡張機能をインストールする

  1. aksプレビュー拡張機能をインストールして、次のコマンドを実行します:

    az extension add --name aks-preview
    
  2. 次のコマンドを実行して、最新バージョンの拡張機能に更新します。

    az extension update --name aks-preview
    

プレビュー CustomNodeConfigPreview および kubeReserved kubelet 設定を使用する前に、Azure サブスクリプションに hardEvictionThreshold 機能フラグを登録してください。

CustomNodeConfigPreview フィーチャーフラグを登録する

  1. CustomNodeConfigPreview コマンドを使用して、az feature register機能フラグを登録します。

    az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    

    状態が [登録済み] と表示されるまでに数分かかります。

  2. az feature show コマンドを使用して、登録状態を確認します。

    az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    
  3. 状態がRegisteredと表示されたら、 コマンドを使用して、az provider register リソース プロバイダーの登録を更新します。

    az provider register --namespace "Microsoft.ContainerService"
    

AKS ノード プール用のカスタム ノード構成ファイルを作成する

OS と kubelet の構成を変更するには、必要なパラメーターと設定を含む新しい構成ファイルを作成します。 パラメーターの値を指定しない場合は、既定値が使用されます。

Note

次の例は、一般的な構成設定を示しています。 ワークロードの要件を満たすように設定を変更します。 サポートされているカスタム構成パラメーターの完全な一覧については、「 AKS のカスタム ノード構成パラメーター」を参照してください。

Kubelet の構成

次の内容を持つ新しいファイル linuxkubeletconfig.json を作成します。

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

Linux ノード プールでノード カスタマイズ プレビュー kubelet 設定を使用するには、kubelet 構成ファイルに kubeReserved と hardEvictionThreshold を追加します。 次の例では、Kubernetes システム デーモンの CPU とメモリを予約し、kubelet ハード削除しきい値を構成します。

{
  "cpuManagerPolicy": "static",
  "kubeReserved": {
    "cpuMillicores": 200,
    "memoryMB": 1024
  },
  "hardEvictionThreshold": {
    "memoryAvailable": "20%",
    "nodeFsAvailable": "10%",
    "nodeFsInodesFree": "5%"
  }
}

kubeReservedとhardEvictionThresholdは、Linux ノード プールでのみ使用します。 どちらの設定でも、 CustomNodeConfigPreview 機能フラグが必要です。

OS 構成

次の内容を持つ新しいファイル linuxosconfig.json を作成します。

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

カスタム構成ファイルを使用して AKS クラスターを作成する

Note

新しい AKS クラスターを作成するときにカスタム構成ファイルを使用する場合は、次の情報に注意してください。

  • クラスターの作成時に構成を指定した場合、構成は初期ノード プール内のノードにのみ適用されます。 クラスターは、JSON ファイルで構成されていない設定の既定値を保持します。
  • CustomLinuxOsConfig は、Windows OS の種類ではサポートされていません。
  • プレビュー kubeReserved と hardEvictionThreshold kubelet の設定は、Linux ノード プールでのみサポートされており、 CustomNodeConfigPreview 機能フラグが必要です。 クラスターまたはノード プールを作成する前に、kubeReservedと hardEvictionThreshold kubelet 設定のプレビュー要件の登録手順を完了します。

az aks create コマンドを実行し、--kubelet-configパラメーターと--linux-os-config パラメーターに構成ファイルを指定して、カスタム構成ファイルを使用して新しいクラスターを作成します。 次のコマンド例では、カスタムの ./linuxkubeletconfig.json ファイルと ./linuxosconfig.json ファイルを使用して新しいクラスターを作成します。

az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

カスタム構成ファイルを使用してノード プールを追加する

Note

カスタム構成ファイルを使用して新しいノード プールを既存の AKS クラスターに追加する場合は、次の情報に注意してください。

  • 既存のクラスターに Linux ノード プールを追加する場合は、Kubelet 構成、OS 構成、またはその両方を指定できます。 Windows ノード プールを既存のクラスターに追加する場合、kubelet 構成のみを指定できます。 ノード プールを追加するときに構成を指定した場合、構成は新しいノード プール内のノードにのみ適用されます。 ノード プールは、JSON ファイルで構成されていない設定の既定値を保持します。
  • CustomKubeletConfig は、Linux および Windows のノード プールでサポートされています。
  • プレビュー kubeReserved と hardEvictionThreshold kubelet の設定は、Linux ノード プールでのみサポートされており、 CustomNodeConfigPreview 機能フラグが必要です。 クラスターまたはノード プールを作成する前に、kubeReservedと hardEvictionThreshold kubelet 設定のプレビュー要件の登録手順を完了します。

az aks nodepool add コマンドを使用し、--kubelet-configおよび--linux-os-configパラメーターの構成ファイルを指定して、新しい Linux ノード プールを作成します。 次のコマンド例では、カスタム ./linuxkubeletconfig.json ファイルを使用して新しい Linux ノード プールを作成します。

az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json

設定が適用されたことを確認する

カスタム ノード構成を適用した後、 ホストに接続 し、ファイルシステムで sysctl または構成の変更が行われていることを確認することで、設定がノードに適用されたことを確認できます。

サポートされているカスタム構成パラメーターを確認する

サポートされている kubelet および Linux OS 構成パラメーター、許可される値、既定値、および説明の完全な一覧については、 AKS のカスタム ノード構成パラメーターを参照してください。

カスタム ノード構成に関する考慮事項

ノード構成をカスタマイズするときは、次の考慮事項に注意してください。

  • ノード イメージのアップグレードにより、カスタム ノード構成が再適用されます。
  • スケールアウト操作では、カスタム ノード構成が保持されます。
  • AKS では、すべてのカスタム ノード構成パラメーターまたは値に対してフライト前検証が実行されるわけではありません。 クラスター ノードの潜在的な問題を回避するために、指定したカスタム ノード構成パラメーターと値がサポートされ、有効であることを確認します。
  • プレビューの kubeReserved と hardEvictionThreshold の設定は、Linux ノード プールでのみ使用できます。
  • kubeReservedを構成する場合、値は正である必要があり、ターゲット ノード プールで使用可能な CPU またはメモリ容量を超えることはできません。
  • hardEvictionThresholdを構成する場合は、サポートされているユニット (Ki、Mi、Gi、または%のmemoryAvailableとnodeFsAvailable)、および%の生の数値またはnodeFsInodesFreeのみを使用します。
  • カスタム ノード構成パラメーターの既定値は、多くの場合、新しいオペレーティング システムバージョンで変更されます。 カスタム ノード構成を適用する場合は、構成するパラメーターの既定値を確認して、クラスター ノードの OS バージョンに対してカスタム設定が適切であることを確認します。
  • クラスターの安定性とパフォーマンスに意図しない影響を与えないように、カスタム ノード構成を変更するアクセス許可を持つユーザーの数を制限します。 Kubernetes API に対する Microsoft Entra ID 承認を使用して、クラスター構成設定へのアクセスを制限することを検討してください。
  • カスタム構成のあるノードプールは、カスタム構成のないノードプールと分離してください。これにより、特定の構成変更の影響を受けやすいワークロードへの意図しない影響を防ぐことができます。 たとえば、特定の kubelet 設定を必要とする重要なワークロードがある場合は、必要なカスタム kubelet 構成を使用して、そのワークロードを専用ノード プールに分離することを検討してください。