mcpField
H
huawei-cloud-cci-instance-management

huawei-cloud-cci-instance-management

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

huawei-cloud-cci-instance-management について

hcloud CLI とネットワーク作成用 Python ヘルパーで、Huawei Cloud CCI コンテナインスタンスのライフサイクルを管理するスキルです。名前空間、ネットワーク、ワークロード、状態、ログを扱い、削除前に確認を求めます。

主な機能

  1. 01名前空間とネットワークの管理
  2. 02Pod とワークロードの作成・管理
  3. 03EIPPool によるパブリック IP アクセス管理
  4. 04状態、ログ、イベントの確認
  5. 05削除前の確認必須

活用シーン

  1. 01CCI 名前空間へのワークロードのデプロイ
  2. 02実行中インスタンスとログの確認
  3. 03確認後の CCI リソースの削除

インストール

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

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

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

同梱ファイル

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

references/
acceptance-criteria.md
cci-operation-catalog.md
common-workflows.md
credential-configuration.md
iam-policies.md
parameter-format.md
task-deployment-management.md
task-eippool-management.md
task-logs-and-status.md
task-namespace-management.md
task-network-management.md
task-pod-management.md
task-statefulset-management.md
troubleshooting.md
verification-method.md
scripts/
cci_network_helper.py

詳細

Huawei Cloud CCI コンテナインスタンスのライフサイクル管理

概要

hcloud CLI(KooCLI)を使用して、Huawei Cloud CCI(Cloud Container Instance)のライフサイクル全体を管理します。CCI はサーバーレスのコンテナサービスです。クラスター管理は不要で、Namespace を作成し、Network を定義するだけで、ワークロードを直接デプロイできます。

アーキテクチャ:hcloud CLI → CCI OpenAPI → Namespace / Network / Deployment / StatefulSet / Pod / EIPPool / Service / Ingress

制約とルール

セキュリティルール
  • 2 段階の確認:すべての破壊的操作(Namespace/Network/Deployment/StatefulSet/Pod/EIPPool の削除)では、ユーザーによる明示的な確認が必要です。まずコマンドのプレビュー、リソースの詳細、リスクの警告を提示し、ユーザーが確認した後にのみ実行してください。
  • 認証情報のセキュリティ:会話、コマンド、出力で AK/SK の値を決して公開しないでください。認証情報の状態(存在の有無のみ)の確認には、hcloud configure list のみを使用してください。明示的な AK/SK パラメーターより、プロファイルモードまたは環境変数を優先してください。
リソースの制約
  • Namespace の flavor アノテーションは必須です:すべての Namespace に namespace-kubernetes-io/flavor アノテーション(値:general-computing または gpu-accelerated)を設定する必要があります。設定しない場合、作成に失敗します。
  • limits と requests は同じ値にする必要があります:CCI では resources.limits == resources.requests が必須です。一致しない場合、「limit and request doesn't equal」エラーが発生します。両方に同じ値(例:500m/1Gi)を設定してください。
  • ワークロードより先に Network を作成する必要があります:Namespace に Network がない場合、Pod/Deployment/StatefulSet の作成に失敗するか、Pending のままになります。ワークロードをデプロイする前に、必ず Network を作成してください。
  • VPC CIDR の制限:VPC サブネットの CIDR に 10.247.0.0/16 を指定してはいけません。CCI はこの範囲を Service ネットワーク用に予約しています。この範囲を使用すると、IP が競合し、ワークロードの作成に失敗します。
  • 削除の順序:Pod → Deployment/StatefulSet → EIPPool → Network → Namespace。Namespace を削除すると、その配下のすべてのリソースが連鎖的に削除されます。
