huawei-cloud-cci-instance-management について
hcloud CLI とネットワーク作成用 Python ヘルパーで、Huawei Cloud CCI コンテナインスタンスのライフサイクルを管理するスキルです。名前空間、ネットワーク、ワークロード、状態、ログを扱い、削除前に確認を求めます。
主な機能
- 01名前空間とネットワークの管理
- 02Pod とワークロードの作成・管理
- 03EIPPool によるパブリック IP アクセス管理
- 04状態、ログ、イベントの確認
- 05削除前の確認必須
活用シーン
- 01CCI 名前空間へのワークロードのデプロイ
- 02実行中インスタンスとログの確認
- 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.mdcci-operation-catalog.mdcommon-workflows.mdcredential-configuration.mdiam-policies.mdparameter-format.mdtask-deployment-management.mdtask-eippool-management.mdtask-logs-and-status.mdtask-namespace-management.mdtask-network-management.mdtask-pod-management.mdtask-statefulset-management.mdtroubleshooting.mdverification-method.mdscripts/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 の規約に従い、ドット記法を使用した深くネストされたオブジェクトで構成されます。
- アノテーションには
{*}形式を使用します:--metadata.annotations.namespace-kubernetes-io/flavor=general-computing - ラベルには
{*}形式を使用します:--metadata.labels.app=my-app - コンテナー配列は 1 から始まります:
--spec.template.spec.containers.1.name=main --spec.template.spec.containers.1.image=nginx - リソースには
{*}形式を使用します:--spec.template.spec.containers.1.resources.limits.cpu=500m - セレクターの matchLabels には
{*}形式を使用します:--spec.selector.matchLabels.app=my-app - 名前空間を指定する操作には
--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-accelerated | GPU アクセラレーションタイプ | AI、ML、ハイパフォーマンスコンピューティング |
リソースクォータと制限
CCI は Namespace ごとにリソースクォータを適用します。一般的なデフォルト値は次のとおりです。
| リソース | デフォルトの上限 |
|---|---|
| Pods | リージョンによって異なります |
| Pod あたりの CPU | 0.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 のリージョン ID | HUAWEI_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 を参照してください。
クイックチェックリスト:
| 手順 | コマンド | 期待される結果 |
|---|---|---|
| Namespace | hcloud CCI readCoreV1Namespace --name=<ns> --cli-region=<region> | status.phase=Active |
| Network | hcloud CCI readNetworkingCciIoV1beta1NamespacedNetworkStatus --name=<net> --namespace=<ns> | status.phase=Active |
| Deployment | hcloud CCI readAppsV1NamespacedDeploymentStatus --name=<deploy> --namespace=<ns> | readyReplicas >= 1 |
| Pod | hcloud CCI readCoreV1NamespacedPodStatus --name=<pod> --namespace=<ns> | status.phase=Running |
ベストプラクティス
- Namespace の分離:リソースの競合を避けるため、チームやプロジェクトごとに異なる Namespace を使用します
- 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.md | Namespace のライフサイクル操作 |
| task-network-management.md | Network のライフサイクル操作 |
| task-deployment-management.md | Deployment のライフサイクル操作 |
| task-statefulset-management.md | StatefulSet のライフサイクル操作 |
| task-pod-management.md | Pod のライフサイクル操作 |
| task-eippool-management.md | EIPPool の操作 |
| task-logs-and-status.md | ステータスの照会とログの表示 |
| cci-operation-catalog.md | CCI 操作の完全なクイックリファレンス |
| parameter-format.md | CCI パラメーター形式のルールと例 |
| common-workflows.md | ワークフローの全手順 |
| credential-configuration.md | 認証情報の設定(長期 AK/SK および一時 AK/SK+SecurityToken) |
| iam-policies.md | IAM 権限ポリシー |
| troubleshooting.md | エラーのトラブルシューティング |
| verification-method.md | 検証手順 |
| acceptance-criteria.md | 正常パターンとエラーパターンの比較 |
| scripts/cci_network_helper.py | Network 作成用の Python ヘルパースクリプト(hcloud CLI のアノテーション制限を回避) |