mcpField
H
huawei-cloud-cce-cluster-management

huawei-cloud-cce-cluster-management

github.com/huaweicloudクラウド・DevOps59285 回インストール2 日前に更新
リポジトリ

huawei-cloud-cce-cluster-management について

huawei-cloud-cce-cluster-managementは、Huawei Cloud CCEのクラスターとノードプールのライフサイクル、ノードのスケジューリング、アドオンを管理するスキルです。hcloudとkubectl cceを使い、リスクの高い操作には確認を求めます。

主な機能

  1. 01クラスターの作成、削除、休止、再開
  2. 02ノードプールとノード容量の管理
  3. 03ノードのcordon、uncordon、drain、状態確認
  4. 04アドオンの導入、更新、削除
  5. 05リスクの高い変更での確認必須化

活用シーン

  1. 01CCEクラスターの作成または削除
  2. 02ノードプール容量の調整
  3. 03メンテナンス前のノードドレイン
  4. 04クラスターアドオンの確認と管理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-cce-cluster-management

インストール後、Claude Code で/huawei-cloud-cce-cluster-managementを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
acceptance-criteria.md
cce-api-guide.md
cce-cluster-parameters.md
cli-installation-guide.md
iam-policies.md
task-cluster-management.md
task-node-management.md
task-nodepool-management.md
troubleshooting.md
verification-method.md
scripts/
huawei-cloud.py
scripts/huawei_cloud/
__init__.py
common.py
dispatcher.py
hcloud_runner.py
special_ops.py

詳細

Huawei Cloud CCE クラスター管理

概要

クラスターの作成/削除/休止/再開、ノードプール管理、ノードのスケジューリング制御、アドオン管理など、CCE(Cloud Container Engine)クラスターのライフサイクルを管理します。

このスキルでは、hcloud(KooCLI) を介して Huawei Cloud API を呼び出し、kubectl cce(kubectl-cce プラグイン)を介して Kubernetes ノードを操作(cordon/uncordon/drain/status)します。このプラグインは AK/SK 認証情報を使用して CCE API Gateway に接続するため、クラスターの EIP や kubeconfig の手動設定は不要です。既知の hcloud メタデータ解析の不具合により、2 つの操作(クラスターの作成、ノードプールの作成)は Python SDK にフォールバックします。詳しくは cce-api-guide.md を参照してください。

依存関係:このスキルには kubectl と kubectl-cce プラグインが必要です。huawei-cloud-kubectl-cce-installer スキルを使ってインストールしてください。

⛔ セキュリティ上の制約

危険な操作の確認メカニズム

このスキルでは、サービスの意図しない中断やデータ損失を防ぐため、すべての危険な操作に対して2段階の確認メカニズムを厳格に適用します。

すべての危険な操作の実行には confirm=true パラメーターが必要です。指定しない場合は、プレビューと確認プロンプトが返されます。

確認が必要な操作
ツール操作の種類リスクレベル説明
huawei_delete_cce_cluster削除🔴 CriticalCCE クラスター全体を削除します。元に戻すことはできません
huawei_hibernate_cce_cluster休止🟠 Highすべてのワークロードを停止し、コントロールプレーンの課金を一時停止します
huawei_awake_cce_cluster再開🟠 High休止状態のクラスターを再開します
huawei_resize_cce_nodepoolスケーリング🟡 Mediumノードプールのサイズを調整し、容量に影響します
huawei_delete_cce_nodepool削除🟠 Highノードプールを削除し、ビジネス容量に影響します
huawei_delete_cce_node削除🟠 Highクラスターからノードを削除し、スケジューリングに影響します
huawei_uninstall_cce_addonアンインストール🟠 Highアドオンを削除します。クラスターの機能に影響する可能性があります
huawei_cce_node_cordonCordon🟡 Mediumノードをスケジュール不可にし、新しい Pod が割り当てられないようにします
huawei_cce_node_uncordonUncordon🟡 Mediumノードをスケジュール可能にし、新しい Pod がただちに割り当てられる可能性があります
huawei_cce_node_drainDrain🟠 Highノードを Cordon し、すべての Pod を退避させます。実行中のワークロードに影響します
ワークフロー

