Azure Kubernetes Service (AKS)のカスタム ノード構成パラメーター

この記事では、Azure Kubernetes Service (AKS) ノード プールでサポートされているカスタム ノード構成パラメーターの一覧を示します。 構成ファイルを作成して適用する方法については、「 AKS ノード プールのノード構成をカスタマイズする」を参照してください。

Kubelet カスタム構成パラメーター

Important

安全でない sysctl を有効にする場合は、ノードの安定性とワークロードの動作について責任を負います。 安全でない sysctl は、正しく構成されていないと、ノードが不安定になったり、セキュリティの脆弱性が発生したりする可能性があります。 特定の安全でない sysctl を有効にすることの影響を理解し、変更後にクラスターの正常性を注意深く監視してください。

Linux kubelet カスタム構成

パラメーター 許容される値/間隔 Default Description
cpuManagerPolicy none、static なし 静的ポリシーにより、保証 されたポッド 内のコンテナーで、整数の CPU 要求を使用してノード上の排他的 CPU にアクセスできます。
cpuCfsQuota true、false true CPU 制限を指定するコンテナーに対する CPU CFS クォータの適用を有効または無効にします。
cpuCfsQuotaPeriod ミリ秒 (ms) 単位の間隔 100ms CPU の CFS クォータ期間値を設定します。
imageGcHighThreshold 0-100 85 イメージ ガベージ コレクションが常に実行された後のディスク使用率。 ガベージコレクションを発生させる最小ディスク使用量。 イメージ ガベージ コレクションを無効にするには、100 に設定します。
imageGcLowThreshold 0 から 100、imageGcHighThreshold 以下 80 イメージ ガベージ コレクションが実行されない前のディスク使用率。 ガベージ コレクションをトリガーできる最小ディスク使用量。
topologyManagerPolicy none、best-effort、restricted、single-numa-node なし NUMA ノードの配置を最適化します。 詳細については、「 ノード上のトポロジ管理ポリシーの制御」を参照してください
allowedUnsafeSysctls kernel.shm*kernel.msg*kernel.semfs.mqueue.*net.* なし 安全でない sysctls パターンまたは安全でない sysctl パターンの許容リスト。
containerLogMaxSizeMB メガバイト (MB) 単位のサイズ 50 コンテナー ログ ファイルがローテーションされる前の最大サイズ (たとえば、10 MB)。
containerLogMaxFiles 2 以上 5 コンテナーに保持するコンテナー ログ ファイルの最大数。
podMaxPids -1 からカーネル PID 制限まで -1 (無限) ポッドで実行できるプロセス ID の最大数。
seccompDefault UnconfinedRuntimeDefault Unconfined すべてのワークロードのために、既定の seccomp プロファイルを設定します。 RuntimeDefault は containerd の既定の seccomp プロファイルを使用し、特定のシステム呼び出しを制限してセキュリティを強化します。 制限付きシステムコールは失敗します。 Unconfined は syscall に制限を設けず、すべてのシステム呼び出しを許可し、セキュリティを低下させます。 詳細については、 コンテナー化された既定の seccomp プロファイルを参照してください。 このパラメーターはプレビュー段階です。 az feature register コマンドを使用して、"KubeletDefaultSeccompProfilePreview" 機能フラグを--namespace "Microsoft.ContainerService"します。
kubeReserved.cpuMillicores 1 からノード プールの CPU 容量まで(ミリコア単位) なし Linux ノード プール上の Kubernetes システム デーモンの CPU を予約します。 このパラメーターはプレビュー段階であり、 CustomNodeConfigPreview 機能フラグが必要です。
kubeReserved.memoryMB 1 から MiB のノード プール のメモリ容量 なし Linux ノード プール上の Kubernetes システム デーモンのメモリを予約します。 このパラメーターはプレビュー段階であり、 CustomNodeConfigPreview 機能フラグが必要です。
hardEvictionThreshold.memoryAvailable <number>Ki<number>Mi<number>Gi、またはパーセンテージが 100 以下の<number>% なし Linux ノード プールで使用可能なメモリの kubelet ハード削除しきい値を設定します。 このパラメーターはプレビュー段階であり、 CustomNodeConfigPreview 機能フラグが必要です。
hardEvictionThreshold.nodeFsAvailable <number>Ki<number>Mi<number>Gi、またはパーセンテージが 100 以下の<number>% なし Linux ノード プールで使用可能なノード ファイルシステム領域の kubelet ハード削除しきい値を設定します。 このパラメーターはプレビュー段階であり、 CustomNodeConfigPreview 機能フラグが必要です。
hardEvictionThreshold.nodeFsInodesFree <number>または、パーセンテージが 100 以下の<number>% なし Linux ノード プールにおけるノード ファイルシステムの空き inode 数に対する kubelet のハード退避しきい値を設定します。 このパラメーターはプレビュー段階であり、 CustomNodeConfigPreview 機能フラグが必要です。

