kubernetes - 在 Kubernetes 中使用完整的声明式方法
问题描述
我们可以使用声明式的方法来创建和更新 kubernetes 资源kubectl apply -f
,但我们如何才能这样做来回收不再需要的资源。
我用过kubectl delete
,但这看起来像是命令式的,有时我们需要按正确的顺序删除东西。
有没有办法始终使用kubectl apply
它,它会自行确定要保留哪些资源以及删除哪些资源。就像在Terraform
.
或者我们应该得出结论,目前声明性方法仅适用于资源创建和更新。
用例:
例如,我们决定不向最终用户提供 K8S API,而是为他们提供一个存储库,他们可以在其中保存和更新他们的 yaml 文件,当合并拉取请求时,机器人可以在每次更新时将其应用于集群。所以我们也需要这个声明性的删除,这样我们就不必在用户之后清理东西。Terraform
provider 可能是解决方案,但在这种情况下,事情将锁定到 terraform,用户将需要学习另一种工具,而不是使用本机 k8s 格式。
解决方案
事实证明,他们添加了一种声明性方法来修剪 yaml 清单中不再存在的资源:
kubectl apply -f <directory/> --prune -l your=label
虽然有太多的警告。
作为 kubectl delete 的替代方法,您可以使用 kubectl apply 来识别要在其配置文件从目录中删除后删除的对象。Apply with --prune 查询 API 服务器以查找与一组标签匹配的所有对象,并尝试将返回的活动对象配置与对象配置文件进行匹配。如果一个对象与查询匹配,并且它在目录中没有配置文件,并且它有一个 last-applied-configuration 注释,则将其删除。
推荐阅读
- mysql - 如何读取 SAS 数据集(托管在 S3 上)并将其转换为 AWS RDS?
- cypress - 在 cypress 中,我们如何访问夹具文件中的多个用户?
- powershell - 如何在未执行的管道中跟踪安装程序脚本?
- python - 我想删除所有小部件并将新小部件放入 tkinter
- html - 如何使线条的高度都相等?
- c++ - return 语句后函数不停止执行
- php - 无法在 android 上使用改造显示 MySQL JSON 数据
- windows - 如何解决启动 MongoDB 的错误
- java - Quarkus - Keycloak 性能问题
- java - Can not set the path of NDK in project structure in Android studio