ステップ 1:操作をプレビューする - confirm パラメーターを指定せずに呼び出します

# Example: Preview cluster deletion
python3 huawei-cloud.py huawei_delete_cce_cluster \
  region=cn-north-4 \
  cluster_id=xxx

返される内容:操作のプレビュー、リスク警告、確認用の例

ステップ 2:実行を確認する - confirm=true を指定して呼び出します

# Example: Confirm and execute deletion
python3 huawei-cloud.py huawei_delete_cce_cluster \
  region=cn-north-4 \
  cluster_id=xxx \
  confirm=true
認証情報のセキュリティ

✅ このスキルは、以下のセキュリティルールを厳守します。

  1. 認証情報を永続的に保存しない - AK/SK、トークン、証明書をディスクに保存しません
  2. 長期メモリーキャッシュを使用しない - AK/SK は API 呼び出しの間だけ保持し、その後解放されます
  3. プロジェクト ID のみメモリーキャッシュに保存 - 機密情報ではないプロジェクト ID をプロセスメモリーにキャッシュします
  4. 認証情報を漏えいさせない - AK/SK をログ、レスポンス、エラーに含めません
  5. 一時ファイルを削除 - 一時的な kubeconfig ファイルは使用後すぐに削除されます
  6. 設定を優先して認証情報を渡す - hcloud CLI の設定に認証情報がある場合、AK/SK は CLI 引数として渡されません(ps aux への露出を防ぎます)。環境変数は、親環境にまだ存在しない場合に限り、サブプロセスに設定されます。

認証情報はパラメーターまたは環境変数から取得されます(プロセスレベルのみで、ディスクには書き込まれません)。

  • 永続的な認証情報:HW_ACCESS_KEY + HW_SECRET_KEY
  • 一時的な認証情報(CI/CD/IAM 一時アクセスキーでの使用を推奨):HW_ACCESS_KEY + HW_SECRET_KEY + HW_SECURITY_TOKEN
  • HW_PROJECT_ID は省略可能です。指定されていない場合、hcloud IAM KeystoneListProjects を使って自動取得されます(hcloud API 呼び出し時のみ必要です。kubectl-cce のノード操作では必要ありません)
  • 呼び出しごとの ak/sk パラメーターは、その呼び出しに限り環境変数を上書きします

セキュリティ強化のヒント:親プロセスの環境(例:~/.bashrc または systemd の環境ファイル)に HW_ACCESS_KEY/HW_SECRET_KEY を設定すると、明示的に渡さなくてもサブプロセスに継承されます。このスキルは既存の環境変数を検出し、hcloud に AK/SK を CLI 引数として渡さないことで、プロセス一覧(ps aux)への認証情報の露出を防ぎます。kubectl-cce はこれらの環境変数をプロセス環境から直接読み取ります。

# Permanent
export HW_ACCESS_KEY  # your access key ID
export HW_SECRET_KEY  # your secret access key
export HW_REGION_NAME="cn-north-4"

# Temporary (add security token)
export HW_SECURITY_TOKEN  # your security token
ノードログインパスワードのセキュリティ

ノードまたはノードプールを作成する際、ログイン認証情報は以下の4 段階の優先順位で取得されます。

  1. ssh_key パラメーター — SSH キーペア名(利用可能な場合に推奨)。パスワードとの併用はできません。
  2. password パラメーター — 呼び出しごとに渡すノードログイン用の生パスワード(8~26 文字、大文字/小文字/数字/特殊文字のうち 3 種類以上を含む)
  3. CCE_NODE_PASSWORD 環境変数 — ssh_key も password も指定されていない場合に使用されます。
  4. 自動生成されたランダムパスワード — 上記のいずれも指定されていない場合、このスキルが強力なランダムパスワードを自動生成します。

⚠️ 自動生成されたパスワードは、ツールのレスポンスで絶対に返されません(data、message、ログのいずれにも含まれません)。その後ノードにアクセスするには、CCE コンソールまたは ECS API からノードのパスワードをリセットする必要があります。成功メッセージには、パスワードをリセットするよう促すヒントのみが含まれます。