Windows kubelet カスタム構成

パラメーター 許容される値/間隔 Default Description
imageGcHighThreshold 0-100 85 イメージ ガベージ コレクションが常に実行された後のディスク使用率。 ガベージコレクションを発生させる最小ディスク使用量。 イメージ ガベージ コレクションを無効にするには、100 に設定します。
imageGcLowThreshold 0 から 100、imageGcHighThreshold 以下 80 イメージ ガベージ コレクションが実行されない前のディスク使用率。 ガベージ コレクションをトリガーできる最小ディスク使用量。
containerLogMaxSizeMB メガバイト (MB) 単位のサイズ 10 コンテナー ログ ファイルがローテーションされる前の最大サイズ (たとえば、10 MB)。
containerLogMaxFiles 2 以上 5 コンテナーに保持するコンテナー ログ ファイルの最大数。

Linux カスタム OS 構成パラメーター

Important

検索と読みやすさを簡単にするために、この記事では OS の設定を名前で表示しますが、 camelCase の大文字化規則を使用して構成 JSON ファイルまたは AKS API に追加する必要があります。

たとえば、 vm.max_map_count 設定を変更する場合は、構成 JSON ファイルに vmMaxMapCount するように再フォーマットする必要があります。

Linux ファイルハンドル制限

大量のトラフィックを提供する場合、そのトラフィックは通常、多数のローカル ファイルから送信されます。 次のカーネル設定と組み込みの制限を調整して、いくつかのシステム メモリを犠牲にして、より多くの処理を行うことができます。

次の表に、ノード プールごとにカスタマイズできるファイル ハンドルの制限を示します。

Setting 許容される値/間隔 Ubuntu 22.04 の既定値 Ubuntu 24.04 の既定値 Azure Linux 3.0 の既定値 Description
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Linux カーネルが割り当てるファイル ハンドルの最大数。 この値は、ファイル記述子の枯渇を防ぎ、コンテナー化されたワークロードに対してシステム全体のファイル ハンドルが無制限になるように、可能な最大値 (2^63-1) に設定されます。
fs.inotify.max_user_watches 781250 から 2097152 1048576 1048576 1048576 システムで許容されるファイル ウォッチの最大数。 各 "ウォッチ" は 32 ビット カーネルでは約 90 バイト、64 ビット カーネルでは約 160 バイトです。
fs.aio-max-nr 65536 から 6553500 65536 65536 65536 aio-nr は、現在のシステム全体の非同期 I/O 要求の数を示します。 aio-max-nr では、aio-nr の可能な最大値を変更できます。
fs.nr_open 8192 から 20000500 1048576 1048576 1073741816 プロセスで割り当てることができるファイル ハンドルの最大数。

Note

fs.file-max パラメーターは、アップストリームの既定値に基づいて、Ubuntu と Azure Linux 全体で9223372036854775807 (符号付き 64 ビット整数の最大値) に設定されます。 この構成には、次の特性があります。

  • システム全体のファイル記述子の枯渇に基づくサービス拒否攻撃を防ぎます
  • コンテナー ワークロード がシステム全体のファイル ハンドルの制限によってボトルネックにならないようにします。
  • 個々のプロセスに適用されるプロセスごとの制限 (fs.nr_open) によってulimitします。
  • 多数のコンテナーが同時に実行される可能性があるコンテナー プラットフォーム用に最適化され、それぞれが多数のファイルとネットワーク接続を開く可能性があります。

Linux ソケットとネットワークのチューニング

多数の同時セッションを処理することが予想されるエージェント ノードの場合は、次の TCP およびネットワーク オプションを使用し、ノード プールごとに調整できます。

