簡體   English   中英

從Google Compute Engine刪除所有停止的實例

[英]Delete all stopped instances from Google Compute Engine

我在Google Compute Engine上有數千個VM實例。 幾乎所有它們都停止了。 如何一次刪除所有已停止的實例? (在UI上這樣做會花費一些時間,此外-UI崩潰)

謝謝!

首先從您的項目中獲取虛擬機列表:

gcloud compute instances list | grep TERMINATE

驗證是否需要刪除所有這些VM。 然后,以下命令將生成,您可以執行刪除所有命令。 您可以將輸出重定向到文件,然后運行“ bash”。 如果您感到幸運,可以隨意優化為單個命令行:)

gcloud compute instances list | grep TERMINATE | awk '{printf "gcloud comoute instances delete %s --zone %s\n", $1, $2}' 
yes Y | gcloud compute instances list | awk '/TERMINATE/ {printf "gcloud compute instances delete %s --zone %s; ", $1, $2}' | bash

gcloud計算實例列表:逐一列出實例。

awk:打印出“ gcloud計算實例,刪除“ terminated_instance_name” --zone“實例所屬的區域名稱”

通過管道將此輸出傳輸到bash以使其在終端上執行;

當提示您進行確認時,“是Y”會提供“是”或“是”答案。

終止實例在gcloud控制台顯示為停止 假設您希望刪除終止的實例,則可以查找狀態為TERMINATED的實例。

此處的其他答案將起作用,但它們將遍歷您的所有實例。 一種更簡潔的方法是從gcloud請求經過過濾的實例列表,以便您僅迭代已知處於此狀態的實例。

最終,我發現輔助磁盤在其父實例刪除時並不總是刪除,因此我也想在清理過程中清除孤立的磁盤。

像這樣的事情應該做到(對於bash shell):

#!/bin/bash

# delete terminated instances
for terminated_instance_uri in $(gcloud compute instances list --uri --filter="status:TERMINATED" 2> /dev/null); do
  terminated_instance_name=${terminated_instance_uri##*/}
  terminated_instance_zone_uri=${terminated_instance_uri/\/instances\/${terminated_instance_name}/}
  terminated_instance_zone=${terminated_instance_zone_uri##*/}
  if [ -n "${terminated_instance_name}" ] && [ -n "${terminated_instance_zone}" ] && gcloud compute instances delete ${terminated_instance_name} --zone ${terminated_instance_zone} --delete-disks all --quiet; then
    echo "deleted: ${terminated_instance_zone}/${terminated_instance_name}"
  fi
done

# delete orphaned disks (filter for disks without a user)
for orphaned_disk_uri in $(gcloud compute disks list --uri --filter="-users:*" 2> /dev/null); do
  orphaned_disk_name=${orphaned_disk_uri##*/}
  orphaned_disk_zone_uri=${orphaned_disk_uri/\/disks\/${orphaned_disk_name}/}
  orphaned_disk_zone=${orphaned_disk_zone_uri##*/}
  if [ -n "${orphaned_disk_name}" ] && [ -n "${orphaned_disk_zone}" ] && gcloud compute disks delete ${orphaned_disk_name} --zone ${orphaned_disk_zone} --quiet; then
    echo "deleted: ${orphaned_disk_zone}/${orphaned_disk_name}"
  fi
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM