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

问题描述 投票:0回答:4

我正在为 kubernetes 应用程序开发一个持续部署例程:每次我推送 git 标签时,都会激活一个 github 操作,该操作调用

kubectl apply -f kubernetes
来应用一堆 yaml kubernetes 定义

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

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

有什么方法可以让

kubectl
识别出服务yaml缺失,并在持续部署过程中通过自动删除服务来做出响应?在我的本地测试中,该服务仍然浮动

除了删除 yaml 定义之外,开发人员是否还必须知道连接

kubectl
到生产集群并手动删除服务?

kubernetes 有没有一种机制可以“知道缺少什么”?

kubernetes continuous-deployment
4个回答
2
投票

在删除yaml文件之前,可以运行

kubectl delete -f file.yaml
,这样该文件创建的所有资源都会被删除。


但是,您正在寻找的是使用 k8s 实现所需的状态。您可以使用 Helmfile 等工具来完成此操作。

Helmfile,允许你指定你想要的资源都在一个文件中,每次运行都会达到你想要的状态

helmfile apply


1
投票

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

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

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

本质上,您创建的结构化应用程序包包含 在 Kubernetes 集群上运行所需的一切;包括 应用程序所需的依赖项来源

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

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

使用 CircleCI 和 Helm 的 Kubernetes 持续集成和交付 (CI/CD)


1
投票

没有这样的办法。如果您可以到达节点并配置 kube 配置,您可以从任何地方从 yaml 文件部署资源。因此 kubernetes 不知道如何响应文件删除。如果您仍然想这样做,您可以编写一个程序(Go 代码)来检查某个位置的文件的可用性,并在文件被删除时删除相应的资源。

通过 kubernetes 的一种方法是使用 kubernetes Operator,每当文件发生任何更改时,您都可以通过 Operator 更新用于部署资源的 crd。


0
投票

您可以使用

--prune
标志来识别和删除已从本地文件系统中删除的对象。例子:

KUBECTL_APPLYSET=true kubectl apply -f <directory> --prune --applyset=<name>

kubectl apply -f <directory> --prune -l <labels> --prune-allowlist=<gvk-list>

请参阅 Kubernetes 文档

注意:此功能处于 Alpha 版本。

© www.soinside.com 2019 - 2024. All rights reserved.