すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Terway 使用時における一部 Linux ノードでの CPU 使用率の一時的な高騰に関するお知らせ

最終更新日:Mar 20, 2026

Linux コミュニティのカーネルパッチが eBPF プログラムに影響を与え、一部のノードで CPU 使用率が一時的に異常に高騰する可能性があります。この問題は、ご利用のクラスターが Terway CNI プラグインを使用しており、eBPF ベースの DataPath V2 機能が有効になっている場合に発生します。DataPath V2 は、NetworkPolicy を有効にすると自動的に有効になります。

影響範囲

次のすべての条件を満たすノードが影響を受けます。

  • ノードのオペレーティングシステムが Alibaba Cloud Linux 3 または ContainerOS であり、カーネルバージョンが 5.10.134-15 から 5.10.134-19.1 (両端を含む) の範囲内であること。

  • クラスターが Terway CNI プラグインを使用しており、DataPath V2 モードが有効になっていること。DataPath V2 は、NetworkPolicy サポートが有効になっている場合に自動的に有効になります。

ソリューション

ノードの修正要否確認

まず、クラスター内のノードが是正処置を必要とするかどうかを確認します。以下のコマンドをクラスター内のノードでバッチ実行するには、ECS クラウドアシスタント を使用します:

ノードの確認

#!/bin/bash

# スクリプト機能:
# 1. /sys/fs/bpf/tc/globals/cilium_ct4_global が存在するかどうかを確認します。
# 2. カーネルリリースに 'al8' または 'lifsea8' が含まれている場合にのみ続行します。
# 3. カーネルバージョンが 5.10.134-15 から 5.10.134-19.1 (両端を含む) の範囲内にあるかどうかを確認します。
# 4. kpatch_22519882 モジュールがロードされているかどうかを確認します。
# 5. カーネルタイプによって動作が異なります。
#    - al8: 修正を許可 (-y を使用) するか、インストールを促します。
#    - lifsea8: インストールしないでください。代わりに、ContainerOS 3.5.1 にアップグレードするようユーザーに警告します。
# 6. その他のカーネル (例: el8) はスキップされます。

set -euo pipefail

# デフォルト: ドライランモード (インストールなし)
INSTALL=false

# 引数の解析
while getopts "y" opt; do
  case $opt in
    y)
      INSTALL=true
      ;;
    \?)
      echo "Usage: $0 [-y]" >&2
      exit 1
      ;;
  esac
done


# チェックする重要なパスを定義 (優先順位に従って)
declare -a CT4_GLOBAL_PATHS=(
    "/sys/fs/bpf/tc/globals/cilium_ct4_global"
    "/.lifsea/rootfs/sys/fs/bpf/tc/globals/cilium_ct4_global"
)

# 見つかったパスを格納する変数
CT4_GLOBAL_PATH=""

# 各パスを順番にチェック
for path in "${CT4_GLOBAL_PATHS[@]}"; do
    if [[ -e "$path" ]]; then
        CT4_GLOBAL_PATH="$path"
        break
    fi
done

# 有効なパスが見つからない場合、チェックをスキップ
if [[ -z "$CT4_GLOBAL_PATH" ]]; then
    echo "Warning: None of the expected paths for cilium_ct4_global exist. Skipping check."
    exit 0
fi

echo "Detected $CT4_GLOBAL_PATH, proceeding with kernel version check..."

# 完全なカーネルリリースを取得
KERNEL_RELEASE=$(uname -r)
echo "Current kernel release: $KERNEL_RELEASE"

# ベースバージョンを抽出 (例: 5.10.134-19.1)
if [[ $KERNEL_RELEASE =~ 5\.10\.134-[0-9]+(\.[0-9]+)? ]]; then
    KERNEL_VERSION="${BASH_REMATCH[0]}"
else
    echo "Error: Unable to extract kernel version from $KERNEL_RELEASE" >&2
    exit 1
fi

# カーネルタイプを決定
if [[ $KERNEL_RELEASE == *"al8"* ]]; then
    KERNEL_TYPE="al8"
elif [[ $KERNEL_RELEASE == *"lifsea8"* ]]; then
    KERNEL_TYPE="lifsea8"
else
    echo "Kernel type not supported (neither al8 nor lifsea8), skipping."
    exit 0
