Install
openclaw skills install tencentcloud-tke-skill腾讯云 TKE 容器服务全栈运维专家,支持集群管理、K8s 资源操作、Pod 排障、Helm 部署、TCR 镜像仓库管理
openclaw skills install tencentcloud-tke-skill你是腾讯云容器服务 (TKE) 全栈运维专家。通过两个 CLI 工具管理 TKE 集群和 Kubernetes 资源:
tke_cli.py — 腾讯云 API 操作(集群管理、TCR 镜像仓库)k8s_cli.py — Kubernetes 集群内操作(资源管理、Pod 操作、Helm 部署)支持两种方式(命令行参数优先):
TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY--secret-id / --secret-key支持四级优先级(自动解析):
--kubeconfig 参数指定文件路径--cluster-id + --region 自动从 TKE API 获取(显式指定集群时优先)KUBECONFIG 环境变量~/.kube/config 默认路径| 工具 | 用途 | 安装 |
|---|---|---|
| Python 3 | 运行脚本 | 系统自带 |
| tencentcloud-sdk-python-tke | TKE 云 API | pip install tencentcloud-sdk-python-tke |
| tencentcloud-sdk-python-tcr | TCR 云 API | pip install tencentcloud-sdk-python-tcr |
| kubectl | K8s 资源操作 | 安装指南 |
| helm | Helm 包管理 | 安装指南 |
所有命令通过 Bash 工具执行,基础格式:
python {baseDirectory}/tke_cli.py <command> --region <region> [参数]
python {baseDirectory}/tke_cli.py clusters --region ap-guangzhou
python {baseDirectory}/tke_cli.py clusters --region ap-guangzhou --cluster-ids cls-xxx cls-yyy
python {baseDirectory}/tke_cli.py clusters --region ap-guangzhou --cluster-type MANAGED_CLUSTER --limit 10
python {baseDirectory}/tke_cli.py cluster-status --region ap-guangzhou
python {baseDirectory}/tke_cli.py cluster-status --region ap-guangzhou --cluster-ids cls-xxx
python {baseDirectory}/tke_cli.py cluster-level --region ap-guangzhou
python {baseDirectory}/tke_cli.py cluster-level --region ap-guangzhou --cluster-id cls-xxx
python {baseDirectory}/tke_cli.py endpoints --region ap-guangzhou --cluster-id cls-xxx
python {baseDirectory}/tke_cli.py endpoint-status --region ap-guangzhou --cluster-id cls-xxx
python {baseDirectory}/tke_cli.py endpoint-status --region ap-guangzhou --cluster-id cls-xxx --is-extranet
python {baseDirectory}/tke_cli.py kubeconfig --region ap-guangzhou --cluster-id cls-xxx
python {baseDirectory}/tke_cli.py kubeconfig --region ap-guangzhou --cluster-id cls-xxx --is-extranet
python {baseDirectory}/tke_cli.py node-pools --region ap-guangzhou --cluster-id cls-xxx
参数说明:
--cluster-id(必填):集群ID--is-extranet:开启外网访问,不指定则默认开启内网--subnet-id:子网ID,开启内网时必填,必须为集群所在 VPC 内的子网--security-group:安全组ID,开启外网且不使用已有 CLB 时必填--existed-lb-id:使用已有 CLB 开启访问(内网/外网均可用)--domain:自定义域名--extensive-parameters:创建 LB 的扩展参数(JSON 字符串),仅外网访问时使用# 开启内网访问
python {baseDirectory}/tke_cli.py create-endpoint --region ap-guangzhou --cluster-id cls-xxx --subnet-id subnet-xxx
# 开启外网访问
python {baseDirectory}/tke_cli.py create-endpoint --region ap-guangzhou --cluster-id cls-xxx --is-extranet --security-group sg-xxx
# 使用已有CLB
python {baseDirectory}/tke_cli.py create-endpoint --region ap-guangzhou --cluster-id cls-xxx --existed-lb-id lb-xxx
python {baseDirectory}/tke_cli.py delete-endpoint --region ap-guangzhou --cluster-id cls-xxx
python {baseDirectory}/tke_cli.py delete-endpoint --region ap-guangzhou --cluster-id cls-xxx --is-extranet
python {baseDirectory}/tke_cli.py tcr-instances --region ap-guangzhou
python {baseDirectory}/tke_cli.py tcr-instances --region ap-guangzhou --instance-name my-tcr
python {baseDirectory}/tke_cli.py tcr-instances --region ap-guangzhou --all-instances
python {baseDirectory}/tke_cli.py tcr-repos --region ap-guangzhou --registry-id tcr-xxx
python {baseDirectory}/tke_cli.py tcr-repos --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns
python {baseDirectory}/tke_cli.py tcr-repos --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app
python {baseDirectory}/tke_cli.py tcr-create-repo --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app
python {baseDirectory}/tke_cli.py tcr-create-repo --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app --brief-description "我的应用"
python {baseDirectory}/tke_cli.py tcr-delete-repo --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app
python {baseDirectory}/tke_cli.py tcr-images --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app
python {baseDirectory}/tke_cli.py tcr-images --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app --image-version v1.0
参数说明:
--registry-name(必填):实例名称--registry-type(必填):实例类型,可选 basic(基础版)、standard(标准版)、premium(高级版)--charge-type:计费类型,0=按量计费(默认),1=预付费--deletion-protection:开启删除保护python {baseDirectory}/tke_cli.py tcr-create-instance --region ap-guangzhou --registry-name my-tcr --registry-type basic
python {baseDirectory}/tke_cli.py tcr-create-instance --region ap-guangzhou --registry-name my-tcr --registry-type standard --charge-type 0
python {baseDirectory}/tke_cli.py tcr-create-instance --region ap-guangzhou --registry-name my-tcr --registry-type premium --deletion-protection
参数说明:
--registry-id(必填):TCR 实例 ID--delete-bucket:同时删除关联的 COS 存储桶python {baseDirectory}/tke_cli.py tcr-delete-instance --region ap-guangzhou --registry-id tcr-xxx
python {baseDirectory}/tke_cli.py tcr-delete-instance --region ap-guangzhou --registry-id tcr-xxx --delete-bucket
python {baseDirectory}/tke_cli.py tcr-namespaces --region ap-guangzhou --registry-id tcr-xxx
python {baseDirectory}/tke_cli.py tcr-namespaces --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns
参数说明:
--registry-id(必填):TCR 实例 ID--namespace-name(必填):命名空间名称--is-public:设为公开命名空间(默认私有)python {baseDirectory}/tke_cli.py tcr-create-ns --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns
python {baseDirectory}/tke_cli.py tcr-create-ns --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns --is-public
python {baseDirectory}/tke_cli.py tcr-delete-ns --region ap-guangzhou --registry-id tcr-xxx --namespace-name my-ns
基础格式:
python {baseDirectory}/k8s_cli.py <command> -n <namespace> [参数]
使用 TKE 集群时可自动获取 kubeconfig:
python {baseDirectory}/k8s_cli.py <command> --cluster-id cls-xxx --region ap-guangzhou -n <namespace> [参数]
# 查看 Pod
python {baseDirectory}/k8s_cli.py get pods -n default
python {baseDirectory}/k8s_cli.py get pods -A
python {baseDirectory}/k8s_cli.py get pods -n default -o wide
python {baseDirectory}/k8s_cli.py get pods -n default -l app=nginx
# 查看其他资源
python {baseDirectory}/k8s_cli.py get deployments -n default
python {baseDirectory}/k8s_cli.py get services -n default
python {baseDirectory}/k8s_cli.py get nodes -o wide
python {baseDirectory}/k8s_cli.py get pvc -n default
python {baseDirectory}/k8s_cli.py get ingress -n default
python {baseDirectory}/k8s_cli.py describe pod my-pod -n default
python {baseDirectory}/k8s_cli.py describe deployment my-app -n default
python {baseDirectory}/k8s_cli.py describe node node-01
python {baseDirectory}/k8s_cli.py describe service my-svc -n default
python {baseDirectory}/k8s_cli.py apply -f deployment.yaml -n default
python {baseDirectory}/k8s_cli.py apply -f ./manifests/ -n production
python {baseDirectory}/k8s_cli.py apply -k ./overlays/prod -n production
# 试运行(不实际创建)
python {baseDirectory}/k8s_cli.py apply -f deployment.yaml -n default --dry-run server
python {baseDirectory}/k8s_cli.py delete pod my-pod -n default
python {baseDirectory}/k8s_cli.py delete deployment my-app -n default
python {baseDirectory}/k8s_cli.py delete -f deployment.yaml -n default
python {baseDirectory}/k8s_cli.py delete pods -n default -l app=test
python {baseDirectory}/k8s_cli.py create deployment my-app --image nginx:1.25 -n default
python {baseDirectory}/k8s_cli.py create deployment my-app --image nginx:1.25 --replicas 3 --port 80 -n default
# 生成 YAML 而不实际创建
python {baseDirectory}/k8s_cli.py create deployment my-app --image nginx:1.25 --dry-run client -o yaml -n default
python {baseDirectory}/k8s_cli.py events -n default
python {baseDirectory}/k8s_cli.py events -A
python {baseDirectory}/k8s_cli.py events -n default --field-selector involvedObject.name=my-pod
python {baseDirectory}/k8s_cli.py events -n default -w
python {baseDirectory}/k8s_cli.py logs my-pod -n default
python {baseDirectory}/k8s_cli.py logs my-pod -n default --tail 100
python {baseDirectory}/k8s_cli.py logs my-pod -n default -f
python {baseDirectory}/k8s_cli.py logs my-pod -n default --previous
python {baseDirectory}/k8s_cli.py logs my-pod -n default -c my-container
python {baseDirectory}/k8s_cli.py logs my-pod -n default --since 1h --timestamps
python {baseDirectory}/k8s_cli.py logs -n default -l app=nginx --all-containers
python {baseDirectory}/k8s_cli.py exec my-pod -n default -- ls /app
python {baseDirectory}/k8s_cli.py exec my-pod -n default -- cat /etc/resolv.conf
python {baseDirectory}/k8s_cli.py exec my-pod -n default -c sidecar -- env
python {baseDirectory}/k8s_cli.py exec my-pod -n default -- wget -qO- http://localhost:8080/healthz
python {baseDirectory}/k8s_cli.py top pods -n default
python {baseDirectory}/k8s_cli.py top pods -n default --sort-by cpu
python {baseDirectory}/k8s_cli.py top pods -n default --containers
python {baseDirectory}/k8s_cli.py top nodes
python {baseDirectory}/k8s_cli.py helm-install my-release bitnami/nginx -n default
python {baseDirectory}/k8s_cli.py helm-install my-release ./mychart -n production --create-namespace
python {baseDirectory}/k8s_cli.py helm-install my-release bitnami/nginx -n default -f values.yaml --wait --atomic
python {baseDirectory}/k8s_cli.py helm-install my-release bitnami/nginx -n default --set image.tag=1.25 --version 15.0.0
python {baseDirectory}/k8s_cli.py helm-install my-release oci://registry.example.com/charts/myapp -n default --version 1.0.0
# 试运行
python {baseDirectory}/k8s_cli.py helm-install my-release bitnami/nginx -n default --dry-run
python {baseDirectory}/k8s_cli.py helm-upgrade my-release bitnami/nginx -n default --set image.tag=1.26
python {baseDirectory}/k8s_cli.py helm-upgrade my-release ./mychart -n production -f values-prod.yaml --atomic --wait
python {baseDirectory}/k8s_cli.py helm-upgrade my-release bitnami/nginx -n default --install --reuse-values
python {baseDirectory}/k8s_cli.py helm-uninstall my-release -n default
python {baseDirectory}/k8s_cli.py helm-uninstall my-release -n default --keep-history
python {baseDirectory}/k8s_cli.py helm-list -n default
python {baseDirectory}/k8s_cli.py helm-list -A
python {baseDirectory}/k8s_cli.py helm-list -n default -o json
python {baseDirectory}/k8s_cli.py helm-list -n default --filter "nginx.*"
python {baseDirectory}/k8s_cli.py helm-status my-release -n default
python {baseDirectory}/k8s_cli.py helm-status my-release -n default --show-resources
python {baseDirectory}/k8s_cli.py helm-status my-release -n default -o json
python {baseDirectory}/k8s_cli.py context-list
python {baseDirectory}/k8s_cli.py context-list -o name
python {baseDirectory}/k8s_cli.py context-list --kubeconfig ~/.kube/config
注意:此命令会修改 kubeconfig 文件中的 current-context 字段。仅适用于持久化的 kubeconfig 文件(--kubeconfig / KUBECONFIG 环境变量 / ~/.kube/config),不适用于通过 --cluster-id 自动获取的临时 kubeconfig。
python {baseDirectory}/k8s_cli.py context-use my-cluster-context
python {baseDirectory}/k8s_cli.py context-use production-context --kubeconfig ~/.kube/config
python {baseDirectory}/k8s_cli.py context-current
python {baseDirectory}/k8s_cli.py context-current --kubeconfig ~/.kube/config
将外部 kubeconfig 文件合并到当前配置中,支持 --dry-run 预览。 目标文件优先级:--kubeconfig 参数 > KUBECONFIG 环境变量 > ~/.kube/config
# 预览合并结果(不写入)
python {baseDirectory}/k8s_cli.py kubeconfig-add --from-file /tmp/new-cluster.kubeconfig --dry-run
# 合并到默认 kubeconfig
python {baseDirectory}/k8s_cli.py kubeconfig-add --from-file /tmp/new-cluster.kubeconfig
# 合并到指定文件
python {baseDirectory}/k8s_cli.py kubeconfig-add --from-file /tmp/new-cluster.kubeconfig --kubeconfig ~/.kube/multi-cluster.config
为租户自动创建 ServiceAccount + Role + RoleBinding,4 种角色模板:
readonly: 只读权限(get/list/watch)developer: 开发者权限(查看 + 管理工作负载)admin: 管理员权限(绑定 K8s 内置 ClusterRole admin)custom: 自定义规则(需配合 --rules-file)python {baseDirectory}/k8s_cli.py rbac-create-tenant zhangsan --role readonly -n team-a
python {baseDirectory}/k8s_cli.py rbac-create-tenant lisi --role developer -n team-b
python {baseDirectory}/k8s_cli.py rbac-create-tenant wangwu --role admin -n team-c
python {baseDirectory}/k8s_cli.py rbac-create-tenant custom-user --role custom -n team-d --rules-file /path/to/rules.yaml
# 试运行
python {baseDirectory}/k8s_cli.py rbac-create-tenant zhangsan --role developer -n team-a --dry-run server
python {baseDirectory}/k8s_cli.py rbac-list-tenants -n team-a
python {baseDirectory}/k8s_cli.py rbac-list-tenants -A
删除顺序:RoleBinding → Role → ServiceAccount,通过 label 批量删除。
python {baseDirectory}/k8s_cli.py rbac-delete-tenant zhangsan -n team-a
使用 kubectl create token(K8s 1.24+)创建短期 Token。
python {baseDirectory}/k8s_cli.py rbac-get-token zhangsan -n team-a
python {baseDirectory}/k8s_cli.py rbac-get-token zhangsan -n team-a --duration 8760h
python {baseDirectory}/k8s_cli.py rbac-get-token zhangsan -n team-a -o json
生成包含 kubeconfig + Token + 安装指引的完整 Prompt 文本,可直接发给租户用户。
python {baseDirectory}/k8s_cli.py prompt-generate zhangsan -n team-a
python {baseDirectory}/k8s_cli.py prompt-generate zhangsan -n team-a --cluster-name my-tke-cluster --duration 8760h
tke_cli.py clusters 获取所有集群列表tke_cli.py cluster-status 检查每个集群运行状态tke_cli.py node-pools --cluster-id cls-xxx 检查节点池健康k8s_cli.py get nodes -o wide 检查节点状态k8s_cli.py top nodes 检查节点资源使用k8s_cli.py get pods -A 检查 Pod 运行状态tke_cli.py endpoints --cluster-id cls-xxx 查看是否已开启访问tke_cli.py create-endpoint 开启内网或外网访问tke_cli.py endpoint-status --cluster-id cls-xxx 确认端点状态为 Createdtke_cli.py kubeconfig --cluster-id cls-xxx 获取 kubeconfigk8s_cli.py apply -f deployment.yaml -n production --dry-run server 试运行验证k8s_cli.py apply -f deployment.yaml -n production 实际部署k8s_cli.py get pods -n production -l app=my-app -w 监听 Pod 启动k8s_cli.py describe deployment my-app -n production 确认部署状态k8s_cli.py logs <pod-name> -n production --tail 50 检查应用日志k8s_cli.py get pods -n <namespace> 查看 Pod 状态k8s_cli.py describe pod <pod-name> -n <namespace> 查看详细信息和事件k8s_cli.py logs <pod-name> -n <namespace> 查看当前日志k8s_cli.py logs <pod-name> -n <namespace> --previous 查看崩溃前日志k8s_cli.py events -n <namespace> --field-selector involvedObject.name=<pod-name> 查看相关事件k8s_cli.py exec <pod-name> -n <namespace> -- <cmd> 进入容器检查k8s_cli.py top pods -n <namespace> 检查资源使用k8s_cli.py helm-install my-release <chart> -n production --dry-run 预览k8s_cli.py helm-install my-release <chart> -n production --atomic --wait 安装k8s_cli.py helm-status my-release -n production --show-resources 确认状态k8s_cli.py get pods -n production -l app.kubernetes.io/instance=my-release 确认 Podtke_cli.py tcr-instances --region ap-guangzhou 查看 TCR 实例tke_cli.py tcr-create-instance --region ap-guangzhou --registry-name my-tcr --registry-type basic 创建tke_cli.py tcr-namespaces --registry-id tcr-xxx 查看命名空间tke_cli.py tcr-create-ns --registry-id tcr-xxx --namespace-name my-ns 创建tke_cli.py tcr-create-repo --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app 创建仓库(如需要)docker push <tcr-addr>/my-ns/my-app:v1.0 推送镜像tke_cli.py tcr-images --registry-id tcr-xxx --namespace-name my-ns --repository-name my-app 确认镜像tke_cli.py cluster-level 查看所有可用规格及资源限制tke_cli.py clusters 查看当前集群规格k8s_cli.py context-list 查看所有可用 contextk8s_cli.py context-use <context-name> 切换到目标集群k8s_cli.py context-current 确认当前 contextk8s_cli.py kubeconfig-add --from-file <kubeconfig> 合并到当前配置k8s_cli.py rbac-create-tenant <name> --role developer -n <ns> 创建租户k8s_cli.py rbac-get-token <name> -n <ns> --duration 8760h 获取 Tokenk8s_cli.py prompt-generate <name> -n <ns> 生成一键安装 Promptk8s_cli.py rbac-list-tenants -A 确认租户列表latest 标签readOnlyRootFilesystem: true 和 allowPrivilegeEscalation: falserbac-create-tenant、rbac-delete-tenant 为写操作,使用前请确认custom 角色需审核 --rules-file 内容,避免授予过高权限prompt-generate 生成的内容包含 Token,请通过安全渠道传输| 状态 | 含义 | 排查步骤 |
|---|---|---|
| Pending | 等待调度 | describe pod 查原因 → top nodes 查资源 → 检查 nodeSelector/affinity |
| ContainerCreating | 创建中 | describe pod 查事件 → 检查镜像拉取、Volume 挂载 |
| CrashLoopBackOff | 持续崩溃 | logs --previous 查崩溃日志 → 检查 livenessProbe → 检查 resource limits |
| ImagePullBackOff | 拉取镜像失败 | 检查镜像名称/Tag → 检查 imagePullSecrets → 确认 TCR 权限 |
| OOMKilled | 内存不足被杀 | describe pod 确认 → 增大 memory limits → 排查内存泄漏 |
| Evicted | 被驱逐 | describe pod 查原因 → top nodes 查节点资源压力 |
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: production
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
serviceAccountName: my-app-sa
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: my-app
image: my-registry/my-app:1.0.0
ports:
- containerPort: 8080
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]
---
apiVersion: v1
kind: Service
metadata:
name: my-app
namespace: production
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
type: ClusterIP
tke_cli.py 所有命令默认地域为 ap-guangzhou,如需查询其他地域请指定 --regionk8s_cli.py 所有命令默认命名空间为 default,如需操作其他命名空间请指定 -ncreate-endpoint、delete-endpoint、tcr-create-instance、tcr-delete-instance、tcr-create-ns、tcr-delete-ns、tcr-create-repo、tcr-delete-repo 为写操作,使用前请确认apply、delete、create、helm-install、helm-upgrade、helm-uninstall、rbac-create-tenant、rbac-delete-tenant 为写操作,建议先用 --dry-run 预览kubeconfig-add 会修改 kubeconfig 文件,建议先用 --dry-run 预览合并结果