自动化Kubernetes上的部署

2024-06-01 04:16:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

请记住,所有这些cert manager、kong和ingres部署都与我创建的helm chart service应用程序关联,因此我一直在部署以下内容:

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

  2. 我已经使用类似于Postgres的外部服务从YAML清单安装了kong和{}。

  3. 我已经通过helm安装了cert-manager,添加了它的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文件和来自CLI的helm ....命令完成的。在

这意味着,目前这个过程高度依赖于人类事件,我想自动化一些事情,比如kong和{}安装过程,甚至是{}创建。在

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

最好的方法是什么?

我在一些地方阅读和寻找,有些人也向我介绍了以下几种选择:

  • 从我的舵图应用程序?

    我读到赫尔姆有个名字叫^{}

hooks本身描述了以下内容:

A kind of mechanism to allow chart developers to intervene at certain points in a release's life cycle. For example, you can use hooks to:

Load a ConfigMap or Secret during install before any other charts are loaded.

Execute a Job to back up a database before installing a new chart, and then execute a second job after the upgrade in order to restore data.

Run a Job before deleting a release to gracefully take a service out of rotation before removing it

舵钩是一个好的选择吗?我认为有了它们,我可以自动化,或者至少可以让helm chart应用程序接管秘密创建和一些{}。在

我可以考虑一下kongcert-manager和{}资源操作(命令和YAML文件执行)类似于由helmhooks管理的操作或操作吗?在

  • 地形方法:从中提供部署(一些步骤或完全)。

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

这种地形方法对于安装my helm chart applicationcert-managerhelm非常有用

孔也喜欢地形提供商

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

是否可以将其应用于certificates和其他资源?在

  • 使用python脚本

如何通过python自动化部署呢? 这个替代方案进展如何? 是否可以从python到kubernetes交互并执行命令操作{36{cdl37}和远程资源库(^在cdl中描述)可以创建

在肯定的情况下。。。如何解决这个问题?在

我已经找到了this option which use ansible,但它还涉及到其他一些东西,比如自动代理ansible和Kubernetes服务目录,这些目前我还不知道。在

  • 使用Jupyter笔记本。

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

因此,我认为terraform方法(使用helmkong提供程序,从代码的角度来看,从基础设施的角度来看,是非常有用的工具,但我不确定是否会选择它,也许有没有更复杂的替代方法?在

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

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


Tags: to方法命令应用程序yamlcert过程部署
2条回答

不幸的是,您无法控制从属头盔图表的安装顺序。Helm将图表的模板及其所有依赖项的模板组合在一起,并将它们应用于同一图表中(有关排序的详细信息,请参见here)。在

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

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

一个可能的解决方案是使用initContainer来等待其他服务启动。在

通常,对于给定的a和B应用程序,您将使用helm或event better helmfile同时部署它们。但是对于B的pod,您将添加一个initContainer,如果服务A启动,它将每隔10秒检查一次。通过这样做,您可以确保只有当服务A完全启动并准备就绪时,服务B才会启动。你可以看看https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。这需要配置livenessProbe和readynessProbe。在

请注意,这并不是真正的顺序图安装,只需确保每个服务在启动之前都会等待依赖项。您可以使用helmfile(https://github.com/roboll/helmfile)同时安装多个图表。在

相关问题 更多 >