fi

echo "Detected kernel type: $KERNEL_TYPE"

# バージョン範囲を定義 (両端を含む): 5.10.134-15 <= バージョン <= 5.10.134-19.1
MIN_VERSION="5.10.134-15"
MAX_VERSION="5.10.134-19.1"

# 自然ソートを使用したバージョン比較関数
version_ge() {
    [[ "$1" == "$(printf '%s\n' "$1" "$2" | sort -V | tail -n1)" ]]
}

version_le() {
    [[ "$1" == "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" ]]
}

# バージョン範囲の確認
if ! version_ge "$KERNEL_VERSION" "$MIN_VERSION"; then
    echo "Kernel version $KERNEL_VERSION is below $MIN_VERSION, skipping."
    exit 0
fi

if ! version_le "$KERNEL_VERSION" "$MAX_VERSION"; then
    echo "Kernel version $KERNEL_VERSION is above $MAX_VERSION, skipping."
    exit 0
fi

echo "Kernel version $KERNEL_VERSION is within range $MIN_VERSION ~ $MAX_VERSION."

# kpatch_22519882 モジュールがロードされているか確認
if lsmod | grep "kpatch_22519882" >/dev/null; then
    echo "kpatch_22519882 module is already loaded, no action needed."
    exit 0
fi

# ここに到達した場合、修正プログラムが不足しています
HOTFIX_PKG="kernel-hotfix-22519882-$KERNEL_VERSION"

case "$KERNEL_TYPE" in
    "al8")
        echo "kpatch_22519882 module is not loaded. Hotfix package '$HOTFIX_PKG' needs to be installed."

        if [[ "$INSTALL" == true ]]; then
            echo "Installing $HOTFIX_PKG..."
            if yum install -y "$HOTFIX_PKG"; then
                echo "Installation successful."
                exit 0
            else
                echo "Installation failed. Please check yum repository or permissions." >&2
                exit 1
            fi
        else
            echo "Running in dry-run mode. Use -y to install the hotfix."
            exit 1
        fi
        ;;
    "lifsea8")
        echo "WARNING: This is a lifsea8 kernel ($KERNEL_RELEASE)." >&2
        echo "The issue cannot be fixed by hotpatch. You must upgrade to ContainerOS 3.5.1 or later." >&2
        echo "See official documentation or contact support for upgrade instructions." >&2
        exit 1
        ;;
esac

ノードに修正が必要な場合、次の結果が返されます。

Alibaba Cloud Linux 3 ノード

/sys/fs/bpf/tc/globals/cilium_ct4_global が検出されました。カーネルバージョンの確認を続行しています...
現在のカーネルリリース: 5.10.134-18.al8.x86_64
検出されたカーネルタイプ: al8
カーネルバージョン 5.10.134-18 は範囲 5.10.134-15~5.10.134-19.1 内です。
kpatch_22519882 モジュールは読み込まれていません。修正プログラムパッケージ 'kernel-hotfix-22519882-5.10.134-18' をインストールする必要があります。
ドライランモードで実行中です。修正プログラムをインストールするには、2y を使用します。

ContainerOS ノード

Detected /sys/fs/bpf/tc/globals/cilium_ct4_global, proceeding with kernel version check...
Current kernel release: 5.10.134-18.0.1.lifsea8.x86_64
Detected kernel type: lifsea8
Kernel version 5.10.134-18.0 is within range 5.10.134-15 ~ 5.10.134-19.1.
WARNING: This is a lifsea8 kernel (5.10.134-18.0.1.lifsea8.x86_64).
The issue cannot be fixed by hotpatch. You must upgrade to ContainerOS 3.5.1 or later.
See official documentation or contact support for upgrade instructions.

次のいずれかの結果が返された場合、ノードに修正は不要です。

  • ノードで Terway eBPF 機能が有効になっていません。パッチのインストールはスキップされます。

    Path /sys/fs/bpf/tc/globals/cilium_ct4_global does not exist, skipping check.
  • パッチはすでにインストールされています。再インストールは不要です。

    ...
    kpatch_22519882 module is already loaded, no actions needed.

修正の適用

ContainerOS と Alibaba Cloud Linux 3 では、異なる修正手順が適用されます。

ContainerOS ノードの修正

