簡體   English   中英

如何刪除 Kubernetes 部署中的所有磁盤?

[英]How do I delete all the disks in a deployment in Kubernetes?

我想刪除附加到自定義部署的所有持久卷聲明。 首先,我刪除了刪除所有 Pod 但磁盤沒有刪除的部署本身。

我知道刪除 pvc 的命令,但這涉及使用命令 [1] 獲取所有 pvc,然后手動復制粘貼 [2] 屬於部署集的那些。

如果我想以編程方式執行此操作,我應該使用 Kubernetes Python 客戶端的哪個 API 或 cli 命令?

我正在使用 GKE。

我嘗試閱讀Python 客戶端文檔,但無法推斷出如何執行此任務。

[1] kubectl --namespace=<my_namespace> --context=<my_cluster> get pvc

[2] kubectl --namespace=<my_namespace> --context=<cluster_name> delete pvc data-avirals-july19-1-devel-0 data-avirals-july19-1-devel-1

可能有一些更短的方法,但是這個方法會過濾與部署名稱MY_DEPLOYMENT_NAME關聯的所有 pvc。 其他pvc (不與同一部署關聯)不會被觸及。

for volume in $(kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}');
    do
      kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"\n"}' ;
      # kubectl delete pvc "$(kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"\n"}')"
done

筆記:

  1. 取消注釋kubectl delete命令以真正刪除 pvc。 它的評論是為了保護用戶不被意外刪除。
  2. 需要bash才能使此循環工作。

解釋:
以下命令將列出名為MY_DEPLOYMENT_NAME的部署所使用的卷

kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}'

現在,我們將遍歷這些卷,以找出這些卷使用的claim是什么。 這是我檢查claimRef部分完成的。 這是通過以下方式完成的:

kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"\n"}' 

您可以使用以下命令一次刪除所有 pvc:

kubectl --namespace=<my_namespace> delete pvc --all 

之后應該刪除 PV,但這可能需要一些時間。 此外,使用此命令要非常小心,並確保您正在刪除您打算刪除的內容。

暫無
暫無

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

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