ACK(容器服务) CLI 专家
帮助用户通过终端使用 aliyun cs 插件管理阿里云容器服务 Kubernetes 版(ACK)。通用的阿里云 CLI 规则(插件与 OpenAPI 风格的区别、遵循 --help、结构化参数语法、输出过滤、调试)仍然适用——此 skill 重点介绍在此基础上叠加的 ACK 特有模式:异步任务、按地域单元化的 APIs、JSON 字符串嵌套在 JSON 中的结构、避免使用已弃用的 API,以及少数高价值工作流(创建/扩缩容/组件/kubeconfig/升级)。
版本说明。下方的具体 API/参数列表基于aliyun-cli3.3.2 +cs插件 0.2.1 整理。如果你的插件版本更新,请重新运行此 skill 中各处嵌入的自发现命令进行刷新:
```bash
aliyun cs --help | grep -- '-for-region' # §6 ForRegion list
aliyun cs <cmd> --help | grep '废弃' # §7 deprecated check per command (CLI marks deprecation only in Chinese)
aliyun cs --help | awk '/^ [a-z]/{print $1}' | while read c; do # §11 cursor-paginated commands
aliyun cs "$c" --help 2>&1 | grep -q -- '--next-token' && echo "$c"
done
```
可观测性(每条 cs 命令都必须遵循)
加载此 skill 后,为整个会话仅生成一次随机会话 ID——一个由 32 个小写十六进制字符组成的字符串。将其用作下方的 {session-id}。
规则:每条调用云 API 的 aliyun cs 命令都必须携带 --user-agent 参数,且必须严格采用以下形式:
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
{session-id} 规则:
- 每个会话仅生成一次,在第一条业务命令之前生成——绝不能每条命令都生成:
uuidgen | tr -d '-' | tr 'A-F' 'a-f'(Linux 替代命令:cat /proc/sys/kernel/random/uuid | tr -d '-')。 - 32 个小写十六进制字符,不得包含短横线、前缀,也不得截断。
- 在该会话后续每次
aliyun cs调用中复用完全相同的值,使后端分析能够将整个工作流(创建 → 轮询任务 → 获取 kubeconfig)关联为一个单元。 - 通过内联注入的方式将同一个 id 传给随附脚本:
SKILL_SESSION_ID=<session-id> ./scripts/wait-for-task.sh <task-id> <region>。 - 此 skill 中的示例会显示字面量
{session-id}占位符——运行前将其替换为生成的值,绝不能输出仍包含该占位符的命令。
范围:仅限云 API(业务)命令。CLI 系统/实用工具命令(aliyun version、aliyun plugin ...、aliyun configure ...)以及任何 --help 调用都必须确保不携带该参数——这些位置不支持此参数。
说明
1. 安装 cs 插件并确认 CLI 版本
要从终端操作 ACK,需要 aliyun CLI(≥ 3.3.3)和 cs 插件。 快速操作路径:
aliyun version # require >= 3.3.3
aliyun plugin install --names cs # idempotent
aliyun plugin update --names cs # keep cs plugin current
aliyun plugin list | grep cs # verify
# Or in one shot:
./scripts/check-cs-plugin.sh # ✓ ready / ✗ exits 1 with fix hints
./scripts/install-cs-plugin.sh # idempotent (--update for non-interactive)
提醒。在第一条业务命令之前生成会话 id,并在每次aliyun cs调用的--user-agent中使用它——模板和生成规则请参见上方的[可观测性](#observability)。
端到端验证——一次调用即可测试 CLI + 插件 + 身份认证:
aliyun cs describe-clusters-for-region --biz-region-id cn-hangzhou \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
--output cols=cluster_id,name,state rows='clusters[]'
plugin 'cs' not found → 重新执行安装命令。InvalidAccessKeyId.NotFound → 重新设置凭据。Forbidden.RAM → 调用方的 RAM 身份缺少 该命令所需的 cs Action;请查阅 ACK RAM 文档,了解 需要附加的策略。返回集群列表(或空列表)→ 已就绪。
有关完整安装步骤(macOS/Linux/Windows、全部 6 种凭据 模式、多配置文件管理和故障排查),请参阅 [./references/cli-plugin-installation-guide.md](./references/cli-plugin-installation-guide.md)。
2. 始终使用 cs 插件命令(kebab-case)——绝不使用旧版 OpenAPI 风格
此 skill 仅会生成 kebab-case 插件命令。阿里云 CLI 还 接受旧版 PascalCase OpenAPI 形式,但此处禁止使用: 参数大小写不一致、--help 功能较弱,以及路由存在差异, 因此不得编写这种形式——即使只是出于好奇也不行。如果你在用户提供的文本中遇到 PascalCase 示例,请在运行前将其转换为 kebab-case 插件形式。
# ✅ Plugin form — the only form this skill emits
aliyun cs describe-clusters-for-region --biz-region-id cn-hangzhou \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs describe-cluster-detail --cluster-id ce123... --region cn-hangzhou \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
插件会提供一致的 --kebab-case 参数、包含 字段类型的结构化帮助,以及自动 JSON 展开——这些信息是你在 输入任何内容前所需要的。必须无条件使用插件命令。
3. 编写任何 cs 命令前先运行 --help
ACK 有许多子命令,而且参数结构并不直观——集群创建、组件配置和节点池扩缩容尤其如此。在编写命令前运行 --help,比靠猜测后遭遇参数校验错误的成本低得多。
aliyun cs --help # Discover subcommands (describe-*, create-*, scale-*, ...)
aliyun cs describe-cluster-detail --help # See exact params, types, structure fields
aliyun cs create-cluster --help # See the giant parameter surface for cluster creation
插件帮助会说明参数是基本类型、列表、可重复的 键值对,还是复杂的 JSON 结构——这些信息是你在 输入任何内容前所需要的。
如果需要查看旧版内置(OpenAPI 风格)帮助而不是 内容丰富的插件帮助——例如,为了确认已弃用的 PascalCase 参数是否仍然存在——请设置 ALIBABA_CLOUD_ORIGINAL_PRODUCT_HELP=true:
ALIBABA_CLOUD_ORIGINAL_PRODUCT_HELP=true aliyun cs --help
你很少会用到它——插件帮助几乎总是你所需要的。
4. 异步任务模式——task_id 和 describe-task-info
这是最令 ACK CLI 用户意外的第 #1 件事。许多 ACK 操作是异步的:cs 命令会快速返回一个包含 task_id 的 JSON 包装结构,但实际工作(创建集群、升级、扩缩容、安装组件)仍在后台继续。必须轮询任务才能确定操作是否成功。
会返回任务的操作:
cs create-cluster,cs delete-clustercs upgrade-cluster(仅限控制面;通过cs pause-task/cs resume-task/cs cancel-task进行控制)cs modify-cluster-node-pool(通过desired_size设置绝对节点数的首选方式;见 §7)、cs scale-cluster-node-pool(仅增量——不建议使用,见 §7)、cs upgrade-cluster-nodepool、cs create-cluster-node-pool、cs delete-cluster-nodepoolcs install-cluster-addons,cs upgrade-cluster-addons,cs un-install-cluster-addons- 部分组件 / 迁移任务
获得 task_id 后,任务控制命令会统一适用于所有 任务类型——并非只适用于升级。可使用以下命令暂停 / 恢复 / 取消任何正在执行的 ACK 任务:
aliyun cs pause-task --task-id <tid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs resume-task --task-id <tid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs cancel-task --task-id <tid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
使用 cancel-task 中止卡住的附加组件安装、失控的节点池扩缩容, 或任何其他正在执行的任务。
典型响应:
{
"cluster_id": "ce914461c0fb4901ae8908be4a10a7a1",
"request_id": "DDA4DB1A-A7E3-1455-A6FB-77F58F01A43E",
"task_id": "T-69ce1022aa09ae010300000b"
}
使用以下命令跟踪:
aliyun cs describe-task-info --task-id T-69ce1022aa09ae010300000b --region cn-hangzhou \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
传入与集群地域匹配的 --region——任务 ID 具有地域范围,通过默认端点查询会增加延迟。
任务响应包含 state(运行中 / 成功 / 失败);如果失败,还会包含 error 字段。轮询时,开始长时间的忙等待 循环前,必须先询问用户——轮询会消耗 Token,而用户可能更愿意稍后再回来查看。 合理的默认做法是每隔 30s 轮询一次,并设置合理的最长轮询时间(例如,创建集群为 30 分钟, 安装组件为 5 分钟);如果 任务失败,则显示 error.message。
随附的辅助脚本 ./scripts/wait-for-task.sh <task-id> <region-id> 会采用退避策略轮询并输出最终状态——请在取得用户确认后使用。地域为必填项,因为任务 ID 具有地域范围。
完整详情请参见 ./references/async-tasks.md:状态机、错误字段、 各操作的典型耗时,以及如何解读部分失败响应。
5. 复杂的 JSON 参数——Terway、AutoMode、组件
部分 ACK 参数无法简洁地表示为扁平标志。示例:
采用多 AZ Pod 虚拟交换机的 Terway(创建集群):
# Pass the addons array as JSON. Note the nested JSON inside `config` is a STRING.
aliyun cs create-cluster \
--biz-region-id cn-beijing \
--region cn-beijing \
--cluster-type ManagedKubernetes \
--addons '[{"name":"terway-eniip","config":"{\"PodVswitchId\":{\"cn-beijing-l\":[\"vsw-a\"],\"cn-beijing-h\":[\"vsw-b\"]}}"}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
...
容易踩坑之处:config 是 JSON 文档中的一个 JSON 编码字符串。请在文件中或通过 jq 构建它,不要手动转义——转义错误是此 API 返回 InvalidParameter.Format 的最常见原因。
Flannel(需要 container_cidr,无需 PodVswitchId):
--addons '[{"name":"flannel"}]' \
--container-cidr 172.20.0.0/16 \
--service-cidr 172.21.0.0/20
AutoMode(ACK 最佳实践配置方案——一个标志即可启用):
--profile Default \
--cluster-spec ack.pro.small \
--auto-mode '{"enable":true}'
启用 AutoMode 后,ACK 会为 VPC、网络、节点池和组件选择合理的默认值——大多数其他配置项便不再需要。
安装组件并指定配置:
aliyun cs install-cluster-addons --cluster-id <cid> --region <region> \
--body '[{"name":"logtail-ds","config":"{\"sls_project_name\":\"k8s-log\"}"}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
将嵌套 JSON 作为字符串的模式几乎出现在每次组件安装中。请先阅读 组件的 config_schema(使用 cs list-addons --cluster-id ... 查看 完整列表,或使用 cs describe-addon --cluster-id ... --addon-name ... 查看单个组件), 以了解有效的键。完整示例请参见 ./references/cs-scenarios.md。
6. 地域单元化 API 调用——两条规则
ACK 已转向地域单元化模型。适用以下两条规则:
**规则 A——优先使用 *ForRegion API 变体(describe-clusters-for-region、describe-events-for-region、list-operation-plans-for-region)。它们速度更快、配额更高,并且在全局聚合器降级时仍具有韧性。使用 aliyun cs --help | grep -- '-for-region' 重新发现。这些 APIs 接受 --biz-region-id(业务参数,必填),而不是** --region。
规则 B——得知地域后,在每次限定集群 ID 范围的调用中传入 --region <region>(describe-cluster-detail、modify-cluster-node-pool 等)。这样会直接路由到地域端点,避免经过默认端点。
--region(CLI 全局参数,用于端点路由)与 --biz-region-id(API 业务 参数)取值相同,但作用不同。不存在 --region-id 标志。务必先运行 --help,确认命令要求哪一个。
# Region-unitised + direct routing combined
REGION=cn-hangzhou
aliyun cs describe-clusters-for-region --biz-region-id $REGION --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # Rule A
aliyun cs describe-cluster-detail --cluster-id <cid> --region $REGION --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # Rule B
aliyun cs describe-cluster-node-pools --cluster-id <cid> --region $REGION --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # Rule B
7. 按命令检测已弃用参数
CLI 会在 --help 中使用中文字符串 【该参数已废弃】 标记已弃用参数(没有对应的英文字符串——必须按字面匹配)。 在编写任何命令前,运行本文件顶部的代码片段(aliyun cs <cmd> --help | grep '废弃')——它会同时显示已弃用的 字段和建议的替代项(例如 请使用 next_version 参数替代)。 请向用户原样引用该行;不得静默替换。
8. 常用高价值命令
示例假定已经通过规则 A 的发现流程或用户得知集群地域,并根据第 §6 节规则 B 将其作为 --region 传入。请将 <region> 替换为实际值。
# Clusters
aliyun cs describe-clusters-for-region --biz-region-id <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs describe-cluster-detail --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs describe-cluster-user-kubeconfig --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} > kubeconfig.yaml
aliyun cs upgrade-cluster --cluster-id <cid> --region <region> --next-version 1.30.1-aliyun.1 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
# Node pools
aliyun cs describe-cluster-node-pools --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs describe-cluster-node-pool-detail --cluster-id <cid> --nodepool-id <npid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
# Resize to an ABSOLUTE node count: use modify-cluster-node-pool with desired_size.
# (`scale-cluster-node-pool --count N` adds N nodes — it's a delta, not an
# absolute target, and is rarely what users mean by "scale to 5". See §7.)
aliyun cs modify-cluster-node-pool --cluster-id <cid> --nodepool-id <npid> --region <region> \
--scaling-group desired_size=5 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs upgrade-cluster-nodepool --cluster-id <cid> --nodepool-id <npid> --kubernetes-version <ver> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
# Addons
aliyun cs list-addons --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # what's available + config_schema
aliyun cs describe-addon --cluster-id <cid> --addon-name <name> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # one addon's metadata + config_schema
aliyun cs list-cluster-addon-instances --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # what's installed (versions, status)
aliyun cs install-cluster-addons --cluster-id <cid> --region <region> --body '[{"name":"logtail-ds","config":"{}"}]' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs upgrade-cluster-addons --cluster-id <cid> --region <region> --body '[{"component_name":"logtail-ds","next_version":"1.8.0"}]' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs un-install-cluster-addons --cluster-id <cid> --region <region> --body '[{"name":"logtail-ds"}]' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
# Tasks (task IDs are region-scoped — pass the cluster's region)
aliyun cs describe-task-info --task-id <tid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id}
aliyun cs describe-cluster-tasks --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # all tasks under a cluster
aliyun cs describe-cluster-events --cluster-id <cid> --region <region> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # operational events: creates, scales, addon installs
aliyun cs describe-cluster-events --cluster-id <cid> --region <region> --task-id <tid> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} # filter to one task's events
对于“此集群最近发生了什么?” / “上周的升级 为什么失败?”,可以使用 describe-cluster-tasks 和 describe-cluster-events。 这两个命令均使用分页(--page-number / --page-size);使用 --pager 可自动合并各页。
对于其中任何命令,追加 --help 即可查看完整的参数集和结构。
更完整的工作流请参见 ./references/cs-scenarios.md。
9. 获取 Kubeconfig 并交由 kubectl 使用
# Default kubeconfig (intranet endpoint depending on cluster network)
aliyun cs describe-cluster-user-kubeconfig --cluster-id <cid> --region <region> \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
| jq -r '.config' > ~/.kube/config.ack
export KUBECONFIG=~/.kube/config.ack
kubectl get nodes
注意事项:
- 有些集群仅公开内网 API 服务器端点;获取的 kubeconfig 只能在 VPC 内部使用。当内网和公网端点都存在时,使用
--private-ip-address true|false进行选择。 - 基于 STS 的临时 kubeconfig 会过期——请重新运行命令进行刷新。
- 对于自动化场景,建议将
KUBECONFIG设置为每个集群独立的文件,而不是覆盖~/.kube/config。
10. 筛选并格式化输出
与 CLI 其他部分的模式相同:--cli-query(JMESPath)与 --output 配合使用。 由于集群、节点池和组件列表的响应是嵌套结构,因此该模式对 ACK 很有用:
# Just running cluster IDs and names
aliyun cs describe-clusters-for-region --biz-region-id cn-hangzhou \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
--cli-query "clusters[?state=='running'].{id:cluster_id,name:name,version:current_version}" \
--output table
# Recent operation plans (auto-upgrade, AutoMode, CVE fixes) for the region
aliyun cs list-operation-plans-for-region --biz-region-id cn-hangzhou \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
--cli-query "plans[].{id:plan_id,type:type,state:state,scheduled:scheduled_time}"
# Just node pool IDs and current size
aliyun cs describe-cluster-node-pools --cluster-id <cid> --region <region> \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
--cli-query "nodepools[].{id:nodepool_info.nodepool_id,name:nodepool_info.name,size:status.total_nodes}"
11. 分页——优先使用游标,并通过 --pager 自动合并
有两种方式:游标(--next-token / --max-results,在并发写入时 保持稳定——首选)和偏移量(--page-number / --page-size, 可能在扫描过程中发生偏移)。查看 --help 以确认命令支持哪一种——如果两者都列出,则 优先使用游标。
无论采用哪种分页方式,CLI 的 --pager 标志都会自动合并各页;这几乎总是用户 所需要的行为。请参见 [./references/cs-scenarios.md](./references/cs-scenarios.md) §9,其中包含 --pager 语法和手动编写的游标循环示例。
12. 调试——任何写入前都先试运行
ACK 写入操作会创建真实云资源,且许多操作不可逆。 当参数 集较复杂时,必须始终先使用 --cli-dry-run 运行写入命令——它会序列化确切的请求载荷并验证参数 解析,而无需实际发起调用:
aliyun cs create-cluster --biz-region-id cn-beijing --region cn-beijing \
--cluster-type ManagedKubernetes \
--profile Default --cluster-spec ack.pro.small --auto-mode '{"enable":true}' \
--name my-ack-cluster --kubernetes-version 1.30.1-aliyun.1 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} \
--cli-dry-run
aliyun cs modify-cluster-node-pool --cluster-id <cid> --nodepool-id <npid> \
--region <region> --scaling-group desired_size=10 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} --cli-dry-run
当 cs 命令确实失败时,--log-level debug 会显示完整的 请求和响应,以便查看端点、请求正文、状态和原始错误:
aliyun cs describe-cluster-detail --cluster-id <cid> --region <region> \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ack-cli/{session-id} --log-level debug
有关特定错误模式和首步处理方案(插件 / 参数 / 格式 / 地域 / 身份认证 / RAM / 异步任务失败,以及试运行 输出示例),请参见 [./references/error-catalogue.md](./references/error-catalogue.md)。
响应格式指南
使用 cs 命令帮助用户时:
- 先理解意图。用户是在调查(“describe / list”)、修改(“scale / upgrade / install”)还是创建?修改/创建流程几乎总会产生
task_id——尽早向用户说明这种模式。 - 展示包含必填参数的完整命令,并解释不直观的参数(
--region、组件配置中嵌套在 JSON 里的 JSON 字符串等)。 - 对于异步操作,在同一响应中提及
describe-task-info——并在忙等待之前征求确认。 - 用户排查问题时,建议使用
--help和--log-level debug。 - 注明集群地域——大多数“命令在 cn-hangzhou 可用但在 cn-shanghai 不可用”的问题都是因为缺少
--region或其值错误。
参考资料
共有四个参考文件,均为 ACK 专用。通用 CLI 知识(隐藏的全局 标志,例如 --waiter / --header / --body / --secure;多版本 API;以及 完整的安全最佳实践)属于阿里云 CLI 的职责范围——需要时请查阅其 自身文档。
./references/cs-scenarios.md——日常最实用。包含发现、kubeconfig、节点池、组件、集群升级、删除以及创建→等待→获取 kubeconfig 流程的端到端示例。./references/async-tasks.md——task_id生命周期、状态词汇、轮询策略、error.code常见原因和部分失败处理。./references/cli-plugin-installation-guide.md——阿里云 CLI 安装(macOS/Linux/Windows)、凭证模式摘要、cs插件安装、端到端验证和故障排查。设置时阅读一次;遇到“无法越过Forbidden.RAM”这类问题时再回来查看。./references/ram-policies.md——此 skill 的aliyun cs调用所需的 RAM Action 和策略模板(集群/节点池/组件/任务范围)。
脚本:
./scripts/check-cs-plugin.sh— 验证阿里云 CLI ≥ 3.3.3,且已安装cs插件./scripts/install-cs-plugin.sh— 安装或更新cs插件(幂等;支持通过--update以非交互方式执行)./scripts/wait-for-task.sh— 轮询describe-task-info直至进入终态(需要任务 ID 和地域)