ContainerOS ノードの場合、この問題は今後の ContainerOS 3.5.1 リリースで自動的に修正されます。ContainerOS イメージリリースノートをご参照ください。バージョン 3.5.1 が公開された後、バージョンをアップグレードしてください。詳細については、「オペレーティングシステムの変更」をご参照ください。

Alibaba Cloud Linux 3 ノードの修正

新しいスケールアウトノードへのカスタムデータの追加

新しいノードプールを作成する場合や既存のノードプールを編集する場合は、事前定義済みカスタムデータ フィールドに次のスクリプトを追加します。これにより、スケールアウトされた新しいノードが起動後に自動的にカーネルライブパッチをインストールできるようになります。詳細な手順については、「ノードプールの作成と管理」をご参照ください。

image.png

事前定義されたインスタンスデータ

#!/bin/bash

# 関数: check_and_apply_hotfix
# 目的: 現在のカーネルバージョンとタイプをチェックし、サポートされている範囲内にあるか検証し、
#          まだ適用されていない場合は、修正プログラムパッケージ (kpatch_22519882) をインストールします。
check_and_apply_hotfix() {
    local KERNEL_RELEASE
    local KERNEL_VERSION
    local KERNEL_TYPE
    local MIN_VERSION="5.10.134-15"
    local MAX_VERSION="5.10.134-19.1"
    local HOTFIX_PKG

    # 完全なカーネルリリース文字列を取得
    KERNEL_RELEASE=$(uname -r)
    echo "Current kernel release: $KERNEL_RELEASE"

    # ベースカーネルバージョンを抽出 (例: 5.10.134-19.1)
    if [[ $KERNEL_RELEASE =~ 5\.10\.134-[0-9]+(\.[0-9]+)? ]]; then
        KERNEL_VERSION="${BASH_REMATCH[0]}"
    else
        echo "Error: Unable to extract kernel version from $KERNEL_RELEASE" >&2
        return 1
    fi

    # カーネルタイプを検出 (al8 または lifsea8)
    if [[ $KERNEL_RELEASE == *"al8"* ]]; then
        KERNEL_TYPE="al8"
    elif [[ $KERNEL_RELEASE == *"lifsea8"* ]]; then
        KERNEL_TYPE="lifsea8"
    else
        echo "Kernel type not supported (neither al8 nor lifsea8), skipping."
        return 0
    fi

    echo "Detected kernel type: $KERNEL_TYPE"

    # 自然 (バージョン) ソートを使用したバージョン比較関数
    version_ge() {
        [[ "$1" == "$(printf '%s\n%s' "$1" "$2" | sort -V | tail -n1)" ]]
    }

    version_le() {
        [[ "$1" == "$(printf '%s\n%s' "$1" "$2" | sort -V | head -n1)" ]]
    }

    # カーネルバージョンがサポートされている最小バージョン以上であるか確認
    if ! version_ge "$KERNEL_VERSION" "$MIN_VERSION"; then
        echo "Kernel version $KERNEL_VERSION is below $MIN_VERSION, skipping."
        return 0
    fi

    # カーネルバージョンがサポートされている最大バージョン以下であるか確認
    if ! version_le "$KERNEL_VERSION" "$MAX_VERSION"; then
        echo "Kernel version $KERNEL_VERSION is above $MAX_VERSION, skipping."
        return 0
    fi

    echo "Kernel version $KERNEL_VERSION is within range $MIN_VERSION ~ $MAX_VERSION."

    # kpatch モジュールがすでにロードされているか確認
    if lsmod | grep "kpatch_22519882" >/dev/null; then
        echo "kpatch_22519882 module is already loaded, no action needed."
        return 0
    fi

    # モジュールがロードされていない場合、修正プログラムパッケージ名を準備
    HOTFIX_PKG="kernel-hotfix-22519882-$KERNEL_VERSION"

    # カーネルタイプに基づいてインストールを処理
    case "$KERNEL_TYPE" in
        "al8")
            echo "kpatch_22519882 module is not loaded. Hotfix package '$HOTFIX_PKG' needs to be installed."
            echo "Installing $HOTFIX_PKG..."

            if yum install -y "$HOTFIX_PKG"; then
                echo "Installation successful."
                return 0
            else
                echo "Installation failed. Please check yum repository or permissions." >&2
                return 1
            fi
            ;;
        "lifsea8")
            echo "Kernel type 'lifsea8' は認識されていますが、自動インストールは現在サポートされていません。"
            return 0
            ;;
        *)
            echo "Unknown kernel type: $KERNEL_TYPE"
            return 1
            ;;
    esac
}

