删除kubernetes yaml:如何防止旧对象四处浮动



我正在为一个kubernetes应用程序开发一个连续部署例程:每次我推送一个git标签时,都会激活一个github操作,它调用kubectl apply -f kubernetes来应用一堆yaml kubernete定义

假设我为一个新服务添加yaml,并部署它——kubectl将添加

但稍后,我只是删除该服务的yaml,并重新部署--kubectl不会删除它

kubectl有没有办法识别出服务yaml丢失,并在连续部署过程中自动删除服务来做出响应?在我的本地测试中,该服务仍在周围浮动

除了删除yaml定义之外,开发人员是否必须知道将kubectl连接到生产集群并手动删除服务?

有没有一种机制让kubernetes"知道缺少了什么"?

您需要使用Kubernetes的CI/CD工具来实现所需的功能。正如Sithroo Helm所提到的,这是一个非常好的选择。

Helm允许您获取、部署和管理应用程序的生命周期,第三方产品和您自己的产品。

不再维护任意组的YAML文件(或非常长的文件(描述pod、副本集、服务、RBAC设置等helm,软件包有一个结构和约定定义了一层YAML模板和另一层更改名为值的模板值被注入模板,从而允许配置的分离,并定义其中允许更改。整个程序包被称为Helm图表

从本质上讲,您创建的结构化应用程序包包含它们在Kubernetes集群上运行所需的一切;包括…在内依赖项应用程序需要。源

在您开始之前,我推荐您这些文章来解释它的怪癖和功能。

缺少CI/CD Kubernetes组件:Helm包管理器

持续集成&使用CircleCI&Helm

没有这样的方法。如果您可以访问节点并配置kube-config,那么您可以从任何地方部署yaml文件中的资源。因此,kubernetes将不知道如何对文件删除做出响应。如果你仍然想这样做,你可以写一个程序(go代码(,在一个地方检查文件的可用性,并在文件被删除时删除相应的资源。

通过kubernetes有一种方法是使用kubernete操作符,只要文件中有任何更改,您就可以通过操作符更新用于部署资源的crd。

在删除yaml文件之前,您可以运行kubectl delete -f file.yaml,这样该文件创建的所有资源都将被删除。


然而,您正在寻找的是使用k8s实现所需状态。您可以使用像Helmfile这样的工具来实现这一点。

Helmfile,允许您指定想要在一个文件中拥有的所有资源,并且它将在每次运行helmfile apply时实现所需的状态

最新更新