【问题标题】:Deleting kubernetes yaml: how to prevent old objects from floating around?删除kubernetes yaml:如何防止旧对象飘来飘去?
【发布时间】:2020-06-09 14:48:28
【问题描述】:

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

假设我为一个新服务添加了 yaml,然后部署它——kubectl 会添加它

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

kubectl 有什么方法可以识别服务 yaml 丢失,并在持续部署期间通过自动删除服务来响应?在我的本地测试中,该服务仍然浮动

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

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

【问题讨论】:

  • 我认为你用 helm 实现了类似的东西。
  • 另一种选择是拥有一个拥有所有对象的配置图。当您进行新部署时,您只需要检查 configmap 并删除缺少的元素

标签: kubernetes continuous-deployment


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    本质上,您创建的结构化应用程序包包含 他们在 Kubernetes 集群上运行所需的一切;包含 依赖项应用程序需要。 Source

    在你开始之前,我向你推荐这些解释它的怪癖和特性的文章。

    The missing CI/CD Kubernetes component: Helm package manager

    Continuous Integration & Delivery (CI/CD) for Kubernetes Using CircleCI & Helm

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 2022-12-13
      • 2019-05-20
      • 1970-01-01
      • 2021-09-12
      • 2020-12-09
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多