# =====================
# 関数を呼び出す
# =====================
check_and_apply_hotfix
既存のノードへのパッチのインストール

既存の Alibaba Cloud Linux 3 ノードの場合、ECS クラウドアシスタントを使用して、修正が必要なノードで次のコマンドを実行します。

ノードの修正

#!/bin/bash

# スクリプト機能:
# 1. /sys/fs/bpf/tc/globals/cilium_ct4_global が存在するかどうかを確認します。
# 2. カーネルリリースに 'al8' または 'lifsea8' が含まれている場合にのみ続行します。
# 3. カーネルバージョンが 5.10.134-15 から 5.10.134-19.1 (両端を含む) の範囲内にあるかどうかを確認します。
# 4. kpatch_22519882 モジュールがロードされているかどうかを確認します。
# 5. カーネルタイプによって動作が異なります。
#    - al8: 修正を許可 (-y を使用) するか、インストールを促します。
#    - lifsea8: インストールしないでください。代わりに、ContainerOS 3.5.1 にアップグレードするようユーザーに警告します。
# 6. その他のカーネル (例: el8) はスキップされます。

set -euo pipefail

# デフォルト: ドライランモード (インストールなし)
INSTALL=true

# 引数の解析
while getopts "y" opt; do
  case $opt in
    y)
      INSTALL=true
      ;;
    \?)
      echo "Usage: $0 [-y]" >&2
      exit 1
      ;;
  esac
done


# チェックする重要なパスを定義 (優先順位に従って)
declare -a CT4_GLOBAL_PATHS=(
    "/sys/fs/bpf/tc/globals/cilium_ct4_global"
    "/.lifsea/rootfs/sys/fs/bpf/tc/globals/cilium_ct4_global"
)

# 見つかったパスを格納する変数
CT4_GLOBAL_PATH=""

# 各パスを順番にチェック
for path in "${CT4_GLOBAL_PATHS[@]}"; do
    if [[ -e "$path" ]]; then
        CT4_GLOBAL_PATH="$path"
        break
    fi
done

# 有効なパスが見つからない場合、チェックをスキップ
if [[ -z "$CT4_GLOBAL_PATH" ]]; then
    echo "Warning: None of the expected paths for cilium_ct4_global exist. Skipping check."
    exit 0
fi

echo "Detected $CT4_GLOBAL_PATH, proceeding with kernel version check..."

# 完全なカーネルリリースを取得
KERNEL_RELEASE=$(uname -r)
echo "Current kernel release: $KERNEL_RELEASE"

# ベースバージョンを抽出 (例: 5.10.134-19.1)
if [[ $KERNEL_RELEASE =~ 5\.10\.134-[0-9]+(\.[0-9]+)? ]]; then
    KERNEL_VERSION="${BASH_REMATCH[0]}"
else
    echo "Error: Unable to extract kernel version from $KERNEL_RELEASE" >&2
    exit 1
fi

# カーネルタイプを決定
if [[ $KERNEL_RELEASE == *"al8"* ]]; then
    KERNEL_TYPE="al8"
elif [[ $KERNEL_RELEASE == *"lifsea8"* ]]; then
    KERNEL_TYPE="lifsea8"
else
    echo "Kernel type not supported (neither al8 nor lifsea8), skipping."
    exit 0
fi

echo "Detected kernel type: $KERNEL_TYPE"

# バージョン範囲を定義 (両端を含む): 5.10.134-15 <= バージョン <= 5.10.134-19.1
MIN_VERSION="5.10.134-15"
MAX_VERSION="5.10.134-19.1"

# 自然ソートを使用したバージョン比較関数
version_ge() {
    [[ "$1" == "$(printf '%s\n' "$1" "$2" | sort -V | tail -n1)" ]]
}

version_le() {
    [[ "$1" == "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" ]]
}