Setting 許容される値/間隔 Ubuntu 22.04 の既定値 Ubuntu 24.04 の既定値 Azure Linux 3.0 の既定値 Description
net.core.somaxconn 4096 から 3240000 16384 16384 16384 リッスンしている特定のソケットに対してキューに入れることができる接続要求の最大数。 listen (2) 関数に渡されるバックログ パラメーターの値の上限。 バックログ引数が somaxconn より大きい場合、通知なしにこの制限に切り捨てられます。
net.core.netdev_max_backlog 1000 から 3240000 1000 1000 1000 カーネルで処理できる速度を超えてパケットをインターフェイスで受信した場合に、INPUT 側でキューに入れられたパケットの最大数。
net.core.rmem_max 212992 から 134217728 1048576 1048576 212992 受信ソケット バッファーの最大サイズ (バイト単位)。
net.core.wmem_max 212992 から 134217728 212992 212992 212992 送信ソケット バッファーの最大サイズ (バイト単位)。
net.core.optmem_max 20480 から 4194304 20480 131072 20480 ソケットごとに許容される付加バッファーの最大サイズ (オプション メモリ バッファー)。 ソケットのオプション メモリは、ソケットの使用に関連する追加の構造体を格納するために、いくつかのケースで使用されます。
net.ipv4.tcp_max_syn_backlog 128 から 3240000 16384 16384 16384 接続クライアントから受信確認を受信していないキューに登録された接続要求の最大数。 この数を超えると、カーネルは要求の削除を開始します。
net.ipv4.tcp_max_tw_buckets 8000 から 1440000 262144 262144 131072 システムが同時に保持する TIME-WAIT ソケットの最大数。 この数を超えると、time-wait ソケットが直ちに破棄され、警告が出力されます。
net.ipv4.tcp_fin_timeout 5 から 120 60 60 60 アプリケーションによって参照されなくなった孤立した接続が、ローカル側で中止される前にFIN_WAIT_2状態のままでいる時間。
net.ipv4.tcp_keepalive_time 30 から 432000 7200 7200 7200 keepalive が有効になっている場合に、TCP によって keepalive メッセージが送信される頻度。
net.ipv4.tcp_keepalive_probes 1 から 15 9 9 9 接続が切断されたと判断されるまで、TCP によって送信される keepalive プローブの数。
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 プローブが送信される頻度。tcp_keepalive_probes で乗算することで、プローブが開始された後、応答していない接続を強制終了する時間が算出されます。
net.ipv4.tcp_tw_reuse 2 2 2 プロトコルの観点から安全な場合に、新しい接続に TIME-WAIT ソケットを再利用できるようにします。
net.ipv4.ip_local_port_range 最初: 1024 - 60999 と最後: 32768 - 65535] 最初:32768、最後:60999 最初:32768、最後:60999 最初:32768、最後:60999 TCP および UDP トラフィックによってローカル ポートを選択するために使用されるローカル ポート範囲。 この範囲は、エージェント ノードで TCP および UDP トラフィックに許可される最初のローカル ポートと、最後のローカル ポート番号の 2 つの番号で構成されます。
net.ipv4.neigh.default.gc_thresh1 128 から 80000 4096 4096 4096 ARP キャッシュに格納できるエントリの最小数。 エントリの数がこの設定を下回っている場合、ガベージ コレクションはトリガーされません。
net.ipv4.neigh.default.gc_thresh2 512 から 90000 8192 8192 8192 ARP キャッシュに含めることができるエントリの緩やかな最大数。 ARP ガベージコレクションは、この設定がソフト最大値に達した約5秒後にトリガーされるため、この設定はおそらく最も重要です。
net.ipv4.neigh.default.gc_thresh3 1024 から 100000 16384 16384 16384 ARP キャッシュ内のエントリのハード最大数。
net.netfilter.nf_conntrack_max 131072 - 2097152 動的に計算される 動的に計算される 動的に計算される nf_conntrack は、Linux 内の NAT の接続エントリを追跡するモジュールです。 nf_conntrack モジュールでは、ハッシュ テーブルを使用して、TCP プロトコルの "確立された接続" レコードが記録されます。 nf_conntrack_max は、ハッシュ テーブル内のノードの最大数、つまり nf_conntrack モジュールまたは接続追跡テーブルのサイズでサポートされる接続の最大数です。 既定値 は、 RAM_in_bytes / 16384 (または RAM_in_MB * 64) という数式を使用して、システム メモリに基づいて動的に計算されます。 たとえば、8 GB の RAM を持つ仮想マシンの既定の接続数は約 524,288 です。 実際の値は、仮想マシンのサイズと使用可能なメモリによって異なります。
net.netfilter.nf_conntrack_buckets 65536 - 524288 動的に計算される 動的に計算される 動的に計算される nf_conntrack は、Linux 内の NAT の接続エントリを追跡するモジュールです。 nf_conntrack モジュールでは、ハッシュ テーブルを使用して、TCP プロトコルの "確立された接続" レコードが記録されます。 nf_conntrack_buckets は、ハッシュ テーブルのサイズです。 既定値 は、 RAM_in_bytes / 16384、最小 1,024 バケット、最大 262,144 バケットの数式を使用して、システム メモリに基づいて動的に計算されます。 既定の nf_conntrack_max は通常、 nf_conntrack_buckets * 4に設定されます。 実際の値は、仮想マシンのサイズと使用可能なメモリによって異なります。

