使用 gcloud container clusters create 创建的 GKE 集群后如何清理?

How to clean up after a GKE cluster created with gcloud container clusters create?

我正在以编程方式创建 Kubernetes 集群以在 GitLab CI/CD 中进行端到端测试。我正在使用 gcloud container clusters create。我这样做了半年,创建和删除了数百个集群。成本上升和下降。现在,我从 Google 收到了一笔异常高的账单,我检查了费用明细。我注意到 "Storage PD Capacity" 的成本 >95%。我发现 gcloud container clusters delete 从未删除为 Kubernetes 集群中的持久卷声明创建的 Google 计算磁盘。

如何以编程方式删除这些内容?删除 Kubernetes 集群和磁盘后,还能剩下什么运行?

建议:

  1. 回答您的直接问题:您可以使用 Method: disks.delete API.

  2. 以编程方式删除您的磁盘资源
  3. 要确定可能已分配的其他资源,请查看此处:Listing all Resources in your Hierarchy

  4. 最后,这个 link 也可能有帮助:GKE: Understanding cluster resource usage

因为这部分回答比较长:

gcloud compute disks create disk-a \
--size=10gb \
--zone=us-west1-a \
--labels=something=monday \
--project=${PROJECT}

gcloud compute disks create disk-b \
--size=10gb \
--zone=us-west1-b \
--labels=something=else \
--project=${PROJECT}

然后:

ID=$(gcloud compute disks list \
--filter="name~disk zone~us-west1 labels.something=else" \
--format="value(id)" \
--project=${PROJECT}) && echo ${ID}

NB

  • 过滤器 AND 是隐式的并且被省略了
  • 您可以根据需要删除条款
  • 您应该使过滤器尽可能具体


并且——当您确定删除后无法恢复时:

gcloud compute disks delete ${ID} --project=${PROJECT} --region=${REGION}

如果有多个匹配,可以迭代:

IDS=$(gcloud compute disks list ...)
for ID in ${IDS}
do
  gcloud compute disks delete ${ID}
done

如果您更喜欢 -- 令人敬畏的 jq,您将拥有一种通用的方式(不是 gcloud 特定的):

gcloud compute disks list \
--project=${PROJECT} \
--format=json \
| jq --raw-output '.[] | select(.name | contains("disk")) | select(.zone | contains("us-west1")) | select(.labels.something=="else")'
...