hcloud CLI の制約
  • Network の作成には Python ヘルパースクリプトを使用する必要があります:hcloud CLI では、ドットを含むアノテーションキー(network.alpha.kubernetes.io/default-security-group)を渡せません。ドット記法も --cli-jsonInput も使用できません。scripts/cci_network_helper.py を使用してください。
  • Namespace のアノテーションではハイフンへの置き換えが使えます:namespace.kubernetes.io/flavor のようなキーには、ハイフンを使用できます(namespace-kubernetes-io/flavor)。CCI が自動的に正規化します。この回避策は Namespace でのみ機能し、Network では機能しません。
  • 必ず --help でパラメーターを確認してください:CCI には数百ものパラメーターがあります。コマンドを組み立てる前に、hcloud CCI <Operation> --help を実行してください。ヘルプの出力が正式な情報源です。

これらのルールの詳細については、セキュリティ上の制約、hcloud CLI の制限事項、注意事項を参照してください。

標準的なワークフロー

1. Create Namespace (with flavor annotation)
2. Create Network (requires Python helper script for annotation — see hcloud CLI Limitations)
3. Create Deployment / StatefulSet / Pod (run workloads)
4. Query status, view logs
5. (Optional) Create EIPPool for Pod public IP access
6. Cleanup: delete workload → delete Network → delete Namespace

前提条件

1. hcloud CLI の要件(必須)
  • hcloud CLI がインストールされていること(バージョン >= 7.2.2)
  • hcloud version を実行して、インストールを確認してください
  • 初回使用時は、printf "y\n" | hcloud version を実行してプライバシーに関する声明に同意してください
2. 認証情報の設定

hcloud CLI は、2 つの認証情報モードに対応しています。詳細については、references/credential-configuration.md をご覧ください。

簡単な設定(いずれかを選択):

# Mode A — Long-term AK/SK
export HUAWEI_CLOUD_AK=<your-ak>
export HUAWEI_CLOUD_SK=<your-sk>
export HUAWEI_CLOUD_REGION=cn-north-4

# Mode B — Temporary AK/SK + SecurityToken
export HUAWEI_CLOUD_AK=<your-temp-ak>
export HUAWEI_CLOUD_SK=<your-temp-sk>
export HUAWEI_CLOUD_SECURITY_TOKEN=<your-security-token>
export HUAWEI_CLOUD_REGION=cn-north-4
  • セキュリティルール:AK/SK/SecurityToken の値は決して公開しないでください。存在確認のみに hcloud configure list を使用してください。

⚠️ 既知の制限事項 — Python ヘルパースクリプトの認証情報は hcloud CLI とは独立しています:Python ヘルパースクリプト(scripts/cci_network_helper.py)は、認証に環境変数 HW_ACCESS_KEY/HW_SECRET_KEY(および任意の HW_SECURITY_TOKEN)を使用します。これらは hcloud CLI の認証情報ソース(プロファイルまたは HUAWEI_CLOUD_AK/HUAWEI_CLOUD_SK)とは別のものです。HW_ACCESS_KEY/HW_SECRET_KEY の認証情報に CCI Network の作成に必要な IAM 権限がない場合、スクリプトは 403 エラーで失敗します。これらの変数には、十分な CCI 権限(例:CCI FullAccess)を持つ認証情報を設定してください。hcloud CLI は引き続き独自の認証情報ソースを使用します。ヘルパースクリプトを実行しても、その後の hcloud CLI コマンドには影響しません。

3. 検証チェック
hcloud version
hcloud configure list

セキュリティ上の制約

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

このスキルでは、破壊的な操作すべてに対して、2 段階の確認メカニズムを厳格に適用します。

破壊的な操作を実行する前に、必ずユーザーから明示的な確認を得る必要があります。手順は次のとおりです。

ステップ 1:プレビュー — コマンド、リソースの詳細、リスクに関する警告を表示します

ステップ 2:確認して実行 — ユーザーが明示的に確認した後にのみ実行します

