【问题标题】:How to clean up after a GKE cluster created with gcloud container clusters create?使用 gcloud container clusters 创建 GKE 集群后如何清理?
【发布时间】:2020-03-26 12:53:14
【问题描述】:

我正在为 GitLab CI/CD 中的端到端测试以编程方式创建 Kubernetes 集群。我正在使用gcloud container clusters create。我这样做了半年,创建和删除了几百个集群。成本上下波动。现在,我从 Google 收到了异常高昂的账单,我检查了成本明细。我注意到“存储 PD 容量”的成本 > 95%。我发现gcloud container clusters delete 从未删除为 Kubernetes 集群中的 Persistent Volume Claims 创建的 Google Compute Disks。

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

【问题讨论】:

    标签: kubernetes google-compute-engine google-kubernetes-engine gcloud


    【解决方案1】:

    因为这部分答案很长:

    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}
    

    注意

    • 过滤器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")'
    ...
    

    【讨论】:

    • 磁盘由 Google Kubernetes Engine 为每个持久卷声明创建。我想避免将供应商特定属性添加到我的部署描述符中。而且我什至不确定 Kubernetes 中定义的标签以后是否会出现在光盘上。
    • 然后将过滤器简化为--filter=name~^gke-${PREFIX}
    • 请注意 gcloud compute disks delete 命令现在使用磁盘名称,而不是磁盘 ID。
    • ^ 我已尝试编辑,但队列已满。
    【解决方案2】:

    建议:

    1. 回答您的直接问题:您可以使用Method: disks.delete API 以编程方式删除磁盘资源。

    2. 要确定可能分配了哪些其他资源,请查看此处:Listing all Resources in your Hierarchy

    3. 最后,这个链接也可能有帮助:GKE: Understanding cluster resource usage

    【讨论】:

    • 感谢您的意见。您知道如何删除集群创建的磁盘吗?我可以删除所有这些,但这会使整个 Cloud Engine 难以用于除一个项目之外的任何其他事情。是否可以通过gcloud 命令删除?由于我已经在使用它来创建和删除集群,所以样板文件会少得多。
    • 我真的不知道。如果您在 MS Azure 或 AWS 中实现 CI/DI 集群,我也不知道情况会如何:(
    • 是的,可以使用 gcloud "gcloud compute disks delete" 删除磁盘cloud.google.com/sdk/gcloud/reference/compute/disks/delete中的更多信息
    • 解决方案是gcloud compute disks list --filter="..." --format="..." project=${PROJECT}` 仅列出符合某些条件的磁盘保证这些是集群创建的磁盘。 --format 可用于仅输出磁盘 ID。然后,您可以将输出通过管道传输到gcloud compute disks delete ...。你知道如何唯一标识集群创建的 PD 吗?
    • @DazWilkin 我对如何准确删除刚刚被删除的集群创建的磁盘的解决方案感兴趣。目前,我正在用 Python 脚本解析 gcloud compute disks list 的输出,这远非优雅。我猜如果您编辑答案的第 1 点,paulsm4 不会介意。第 2 点和第 3 点是很好的参考。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多