python - 如何删除 Kubernetes 部署中的所有磁盘?
问题描述
我想删除附加到自定义部署的所有持久卷声明。首先,我删除了部署本身,该部署会删除所有 pod,但不会删除磁盘。
我知道删除 pvcs 的命令,但这涉及使用命令 [1] 获取所有 pvcs,然后手动复制粘贴 [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
解决方案
可能有一些更短的方法,但是这种方法会过滤所有与部署名称关联的 pvc MY_DEPLOYMENT_NAME
。其他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
笔记:
- 取消注释命令
kubectl delete
以真正删除 pvc。它的评论是为了保护用户不被意外删除。 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"}'
推荐阅读
- javascript - 如何在 React 上更新谷歌地图的位置
- python - 即使定义了视图、模板和 URL 配置,在 /posts 也找不到页面
- javascript - Sequelize 模型加载器导入不适用于顶级导入,但仅适用于函数导入
- spring - 在springboot报错说声明的包“com.example.demo”与预期的包“不匹配”
- scala - 如何将案例类的值转换为 Seq?
- elasticsearch - Elasticsearch 端点作为公共 api
- vb6 - CRC计算错误输出
- flutter - Flutter:将一个列表数据合并到另一个列表
- c# - Entity Framework Linq 过滤父子实体
- c++ - 为什么排序在成对向量中不起作用