生パスワードが CCE API に直接送信されることはありません。このスキルは内部で SHA-512 ソルト暗号化と base64 エンコードを適用します(cce-cluster-parameters.md を参照)。


前提条件

CLI ツール
  • hcloud(Huawei Cloud KooCLI 7.2 以降)— Huawei Cloud のすべての API 呼び出しを実行します。インストール方法:

    curl -sSL https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o ./hcloud_install.sh && bash ./hcloud_install.sh
    hcloud version   # verify install
    

    kubectl + kubectl-cce プラグイン — ノードのスケジューリング操作(cordon/uncordon/drain/status)に必要です。huawei-cloud-kubectl-cce-installer スキルを使ってインストールします。

    # Check if already installed
    bash ../huawei-cloud-kubectl-cce-installer/scripts/install_kubectl_cce.sh --check
    
    # Install (after confirming the plan)
    sudo bash ../huawei-cloud-kubectl-cce-installer/scripts/install_kubectl_cce.sh --execute --bin-dir /usr/local/bin
    

    kubectl cce プラグインは、AK/SK 認証情報を使って CCE API Gateway 経由で接続します。クラスター EIP や手動での kubeconfig 設定は不要です。

Python 環境
  • Python 3.8 以降

  • SDK パッケージ(create-cluster/create-nodepool のフォールバック用に保持)とヘルパーをインストールします。

    pip install huaweicloudsdkcce huaweicloudsdkcore huaweicloudsdkiam passlib pyyaml
    

    passlib は SHA-512 のソルト処理を提供します。huaweicloudsdkcce、huaweicloudsdkcore、huaweicloudsdkiam は、2 つの SDK フォールバック関数(クラスターの作成、ノードプールの作成)と IAM によるプロジェクト ID の解決で使用されます。pyyaml は hcloud の JSON 出力を解析します。

環境変数

このスキルは、認証情報をサブプロセスに渡す前に、既存の環境変数を検出します。

  • hcloud CLI の呼び出し:HW_ACCESS_KEY/HW_SECRET_KEY がすでに os.environ に設定されている場合、スキルは CLI 引数として --cli-access-key/--cli-secret-key を渡しません。これにより、ps aux での露出を防ぎます。
  • kubectl-cce の呼び出し:プラグインはプロセス環境から HW_ACCESS_KEY/HW_SECRET_KEY を直接読み取ります。これらの変数がすでに設定されている場合、サブプロセスは自然にそれらを継承するため、スキルが再設定することはありません。

🔒 セキュリティのヒント: HW_ACCESS_KEY/HW_SECRET_KEY はシステムレベルまたはセッションレベル(例:~/.bashrc や systemd の環境ファイル)で設定し、スキルが明示的な CLI 引数として渡す必要がないようにしてください。これにより、プロセス一覧(ps aux)やシェルの履歴に認証情報が露出するリスクをなくせます。

# Set credentials at session level (the skill detects these and skips
# passing them as explicit CLI arguments to hcloud/kubectl-cce)
export HW_ACCESS_KEY  # your access key ID
export HW_SECRET_KEY  # your secret access key
export HW_REGION_NAME="cn-north-4"
# Optional, for temporary credentials:
export HW_SECURITY_TOKEN  # your security token
# Optional, for node login when ssh_key is not used:
export CCE_NODE_PASSWORD  # your node password (8-26 chars, at least 3 char categories)
IAM 権限ポリシー

IAM ユーザーに、必要最小限の権限が付与されていることを確認してください。

権限説明
cce:cluster:listクラスター一覧の取得
cce:cluster:getクラスターの詳細情報の取得
cce:cluster:createクラスターの作成
cce:cluster:deleteクラスターの削除
cce:cluster:updateクラスターの更新(一時停止/起動/EIP のバインド)
cce:node:listノード一覧の取得
cce:node:getノードの詳細情報の取得
cce:node:createノードの作成
cce:node:deleteノードの削除
cce:node:updateノードの更新(cordon/uncordon/drain)
cce:nodepool:listノードプール一覧の取得
cce:nodepool:createノードプールの作成
cce:nodepool:deleteノードプールの削除
cce:nodepool:updateノードプールの更新(サイズ変更)
cce:addon:listアドオン一覧の取得
cce:addon:getアドオンの詳細情報の取得
cce:addon:createアドオンのインストール
cce:addon:updateアドオンの更新
cce:addon:deleteアドオンのアンインストール

