首页 > 解决方案 > 在 Kubernetes 上自动部署

问题描述

我很想知道YAML在 Kubernetes 中自动化部署的最佳方法是什么

我有一个cert-managerhelm 安装和一个kong YAML清单以及一个Ingress在 Kubernetes 集群中创建、安装和工作的资源

此部署为我提供了TLS加密,以便将https协议获取到我的应用程序服务,该服务也通过 helm 安装(我已经为它创建了一个 helm 图表)

我的目标是找到执行YAML我创建的那些文件的方式,以及一些自动方式的掌舵命令,而不是手动执行这些步骤和过程。

也许重要的是要记住,所有这些 cert-manager、kong 和 Ingress 部署都与我创建的 helm chart 服务应用程序相关联,因此我一直在部署以下内容:

  1. 我已经创建了我的服务应用程序的掌舵图,并通过helm install ...命令安装了它

  2. 我已经使用类似的外部服务安装kongkong-ingress-controllerYAML 清单。Postgres

  3. 我已经cert-manager通过 helm 安装并添加它helm repo add jetstack https://charts.jetstack.io 并执行

helm install \
    --name cert-manager \
    --namespace cert-manager \
    --version v0.7.0 \
    jetstack/cert-manager
  1. 而且,我创建了一个IngressKongIngress资源来允许访问我的 helm chart 应用程序服务,并允许 kong 管理入口操作和其他操作,如路由、证书和服务创建,并将诸如basic-auth插件之类的东西关联到我的服务应用程序

所有这些过程都是通过kubectl apply ...执行 YAML 文件以及helm ....来自 CLI 的命令完成的。

这意味着,目前这个过程高度依赖于人类事件,我想自动化安装过程kongcert-manager即使是可能的Ingress创建。

当我认为这有可能时,我是对的吗?

最好的方法是什么?

我一直在一些地方阅读和寻找,有些人也对我进行了以下选择:

hooks本身描述如下:

一种允许图表开发人员在发布生命周期中的某些点进行干预的机制。例如,您可以使用挂钩来:

在加载任何其他图表之前,在安装期间加载 ConfigMap 或 Secret。

在安装新图表之前执行一个作业备份数据库,然后在升级后执行第二个作业以恢复数据。

在删除版本之前运行作业,以便在删除服务之前优雅地退出轮换服务

掌舵钩子方法可能是一个不错的选择吗?我认为有了它们,我可以自动化或至少让helm chart应用程序接管秘密创建和一些pre/post-deployment.

我可以考虑kong,cert-managerIngress资源操作(命令和 YAML 文件执行)之类的操作或操作由 helm 挂钩管理吗?

terraform 提供了 Helm 和 Kubernetes 提供程序。我可以探索从 terraform 脚本安装这些软件包的可能性。

my helm chart application这种 terraform 方法对于安装和cert-manager掌舵可能很有用

Kong 也喜欢 terraform provider

目前有一些第三方存储库可以与来自 terraform 的 kong 一起使用。Terraform Provider Kong对我来说更合适,因为我使用的是 Azure Kubernetes 服务,并且可以实现的不同资源配置看起来非常好。我不确定当我使用和 cert-manager 通信时是否需要手动注入资源certificates,但即使是这个 terraform kong 提供程序也允许我导入现有路由routekong-ingress-controllerterraform import kong_route.<route_identifier> <route_id>

可以将其应用于certificates其他资源吗?

通过 python 进行自动化部署呢?这个替代方案的情况如何?是否可以从 python 到 kubernetes 进行交互并执行我上面描述的命令操作(kubectl以及helm从本地和远程存储库中可用的 YAML 文件和掌舵图创建资源)

在肯定的情况下......我该如何解决这个选项?

我找到了这个使用 ansible 的选项,但它涉及一些其他的东西,比如 Automate broker ansible 和 Kubernetes 服务目录,目前我还不知道。

我可以Ingress通过 jupyter 笔记本创建这些资源(以及 kong 和 cert-manager 安装和配置),直接写到 Kubernetes 集群吗?这可能吗?我该怎么做?

所以,我认为 terraform 方法(从基础设施作为代码的角度来看,使用helmandkong提供程序将是非常有用的工具,但我不确定我是否会选择它,也许有不那么复杂的替代方案?

有人在 Kubernetes 集群中执行了资源和事物的自动化。我想这是一个正常或预期的过程,尽管这是我的第一次。

如果有人能指出我解决我的特定情况的正确方法,我将不胜感激。:)

标签: pythonkubernetesautomationterraformkubernetes-helm

解决方案


不幸的是,您无法控制依赖 Helm 图表的安装顺序。Helm 将图表的模板及其所有依赖项的模板组合在一起并应用它们,就好像它们来自同一个图表一样(有关排序的更多详细信息,请参见此处)。

您可以编写一个 Python 脚本,使用PyHelm一个接一个地安装图表(完全公开 - 我是该包的维护者之一)。

此外,您可以使用 Helm 挂钩来控制安装顺序 - 这可以处理您的其他 yaml(例如使用安装后/升级后挂钩)。


推荐阅读