確認が必要な操作
操作リスクレベル説明
Namespace の削除🔴 重大カスケード削除されます。この Namespace 配下のすべてのリソース(Network、Pod、Deployment など)が削除されます
Network の削除🟠 高Namespace と VPC の接続が切断され、実行中の Pod はネットワークを失います
Deployment の削除🟠 高ワークロードのすべてのレプリカが終了します
StatefulSet の削除🟠 高すべてのレプリカが終了し、PVC のデータが失われる可能性があります
Pod の削除🟠 高コンテナインスタンスが終了します
EIPPool の削除🟡 中Pod に割り当てられたパブリック IP が解放されます
認証情報のセキュリティ
  • 会話、コマンド、出力で AK/SK/SecurityToken の値を決して公開しないでください
  • 会話の中で AK/SK/SecurityToken を直接入力するようユーザーに決して求めないでください
  • 認証情報の状態確認には、hcloud configure list のみを使用してください(値ではなく、存在のみを確認します)
  • 明示的な AK/SK パラメーターよりも、プロファイルモードまたは環境変数を優先してください

コマンド形式の標準

CCI は、Kubernetes スタイルのネストされたパラメーターを使用する標準的な hcloud 形式に従います。

hcloud CCI <Operation> --param=value --cli-region=<region> --cli-output=json
CCI 固有のパラメーター規則

CCI のパラメーターは Kubernetes API の規約に従い、ドット記法を使用した深くネストされたオブジェクトで構成されます。

  1. アノテーションには {*} 形式を使用します:--metadata.annotations.namespace-kubernetes-io/flavor=general-computing
  2. ラベルには {*} 形式を使用します:--metadata.labels.app=my-app
  3. コンテナー配列は 1 から始まります:--spec.template.spec.containers.1.name=main --spec.template.spec.containers.1.image=nginx
  4. リソースには {*} 形式を使用します:--spec.template.spec.containers.1.resources.limits.cpu=500m
  5. セレクターの matchLabels には {*} 形式を使用します:--spec.selector.matchLabels.app=my-app
  6. 名前空間を指定する操作には --namespace が必要です:すべてのワークロード操作で名前空間を指定する必要があります

⚠️ 重要:CCI コマンドを作成する前に、必ず hcloud CCI <Operation> --help を実行して、正確なパラメーター名を確認してください。CCI には数百のパラメーターがあり、ヘルプの出力が正式な情報源です。

パラメーター形式の詳細

CCI のパラメーター形式に関する完全な規則と例については、references/parameter-format.md をご覧ください。

シナリオ別ルーティング

ユーザーの意図参照ドキュメント
Namespace の作成/クエリ/削除references/task-namespace-management.md
Network の作成/クエリ/削除references/task-network-management.md
Deployment の作成/クエリ/更新/削除/スケーリングreferences/task-deployment-management.md
StatefulSet の作成/クエリ/更新/削除references/task-statefulset-management.md
Pod の作成/クエリ/削除references/task-pod-management.md
EIPPool の作成/クエリ/削除references/task-eippool-management.md
ステータスのクエリ、ログとイベントの表示references/task-logs-and-status.md
ワークフロー全体(作成→実行→クリーンアップ)references/common-workflows.md
CCI のすべての操作のクイックリファレンスreferences/cci-operation-catalog.md
トラブルシューティングreferences/troubleshooting.md
IAM 権限references/iam-policies.md
検証手順references/verification-method.md
正しいパターンとエラーパターンの比較references/acceptance-criteria.md

基本コマンド

Namespace
# Create namespace (general-computing flavor)
hcloud CCI createCoreV1Namespace \
  --metadata.name=<ns-name> \
  --metadata.annotations.namespace-kubernetes-io/flavor=general-computing \
  --cli-region=<region \
  --cli-output=json

# List namespaces
hcloud CCI listCoreV1Namespace --cli-region=<region> --cli-output=json

# Read namespace details
hcloud CCI readCoreV1Namespace --name=<ns-name> --cli-region=<region> --cli-output=json

# Delete namespace (TWO-STEP CONFIRMATION REQUIRED)
hcloud CCI deleteCoreV1Namespace --name=<ns-name> --cli-region=<region>
Network