パラメーターの確認

コマンドを実行する前に、以下のパラメーターをユーザーに確認してください。

認証パラメーター
パラメーター環境変数必須説明
アクセスキー IDHW_ACCESS_KEY✅Huawei Cloud の AK。永続または一時的な認証情報
シークレットアクセスキーHW_SECRET_KEY✅Huawei Cloud の SK。永続または一時的な認証情報
リージョンHW_REGION_NAME✅リージョン。例:cn-north-4
セキュリティトークンHW_SECURITY_TOKEN❌一時認証情報のセキュリティトークン。STS のみ
ノードパスワードCCE_NODE_PASSWORD❌ノードのログインパスワード。設定されていない場合は自動生成
クラスターパラメーター
パラメーター必須デフォルト説明
cluster_name✅—クラスター名。<env>-<app>-cluster を推奨
cluster_type❌Turboクラスタータイプ(Turbo/VirtualMachine)
container_network_type❌eniコンテナネットワークタイプ。Turbo クラスターでは eni
cluster_version❌API の最新バージョンKubernetes のバージョン。省略時は最新バージョンを自動選択
vpc_id✅—VPC ID
subnet_id✅—サブネット ID
flavor_id✅—ノードのフレーバー。例:c7.large.2
confirm❌false危険な操作の確認フラグ。削除/一時停止/サイズ変更では true が必須
ノードプールのパラメーター
パラメーター必須デフォルト説明
nodepool_name✅—ノードプール名。<env>-<role>-pool を推奨
node_count❌2初期ノード数。高可用性のため、2 以上を推奨
min_node_count❌—オートスケーリングの最小数
max_node_count❌—オートスケーリングの最大数
ssh_key❌—SSH キーペア名。パスワードより優先
root_volume_size❌40ルートディスクのサイズ(GB)
data_volume_size❌100データディスクのサイズ(GB)
その他のパラメーター
パラメーター必須デフォルト説明
duration❌30Kubeconfig の有効期間(日数)。整数で指定します
eip_id❌autoEIP ID。指定しない場合は自動で検索または作成します
addon_id❌—アドオン ID(UID)。詳細を照会する場合に必要です

主なコマンド

クラスターの照会
ツール機能パラメーター
huawei_list_cce_clustersリージョン内のすべての CCE クラスターを一覧表示しますregion
huawei_get_cce_nodesノードの詳細情報を取得しますregion、cluster_id
huawei_get_cce_kubeconfigクラスターの kubeconfig を取得しますregion、cluster_id、duration
クラスターの管理
ツール機能リスクレベル確認が必要
huawei_create_cce_clusterCCE クラスターを作成します🟢 低いいえ
huawei_delete_cce_clusterCCE クラスターを削除します🔴 重大はい
huawei_hibernate_cce_clusterクラスターを休止状態にします🟠 高はい
huawei_awake_cce_clusterクラスターを起動します🟠 高いいえ
huawei_bind_cce_cluster_eipクラスターに EIP をバインドします(eip_id がない場合は自動で検索または作成)🟢 低いいえ
huawei_unbind_cce_cluster_eipクラスターから EIP のバインドを解除します🟡 中いいえ

動的な EIP バインド: huawei_bind_cce_cluster_eip は動的な EIP 割り当てに対応しています。eip_id を指定しない場合、このスキルは自動的に次の処理を行います:(1)既存の EIP を一覧表示し、未バインドのもの(status=DOWN)を検索します。(2)利用可能なものがない場合、新しい EIP を作成します(トラフィック課金、5Mbps、PER 共有タイプ)。(3)クラスターにバインドします。レスポンスには eip_created(true/false)、eip_id、eip_address、および public_endpoint(External API URL)が含まれます。