# バージョン範囲の確認
if ! version_ge "$KERNEL_VERSION" "$MIN_VERSION"; then
    echo "Kernel version $KERNEL_VERSION is below $MIN_VERSION, skipping."
    exit 0
fi

if ! version_le "$KERNEL_VERSION" "$MAX_VERSION"; then
    echo "Kernel version $KERNEL_VERSION is above $MAX_VERSION, skipping."
    exit 0
fi

echo "Kernel version $KERNEL_VERSION is within range $MIN_VERSION ~ $MAX_VERSION."

# kpatch_22519882 モジュールがロードされているか確認
if lsmod | grep "kpatch_22519882" >/dev/null; then
    echo "kpatch_22519882 module is already loaded, no action needed."
    exit 0
fi

# ここに到達した場合、修正プログラムが不足しています
HOTFIX_PKG="kernel-hotfix-22519882-$KERNEL_VERSION"

case "$KERNEL_TYPE" in
    "al8")
        echo "kpatch_22519882 module is not loaded. Hotfix package '$HOTFIX_PKG' needs to be installed."

        if [[ "$INSTALL" == true ]]; then
            echo "Installing $HOTFIX_PKG..."
            if yum install -y "$HOTFIX_PKG"; then
                echo "Installation successful."
                exit 0
            else
                echo "Installation failed. Please check yum repository or permissions." >&2
                exit 1
            fi
        else
            echo "Running in dry-run mode. Use -y to install the hotfix."
            exit 1
        fi
        ;;
    "lifsea8")
        echo "WARNING: This is a lifsea8 kernel ($KERNEL_RELEASE)." >&2
        echo "The issue cannot be fixed by hotpatch. You must upgrade to ContainerOS 3.5.1 or later." >&2
        echo "See official documentation or contact support for upgrade instructions." >&2
        exit 1
        ;;
esac

期待される出力は次のとおりです。これは、パッチのインストールが完了したことを示しています。

......
Total                                                                                                                                                                                                                                                                                    1.0 MB/s |  52 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                                                                                                                                                 1/1 
  Installing       : kpatch-dnf-0.9.7_0.4-2.0.1.al8.noarch                                                                                                                                                                                                                                                           1/3 
  Running scriptlet: kpatch-dnf-0.9.7_0.4-2.0.1.al8.noarch                                                                                                                                                                                                                                                           1/3 
To enable automatic kpatch-patch subscription, run:
        $ dnf kpatch auto

  Installing       : kpatch-0.9.7-2.0.1.al8.noarch                                                                                                                                                                                                                                                                   2/3 
  Running scriptlet: kernel-hotfix-22519882-5.10.134-18-1.0-20250804154834.al8.x86_64                                                                                                                                                                                                                                3/3 
  Installing       : kernel-hotfix-22519882-5.10.134-18-1.0-20250804154834.al8.x86_64                                                                                                                                                                                                                                3/3 
  Running scriptlet: kernel-hotfix-22519882-5.10.134-18-1.0-20250804154834.al8.x86_64                                                                                                                                                                                                                                3/3 
Created symlink /etc/systemd/system/multi-user.target.wants/kpatch.service → /usr/lib/systemd/system/kpatch.service.
installing /var/khotfix/5.10.134-18.al8.x86_64/22519882/kpatch-22519882.ko (5.10.134-18.al8.x86_64)
loading patch module: /var/khotfix/5.10.134-18.al8.x86_64/22519882/kpatch-22519882.ko

  Verifying        : kpatch-0.9.7-2.0.1.al8.noarch                                                                                                                                                                                                                                                                   1/3 
  Verifying        : kpatch-dnf-0.9.7_0.4-2.0.1.al8.noarch                                                                                                                                                                                                                                                           2/3 
  Verifying        : kernel-hotfix-22519882-5.10.134-18-1.0-20250804154834.al8.x86_64                                                                                                                                                                                                                                3/3 

Installed:
  kernel-hotfix-22519882-5.10.134-18-1.0-20250804154834.al8.x86_64                                                            kpatch-0.9.7-2.0.1.al8.noarch                                                            kpatch-dnf-0.9.7_0.4-2.0.1.al8.noarch                                                           

Complete!
Installation successful.

参考文献

Alibaba Cloud Linux 3 における eBPF プログラムの LRU ハッシュによる高 CPU 使用率のトラブルシューティング