⚠️ hcloud CLI の制限:Network の作成には Python ヘルパースクリプトが必要です。hcloud CLI では、アノテーションキー network.alpha.kubernetes.io/default-security-group を渡せないためです(hcloud がドットをネストされた階層として扱います)。hcloud のバグにより、アノテーションは --dryrun には表示されても、実際のリクエストでは送信されないため、--cli-jsonInput を使う方法も機能しません。詳しくは、以下の hcloud CLI の制限 を参照してください。

⚠️ 認証情報の要件:Python ヘルパースクリプトは、HW_ACCESS_KEY/HW_SECRET_KEY(および任意で HW_SECURITY_TOKEN)環境変数を使用して認証します。これは、hcloud CLI の認証情報ソース(HUAWEI_CLOUD_AK/HUAWEI_CLOUD_SK またはそのプロファイルから読み取るもの)とは独立しています。HW_ACCESS_KEY/HW_SECRET_KEY の認証情報に CCI Network の作成権限がない場合、スクリプトは 403 エラーで失敗します。十分な IAM 権限(例:CCI FullAccess)があることを確認してください。スクリプトの実行後も、hcloud CLI コマンドは引き続き独自の認証情報ソースを使用するため、影響を受けません。

# Step 1: Get VPC subnet details (including neutron_network_id)
hcloud VPC ShowSubnet --vpc_id=<vpc-id> --subnet_id=<subnet-id> --cli-region=<region> --cli-output=json

# Step 2: Create network via Python helper script
python scripts/cci_network_helper.py create \
  --namespace=<ns-name> \
  --name=<network-name> \
  --vpc-id=<vpc-id> \
  --subnet-id=<subnet-id> \
  --network-id=<neutron-network-id> \
  --security-group-id=<sg-id> \
  --region=<region>

# Step 3: Check network status until Active
hcloud CCI readNetworkingCciIoV1beta1NamespacedNetworkStatus \
  --name=<network-name> \
  --namespace=<ns-name> \
  --cli-region=<region> \
  --cli-output=json

# List networks
hcloud CCI listNetworkingCciIoV1beta1NamespacedNetwork \
  --namespace=<ns-name> \
  --cli-region=<region> \
  --cli-output=json

Network の必須 spec フィールド:Network の作成には、attachedVPC、subnetID、networkType、および networkID(neutron ネットワーク ID)が必要です。networkID フィールドは必須です。これは hcloud VPC ShowSubnet で取得する neutron ネットワーク ID です。

Network の必須アノテーション:network.alpha.kubernetes.io/default-security-group(CCI Network のセキュリティグループで正しいアノテーションキーです。security-group-id ではありません)。このアノテーションには、セキュリティグループ ID を設定する必要があります。

Deployment
# Create deployment
hcloud CCI createAppsV1NamespacedDeployment \
  --namespace=<ns-name> \
  --metadata.name=<deploy-name> \
  --spec.replicas=1 \
  --spec.selector.matchLabels.app=<deploy-name> \
  --spec.template.metadata.labels.app=<deploy-name> \
  --spec.template.spec.containers.1.name=<container-name> \
  --spec.template.spec.containers.1.image=<image> \
  --spec.template.spec.containers.1.resources.limits.cpu=500m \
  --spec.template.spec.containers.1.resources.limits.memory=1Gi \
  --spec.template.spec.containers.1.resources.requests.cpu=500m \
  --spec.template.spec.containers.1.resources.requests.memory=1Gi \
  --cli-region=<region> \
  --cli-output=json

# Scale deployment
hcloud CCI patchAppsV1NamespacedDeploymentScale \
  --name=<deploy-name> \
  --namespace=<ns-name> \
  --spec.replicas=<new-replicas> \
  --cli-region=<region>

# Read deployment status
hcloud CCI readAppsV1NamespacedDeploymentStatus \
  --name=<deploy-name> \
  --namespace=<ns-name> \
  --cli-region=<region> \
  --cli-output=json