推奨されるデフォルト:

  • クラスタータイプ:Turbo(ENI ネットワークで最高のパフォーマンスを発揮します)
  • コンテナーネットワーク:Turbo クラスターには eni を使用します(このスキルのデフォルト)
  • クラスターバージョン:API で最新のサポート対象バージョンを選択するには、cluster_version を省略します。ユーザーが特定の Kubernetes バージョンを必要とする場合にのみ指定してください
  • 命名形式:<env>-<app>-cluster(例:prod-web-cluster)
ノードプールの管理
ツール機能リスクレベル確認が必要
huawei_list_cce_nodepoolsノードプールを一覧表示します🟢 低いいえ
huawei_create_cce_nodepoolノードプールを作成します🟢 低いいえ
huawei_delete_cce_nodepoolノードプールを削除します🟠 高はい
huawei_resize_cce_nodepoolノードプールのサイズを変更します🟡 中はい

推奨されるデフォルト:

  • 命名形式:<env>-<role>-pool(例:prod-worker-pool)
  • 初期ノード数:HA 構成では 2、またはオートスケーリングを利用する場合は 0
  • 動的なスケーリングにはオートスケーリングを有効にします
  • Turbo クラスターでは、ENI 対応フレーバー(例:c7.large.2)を使用します
ノード管理
ツール機能リスクレベル確認が必要
huawei_list_cce_nodesクラスターノードを一覧表示🟢 低いいえ
huawei_create_cce_nodeノードを直接作成🟢 低いいえ
huawei_delete_cce_nodeノードを削除🟠 高はい
huawei_cce_node_cordonノードをスケジュール不可としてマーク🟡 中はい
huawei_cce_node_uncordonノードをスケジュール可能としてマーク🟡 中はい
huawei_cce_node_drainノードを cordon し、すべての Pod を退避🟠 高はい
huawei_cce_node_statusノードのスケジューリング状態を照会🟢 低いいえ

ノード ID に関する注意: huawei_delete_cce_node にはノード名ではなく、ノードの UID(huawei_list_cce_nodes → metadata.uid で取得)が必要です。UID の代わりに名前を使用すると、エラーが返されます。

ノードのスケジューリング操作(cordon、uncordon、drain、status)は kubectl cce 経由で実行されます。kubectl-cce プラグインは、AK/SK 認証情報を使用して CCE API Gateway に接続します。クラスタの EIP も、手動の kubeconfig も必要ありません。プラグインは cordon、退避、PodDisruptionBudget(PDB)への準拠、DaemonSet Pod のスキップをネイティブに処理します。

huawei_cce_node_drain は 標準的な drain の動作に従います。まずノードを cordon し、次に k8s Eviction API 経由ですべての常駐 Pod(DaemonSet Pod を除く)を退避します。この API は PodDisruptionBudget(PDB)を尊重します。PDB によって退避できなかった Pod は、failed_pods フィールドに報告されます。

注意: 管理されたスケーリングにはノードプールを優先してください。ノードの直接作成は特殊なケース向けです。

アドオン管理
ツール機能リスクレベル確認が必要
huawei_list_cce_addonsクラスタのアドオンを一覧表示🟢 低いいえ
huawei_get_cce_addon_detailアドオンの詳細を取得🟢 低いいえ
huawei_install_cce_addonアドオンをインストール🟢 低いいえ
huawei_uninstall_cce_addonアドオンをアンインストール🟠 高はい
huawei_update_cce_addonアドオンを更新🟡 中いいえ

一般的なアドオン:

  • coredns - DNS サービス
  • metrics-server - モニタリングメトリクス
  • everest - ストレージドライバー

アドオンに関する注意(E2E 検証に基づく):

  • huawei_get_cce_addon_detail、huawei_uninstall_cce_addon、huawei_update_cce_addon には、アドオン名ではなくアドオンの UID(huawei_list_cce_addons → metadata.uid で取得)が必要です。UID の代わりに名前を使用すると、エラー CCE.03400001 が返されます。
  • アドオンのステータスは spec.status ではなく、status.status フィールド(例:running、upgrading、abnormal)にあります。
  • huawei_update_cce_addon の実行後、アドオンが upgrading 状態になる場合があります。後続の操作(アンインストールなど)を行う前に、running に戻るまで待ってください。