Linux worker の制限

ファイル記述子の制限と同様に、プロセスで作成できるワーカーまたはスレッドの数は、カーネル設定とユーザー制限の両方により制限されます。 AKS のユーザー制限は無制限です。 次の表に、ノード プールごとにカスタマイズできるカーネル設定を示します。

Setting Ubuntu 22.04 の既定値 Ubuntu 24.04 の既定値 Azure Linux 3.0 の既定値 Description
kernel.threads-max 動的に計算される 動的に計算される 動的に計算される プロセスによってワーカー スレッドをスピンアップできます。 作成できるすべてのスレッドの最大数は、カーネル設定 kernel.threads-max で設定されます。 既定値は、total_ram_pages / 4 (各ページは通常 4 KB) の数式を使用して、システム メモリに基づいて動的に計算されます。 実際の値は、仮想マシンのサイズと使用可能なメモリによって異なります。

Linux 仮想メモリ

次の表に、Linux カーネルの仮想メモリ (VM) サブシステムの操作とディスクへのダーティ データの writeout を調整するために、ノード プールごとにカスタマイズできるカーネル設定の一覧を示します。

Setting 許容される値/間隔 Ubuntu 22.04 の既定値 Ubuntu 24.04 の既定値 Azure Linux 3.0 の既定値 Description
vm.max_map_count 65530 1048576 1048576 このファイルには、プロセスで使用できるメモリ マップ領域の最大数が含まれています。 メモリ マップ領域は、malloc の呼び出しの副作用として mmapmprotect、および madvise によって直接使用されるほか、共有ライブラリの読み込み時にも使用されます。
vm.vfs_cache_pressure 1 から 100 100 100 100 この割合値により、ディレクトリおよび inode オブジェクトのキャッシュに使用されるメモリを再利用するカーネルの傾向が制御されます。
vm.swappiness 0 - 100 60 60 60 このコントロールは、カーネルがメモリ ページをどれだけ積極的にスワップするかを定義するために使用されます。 値を大きくするとアグレッシブさが増し、値が小さいとスワップの量が減少します。 値を 0 に設定すると、空きページとファイルに格納されたページの量がゾーン内の高基準値を下回るまで、スワップを開始しないようにカーネルに指示されます。
swapFileSizeMB 1 MB - 一時ディスクのサイズ (/dev/sdb) なし なし なし SwapFileSizeMB は、このノード プールのエージェント ノードに作成するスワップ ファイルのサイズを MB 単位で指定します。
transparentHugePageEnabled alwaysmadvisenever always always madvise Transparent Hugepages は、プロセッサのメモリ マッピング ハードウェアをより効率的に使用することでパフォーマンスを向上させることを目的とした Linux カーネル機能です。 有効にすると、カーネルはできる限り hugepages を割り当てようとし、mmap リージョンが自然に整列されている2 MB の場合、Linux プロセスは 2 MB のページを受け取ります。 hugepagesがシステム全体で有効になっている場合は、アプリケーションによってメモリ リソースが多く割り当てられる場合があります。 アプリケーションは大きな領域を mmap 可能性がありますが、その 1 バイトにしか触れません。その場合、正当な理由なく 4k ページではなく 2 MB のページが割り当てられる可能性があります。 このシナリオでは、システム全体で hugepages を無効にしたり、MADV_HUGEPAGE madvise 領域内にのみ配置したりできます。
transparentHugePageDefrag alwaysdeferdefer+madvisemadvisenever madvise madvise madvise この値により、hugepages をより多く使用できるように、カーネルでメモリの最適化をアグレッシブに使用する必要があるかどうかが制御されます。