StatefulSet
# Create statefulset
hcloud CCI createAppsV1NamespacedStatefulSet \
  --namespace=<ns-name> \
  --metadata.name=<sts-name> \
  --spec.replicas=1 \
  --spec.selector.matchLabels.app=<sts-name> \
  --spec.template.metadata.labels.app=<sts-name> \
  --spec.template.spec.containers.1.name=<container-name> \
  --spec.template.spec.containers.1.image=<image> \
  --spec.template.spec.containers.1.resources.limits.cpu=500m \
  --spec.template.spec.containers.1.resources.limits.memory=1Gi \
  --cli-region=<region> \
  --cli-output=json

# Read statefulset status
hcloud CCI readAppsV1NamespacedStatefulSetStatus \
  --name=<sts-name> \
  --namespace=<ns-name> \
  --cli-region=<region> \
  --cli-output=json
Pod
# Create pod (single container instance)
hcloud CCI createCoreV1NamespacedPod \
  --namespace=<ns-name> \
  --metadata.name=<pod-name> \
  --spec.containers.1.name=<container-name> \
  --spec.containers.1.image=<image> \
  --spec.containers.1.resources.limits.cpu=500m \
  --spec.containers.1.resources.limits.memory=1Gi \
  --cli-region=<region> \
  --cli-output=json

# Read pod status
hcloud CCI readCoreV1NamespacedPodStatus \
  --name=<pod-name> \
  --namespace=<ns-name> \
  --cli-region=<region> \
  --cli-output=json

# Read pod logs
hcloud CCI readCoreV1NamespacedPodLog \
  --name=<pod-name> \
  --namespace=<ns-name> \
  --container=<container-name> \
  --cli-region=<region>
EIPPool
# Create EIPPool (for pod public IP access — auto-create EIPs)
hcloud CCI createCrdYangtseCniV1NamespacedEIPPool \
  --namespace=<ns-name> \
  --apiVersion=crd.yangtse.cni/v1 \
  --kind=EIPPool \
  --metadata.name=<eippool-name> \
  --spec.amount=1 \
  --spec.eipAttributes.networkType=5_bgp \
  --spec.eipAttributes.ipVersion=4 \
  --spec.eipAttributes.bandwidth.shareType=PER \
  --spec.eipAttributes.bandwidth.size=5 \
  --spec.eipAttributes.bandwidth.chargeMode=bandwidth \
  --spec.eipAttributes.bandwidth.name=<bw-name> \
  --cli-region=<region> \
  --cli-output=json

# Read EIPPool status
hcloud CCI readCrdYangtseCniV1NamespacedEIPPoolStatus \
  --name=<eippool-name> \
  --namespace=<ns-name> \
  --cli-region=<region> \
  --cli-output=json

EIPPool の必須フィールド:--apiVersion=crd.yangtse.cni/v1 と --kind=EIPPool は必須です。spec.eipAttributes.networkType も必須です(値:動的 BGP の場合は 5_bgp、専用ロードバランシングの場合は 5_gray)。EIP を自動作成する場合は、spec.eipAttributes.bandwidth.chargeMode と name も必要です。

Pod の EIP バインド:EIPPool を Pod に割り当てるには、アノテーション yangtse.io/eippool=<eippool-name> を追加します(ハイフンの回避策として、--metadata.annotations.yangtse-io/eippool=<eippool-name> を使用してください)。

VPC/サブネットの前提条件

CCI ワークロードは、既存の VPC サブネットにマッピングされる Network 内で実行されます。Network を作成する前に、利用可能な VPC とサブネットを照会し、neutron ネットワーク ID(Network の作成に必要)を取得してください。

# List VPCs
hcloud VPC ListVpcs --cli-region=<region> --cli-output=json

# List subnets
hcloud VPC ListSubnets --cli-region=<region> --cli-output=json

# Get subnet details (including neutron_network_id — REQUIRED for Network creation)
hcloud VPC ShowSubnet --vpc_id=<vpc-id> --subnet_id=<subnet-id> --cli-region=<region> --cli-output=json

