ノードシステム構成のカスタマイズ


ノードシステム構成は、Kubernetes ノード エージェント(kubelet)と低レベルの Linux カーネル構成(sysctl)のカスタム構成をノードプールで指定できる構成ファイルです。

ノードシステム構成の使用

ノードシステム構成を使用するには:

  1. 構成ファイルを作成します。このファイルには、kubelet 構成と sysctl 構成が含まれています。
  2. クラスタまたはノードプールの作成または更新時に構成を追加します。

構成ファイルの作成

ノードシステム構成ファイルを YAML で記述します。次の例は、kubelet オプションと sysctl オプションの構成を追加する方法を示しています。

kubeletConfig:
  cpuManagerPolicy: static
linuxConfig:
 sysctl:
   net.core.somaxconn: '2048'
   net.ipv4.tcp_rmem: '4096 87380 6291456'

この例では、次のようになります。

  • cpuManagerPolicy: static は、静的 CPU 管理ポリシーを使用するように kubelet を構成します。
  • net.core.somaxconn: '2048' は、socket listen() バックログを 2,048 バイトに制限します。
  • net.ipv4.tcp_rmem: '4096 87380 6291456' は、TCP ソケットの受信バッファの最小値、デフォルト値、最大値をそれぞれ 4,096 バイト、87,380 バイト、6,291,456 バイトに設定します。

kubelet または sysctl の構成のみを追加する場合は、そのセクションのみを構成ファイルに追加します。たとえば、kubelet 構成を追加するには、次のファイルを作成します。

kubeletConfig:
  cpuManagerPolicy: static

構成ファイルに追加できるフィールドの完全なリストについては、Kubelet 構成オプションSysctl 構成オプションのセクションをご覧ください。

ノードプールへの構成の追加

構成ファイルを作成したら、gcloud コマンドライン ツールを使用して --system-config-from-file フラグを追加します。このフラグは、クラスタの作成時か、ノードプールの作成または更新時に追加できます。Google Cloud Console でノードシステム構成を追加することはできません。

ノードシステム構成を追加するには、次のコマンドを実行します。

クラスタの作成

gcloud container clusters create CLUSTER_NAME \
    --system-config-from-file=SYSTEM_CONFIG_PATH

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前
  • SYSTEM_CONFIG_PATH: kubelet 構成と sysctl 構成を含むファイルへのパス

ノードシステム構成を適用すると、定義したデフォルトの設定がクラスタのデフォルト ノードプールで使用されます。

ノードプールの作成

gcloud container node-pools create POOL_NAME \
     --cluster CLUSTER_NAME \
     --system-config-from-file=SYSTEM_CONFIG_PATH

次のように置き換えます。

  • POOL_NAME: ノードプールの名前
  • CLUSTER_NAME: ノードプールを追加するクラスタの名前
  • SYSTEM_CONFIG_PATH: kubelet 構成と sysctl 構成を含むファイルへのパス

ノードプールの更新

gcloud container node-pools update POOL_NAME \
    --cluster=CLUSTER_NAME
    --system-config-from-file=SYSTEM_CONFIG_PATH

次のように置き換えます。

  • POOL_NAME: 更新するノードプールの名前
  • CLUSTER_NAME: 更新するクラスタの名前
  • SYSTEM_CONFIG_PATH: kubelet 構成と sysctl 構成を含むファイルへのパス

ノードシステム構成を編集する

ノードシステム構成を編集するには、必要な構成で新しいノードプールを作成するか、既存のノードプールのノードシステム構成を更新します。

ノードプールを作成して編集する

ノードプールを作成して、ノードシステム構成を編集するには:

  1. 必要な構成で構成ファイルを作成します。
  2. 新しいノードプールに構成を追加します。
  3. ワークロードを新しいノードプールに移行します。
  4. 古いノードプールを削除します

既存のノードプールを更新して編集する

既存のノードプールを更新してノードシステム構成を編集するには、ノードシステム構成を必要な値で更新します。ノードシステム構成を更新すると、ノードプールの構成が新しい構成で上書きされます。更新中にパラメータを省略すると、それぞれがデフォルトに設定されます。

ノードシステム構成をデフォルトに戻す場合は、kubeletsysctl の空の値で構成ファイルを更新します。次に例を示します。

kubeletConfig: {}
linuxConfig:
  sysctl: {}

ノードシステム構成を削除する

ノードシステム構成を削除するには:

  1. ノードプールを作成します
  2. ワークロードを新しいノードプールに移行します。
  3. 古いノードシステム構成を持つノードプールを削除します。

Kubelet 構成オプション

次の表に、変更可能な kubelet オプションを示します。

Kubelet 構成の設定 制限事項 デフォルト設定 説明
cpuManagerPolicy 値は none または static にする必要があります。 none この設定は、kubelet の CPU Manager ポリシーを制御します。デフォルト値は none で、デフォルトの CPU アフィニティ スキームになります。OS スケジューラによって自動的に実行される範囲を超えるアフィニティはありません。

この値を static に設定すると、整数演算の CPU リクエストを含む保証型 QoS クラスの Pod に CPU の排他的使用を割り当てることができます。
cpuCFSQuota 値は true または false にする必要があります。 true この設定では、Pod の CPU 上限が適用されます。この値を false に設定すると、Pod の CPU 制限は無視されます。

Pod が CPU の制限を受ける可能性がある特定のシナリオでは、CPU 制限を無視することが望ましい場合があります。cpuCFSQuota を無効にすると、誤った Pod が想定よりも多くの CPU リソースを消費するリスクがあります。
cpuCFSQuotaPeriod 値は実行時間である必要があります。 "100ms" この設定では、CPU の CFS 割り当て期間値 cpu.cfs_period_us を設定します。この値は、cgroup による CPU リソースへのアクセス頻度を指定します。このオプションを使用すると、CPU スロットルの動作を調整できます。

Sysctl 構成オプション

システムのパフォーマンスを調整するには、次の Kernel 属性を変更します。

  • net.core.netdev_max_backlog
  • net.core.rmem_max
  • net.core.wmem_default
  • net.core.wmem_max
  • net.core.optmem_max
  • net.core.somaxconn
  • net.ipv4.tcp_rmem
  • net.ipv4.tcp_wmem
  • net.ipv4.tcp_tw_reuse

これらの属性の詳細については、Linux Kernel sysctl のドキュメントをご覧ください。

複数の Linux の名前空間が特定の sysctl に対して一意の値を持ち、その他はノード全体でグローバルな値を持っている場合があります。ノードシステム構成を使用して sysctl オプションを更新すると、sysctl がノードと各名前空間にグローバルに適用されるため、各 Pod の Linux 名前空間での sysctl の値が同じになります。

次のステップ