ネットワークの前提条件
ツール機能パラメーター
huawei_list_vpcCIDR 情報とともに VPC を一覧表示region
huawei_list_vpc_subnetsAZ 情報とともにサブネットを一覧表示region、vpc_id(任意)
huawei_list_eipsEIP を一覧表示(バインド済み/未バインドの状態を表示)region
huawei_delete_eipEIP を削除(パブリック IP を解放)region、publicip_id

クラスタを作成する前に、これらのツールを使って VPC/サブネット ID を確認してください。


サポート対象リージョン

リージョンコードリージョン名
cn-north-4中国北部 - 北京 4
cn-north-1中国北部 - 北京 1
cn-north-2中国北部 - 北京 2
cn-east-3中国東部 - 上海 1
cn-south-1中国南部 - 広州
cn-south-2中国南部 - 広州フレンドリー
cn-east-4中国東部 II
cn-southwest-2貴陽 1
ap-southeast-1アジア太平洋 - 香港
ap-southeast-2アジア太平洋 - バンコク
ap-southeast-3アジア太平洋 - シンガポール

出力形式

すべてのツールは、次の内容を含む JSON 形式の結果を返します。

  • status:操作結果(success / error)
  • data:操作固有の応答(クラスター情報、ノード一覧、アドオンの詳細など)
  • message:結果の説明(人が読める形式)
  • warning:危険な操作に関するリスク警告(プレビューモードのみ)

検証

詳細な検証手順については、verification-method.md を参照してください。簡単なチェックリスト:

  1. hcloud version(7.2 以上であること)
  2. kubectl version --client
  3. HW_ACCESS_KEY / HW_SECRET_KEY の環境変数が設定されていることを確認します(一時的な認証情報の場合は HW_SECURITY_TOKEN も追加します)
  4. hcloud CCE ListClusters --cli-region=cn-north-4(接続テスト)
  5. 危険な操作のプレビューをテストします(confirm=true を指定せずに呼び出します)

ベストプラクティス

  • 認証情報には環境変数(HW_ACCESS_KEY / HW_SECRET_KEY)を使用し、ハードコーディングは避けてください。一時的な認証情報の場合は HW_SECURITY_TOKEN も追加します
  • 危険な操作は、confirm=true で確定する前に必ずプレビューしてください
  • 高パフォーマンスのワークロードには、Turbo クラスター(container_network_type=eni)を優先してください(デフォルトです)
  • ユーザーが特定の Kubernetes バージョンを必要としない限り、cluster_version は省略してください
  • ビジネスへの影響を最小限に抑えるため、トラフィックの少ない時間帯にノードプールのサイズを変更してください
  • 冗長性を確保するため、本番ワークロードではノードプールを 2 ノード以上に維持してください
  • huawei_list_cce_clusters を使用して、クラスターの健全性を定期的に確認してください

参考資料

ドキュメント説明
task-cluster-management.mdクラスターのライフサイクル操作
task-nodepool-management.mdノードプールの操作
task-node-management.mdノードのスケジューリング操作
iam-policies.mdIAM 権限ポリシー
verification-method.md検証手順
troubleshooting.mdトラブルシューティングガイド
cce-api-guide.mdhcloud 操作リファレンス
cce-cluster-parameters.mdクラスター/ノードプール作成パラメーター
cli-installation-guide.mdCLI のインストールおよび設定ガイド

注意事項

  • AK/SK(および一時的な認証情報の場合は HW_SECURITY_TOKEN)に適切な IAM 権限が付与されていることを確認してください
  • リージョンによって、利用可能なリソースが異なる場合があります
  • すべての危険な操作には確認が必要です
  • 削除操作は取り消せません
  • クラスターを休止状態にすると、すべてのワークロードが停止します。営業時間外に実行してください
  • ノードのドレインでは、ネイティブに kubectl drain を使用します。cordon、eviction、PDB への準拠、DaemonSet の自動スキップを処理します。--ignore-daemonsets --delete-emptydir-data フラグを使用してください。
  • ENI ネットワークで最高のパフォーマンスを得るには、Turbo クラスターを推奨します
  • 既知の hcloud メタデータ解析の不具合により、クラスターの作成/ノードプールの作成では Python SDK のフォールバックを使用します。それ以外の操作では hcloud CLI を使用します

コメント