⚠️ VPC サブネットの CIDR 制限:VPC とサブネットの CIDR に 10.247.0.0/16 を指定してはいけません。この範囲は CCI によって Service ネットワーキング用に予約されています。この範囲を使用すると、IP の競合が発生し、ワークロードの作成に失敗します。

⚠️ neutron_network_id は必須です:VPC ShowSubnet の出力に含まれる neutron_network_id の値を、Network spec の networkID フィールドに指定します。このフィールドは Network の作成に必須です。

Namespace のフレーバータイプ

フレーバーの値説明用途
general-computing汎用コンピューティングタイプ標準的なワークロード、ウェブサービス、マイクロサービス
gpu-acceleratedGPU アクセラレーションタイプAI、ML、ハイパフォーマンスコンピューティング

リソースクォータと制限

CCI は Namespace ごとにリソースクォータを適用します。一般的なデフォルト値は次のとおりです。

リソースデフォルトの上限
Podsリージョンによって異なります
Pod あたりの CPU0.25~8 コア
Pod あたりのメモリ0.5Gi~32Gi
PVCs異なります

現在のクォータを照会します。

hcloud CCI listCoreV1NamespacedResourceQuota --namespace=<ns-name> --cli-region=<region> --cli-output=json

出力形式

JSON(推奨)
hcloud CCI <Operation> --cli-region=<region> --cli-output=json
Table(手動での確認用)
hcloud CCI <Operation> --cli-region=<region> --cli-output=table
JMESPath によるフィルタリング
# Filter deployment status
hcloud CCI readAppsV1NamespacedDeploymentStatus --name=<deploy> --namespace=<ns> --cli-region=<region> --cli-output=json --cli-query="{replicas:status.replicas,ready:status.readyReplicas,available:status.availableReplicas}"

# Filter pod phase
hcloud CCI readCoreV1NamespacedPodStatus --name=<pod> --namespace=<ns> --cli-region=<region> --cli-output=json --cli-query="status.phase"

--cli-region= --cli-output=json
--cli-query="status.phase"


## Debugging

Add `--cli-debug=true` to any command for detailed request/response information:

