自动化部署在Kubernets中

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

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

我有一个cert-manager头盔安装和kong YAML清单和Ingress资源在Kubernetes集群中创建,安装和工作

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

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

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

  1. 我已经创建了一个服务应用程序的头盔图,我已经通过helm install ...命令安装了它
  2. 我使用kong像外部服务从YAML清单安装了kong-ingress-controllerPostgres
  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资源,允许访问我的头盔图表应用程序服务,并允许管理入口操作和其他操作,如路由,证书和服务创建,并将像basic-auth插件的东西联系到我的服务申请

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

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

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

最好的方法是什么?

我一直在阅读和寻找一些地方,有些人也指导我以下的选择:

  • 从我的掌舵图应用程序? 我一直在读舵头有一个名为hooks的东西

hooks本身描述了以下内容:

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

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

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

在删除版本之前运行作业,以便在删除服务之前正常地使服务停止旋转

可能是掌舵挂钩接近一个好的选择?我认为,与他们一起,我可以自动化或至少helm chart应用程序接管秘密创建和一些pre/post-deployment

我可以考虑kongcert-managerIngress资源操作(命令和YAML文件执行),例如由helm hook管理的操作或操作吗?

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

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

这种terraform方法可用于安装my helm chart applicationcert-manager头盔

Kong也喜欢terraform提供商

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

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

  • 使用python脚本

通过python自动部署怎么样?这个替代方案怎么样?有可能从python到kubernetes进行交互并执行我上面描述的命令操作(kubectlhelm从YAML文件和本地和远程存储库中可用的helm图表创建资源)

在肯定的情况下...如何解决此选项?

我找到了this option which use ansible,但它涉及一些其他的东西,如Automate broker ansible和Kubernetes服务目录,目前我还不知道。

  • 使用Jupyter笔记本。

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

因此,我认为terraform方法(使用helmkong提供程序作为代码视角从基础架构中将是非常有用的工具,但我不确定我是否会选择它,也许可以有更复杂的替代方案?

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

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

python kubernetes automation terraform kubernetes-helm
2个回答
1
投票

遗憾的是,您无法控制从属Helm图表的安装顺序。 Helm将图表的模板及其所有依赖项模板组合在一起,并将它们应用为来自同一图表(有关订购的更多详细信息,请参阅here)。

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

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


1
投票

一种可能的解决方案是使用initContainer,它将等待其他服务UP。

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

请注意,这不会真正订购图表安装,只需确保每个服务在启动前等待dependendancies。您可以使用helmfile(https://github.com/roboll/helmfile)同时安装许多图表。

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