```bash
hcloud CCI <Operation> --cli-debug=true --cli-region=<region>

パラメーターの確認

CCI の操作を実行する前に、次のパラメーターを確認してください。

パラメーター必須説明取得元
--namespaceはいCCI Namespace 名既存のもの、または新規作成
--cli-regionはいHuawei Cloud のリージョン IDHUAWEI_CLOUD_REGION または設定
--metadata.nameはいリソース名ユーザー指定
フレーバーのアノテーションはい(Namespace)general-computing または gpu-acceleratedユーザーの選択
VPC/サブネット IDはい(Network)VPC ListVpcs/VPC ShowSubnet の結果既存のリソースを照会
neutron_network_idはい(Network)VPC ShowSubnet の応答照会結果

CCI コマンドを実行する前に hcloud CCI <Operation> --help を実行してパラメーター名を確認し、上の表と照合してください。

注意事項

詳しいトラブルシューティングについては、references/troubleshooting.md を参照してください。

クイックリファレンス:

問題原因すぐにできる対処
Namespace の作成に失敗するフレーバーのアノテーションがない--metadata.annotations.namespace-kubernetes-io/flavor=general-computing を追加します
Network の作成に失敗する(400/403)VPC/サブネット/アノテーション/networkID がない、または認証情報のスコープが不十分サブネット/neutron ID とセキュリティグループを確認します。Python ヘルパーを使用します。長期 AK/SK(Mode A)を使用します
Pod が Pending のままになるNamespace に Network がない先に Network を作成します
403 権限エラーIAM 権限が不十分references/iam-policies.md を確認します
深くネストしたパラメーターのエラードット表記が誤っている--help で正確なパラメーターパスを確認します
ドットを含むアノテーションが渡されないhcloud CLI の制限Network の作成には Python ヘルパースクリプトを使用します
EIPPool の作成に失敗する(400/422)apiVersion/kind/networkType がない必須フィールドをすべて追加します(EIPPool のセクションを参照)
limit/request の不一致CCI では limits == requests が必要requests を limits と同じ値に設定します(例:どちらも 500m/1Gi)

検証方法

完全な検証手順については、references/verification-method.md を参照してください。

クイックチェックリスト:

手順コマンド期待される結果
Namespacehcloud CCI readCoreV1Namespace --name=<ns> --cli-region=<region>status.phase=Active
Networkhcloud CCI readNetworkingCciIoV1beta1NamespacedNetworkStatus --name=<net> --namespace=<ns>status.phase=Active
Deploymenthcloud CCI readAppsV1NamespacedDeploymentStatus --name=<deploy> --namespace=<ns>readyReplicas >= 1
Podhcloud CCI readCoreV1NamespacedPodStatus --name=<pod> --namespace=<ns>status.phase=Running

ベストプラクティス

  1. Namespace の分離:リソースの競合を避けるため、チームやプロジェクトごとに異なる Namespace を使用します
  2. EIPPool のオンデマンド作成:Pod のパブリック IP アクセスが必要な場合にのみ EIPPool を作成します

hcloud CLI の制限事項

⚠️ 重要:hcloud CLI には、CCI の操作に影響する既知の制限があります。Network を正常に作成するには、これらを理解しておくことが不可欠です。

制限事項影響回避策
CLI パラメーターでドット(.)を含むアノテーションキーを渡せないhcloud はパラメーター名のドットをネストされたオブジェクト階層として扱うため、--metadata.annotations.network.alpha.kubernetes.io/default-security-group は単一のアノテーションキーではなく、深くネストされた構造を作成しますNetwork の作成には Python ヘルパースクリプト(scripts/cci_network_helper.py)を使用します
--cli-jsonInput ではアノテーションを正しく送信できないhcloud のバグにより、アノテーションは --dryrun の出力には表示されますが、実際の API リクエストでは送信されません代わりに Python ヘルパースクリプトを使用します
--cli-jsonInput には ASCII エンコーディングが必要UTF-8 BOM があると JSON の解析に失敗しますJSON 入力ファイルはプレーンな ASCII(BOM なし)で保存してください
Namespace のアノテーションではハイフンへの置き換えが可能namespace.kubernetes.io/flavor のようなキーでは、ハイフン(namespace-kubernetes-io/flavor)を使用でき、CCI が自動的に元の形式に正規化しますこの回避策は Namespace でのみ機能し、Network では機能しません

Network に Python ヘルパーが必要な理由:Network のアノテーションキー network.alpha.kubernetes.io/default-security-group は、hcloud CLI では(ドット表記でも --cli-jsonInput でも)渡せません。Namespace のアノテーションとは異なり、CCI は Network リソースではハイフンに置き換えられたキーを正規化しません。Python ヘルパースクリプト(scripts/cci_network_helper.py)は、正しい API リクエスト本文を直接構築します。

参考資料

ドキュメント説明
task-namespace-management.mdNamespace のライフサイクル操作
task-network-management.mdNetwork のライフサイクル操作
task-deployment-management.mdDeployment のライフサイクル操作
task-statefulset-management.mdStatefulSet のライフサイクル操作
task-pod-management.mdPod のライフサイクル操作
task-eippool-management.mdEIPPool の操作
task-logs-and-status.mdステータスの照会とログの表示
cci-operation-catalog.mdCCI 操作の完全なクイックリファレンス
parameter-format.mdCCI パラメーター形式のルールと例
common-workflows.mdワークフローの全手順
credential-configuration.md認証情報の設定(長期 AK/SK および一時 AK/SK+SecurityToken)
iam-policies.mdIAM 権限ポリシー
troubleshooting.mdエラーのトラブルシューティング
verification-method.md検証手順
acceptance-criteria.md正常パターンとエラーパターンの比較
scripts/cci_network_helper.pyNetwork 作成用の Python ヘルパースクリプト(hcloud CLI のアノテーション制限を回避)

コメント