在Kubernetes上自动化部署

时间:2019-04-30 10:39:52

标签: python kubernetes automation terraform kubernetes-helm

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

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

此部署为我提供了TLS加密,以便将https协议传递到我的应用程序服务中,该协议也通过头盔安装(我已经为其创建了头盔图表)

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

请务必记住,所有这些证书管理器,kong和Ingress部署都与我创建的头盔图表服务应用程序相关联,因此我一直在部署以下内容:

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

  2. 我已经使用kong从YAML清单中安装了kong-ingress-controllerPostgres,就像外部服务一样。

  3. 我已经通过添加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资源,以允许访问我的舵图应用程序服务,并允许kong管理入口操作和其他操作,例如路线,证书和服务创建,并将basic-auth插件之类的东西与我的服务应用程序关联

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

这意味着,当前该过程高度依赖于人为事件,因此,我想自动化kongcert-manager安装过程,甚至可能{{1} }。

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

什么是最好的方法?

我在某些地方一直在阅读和寻找,有些人也将我定向到以下替代方法:

  • 在我的头盔图表应用程序中吗?

    我一直在阅读头盔中有一个名为hooks的东西

Ingress本身描述如下:

  

一种机制,允许图表开发人员在发行版生命周期的某些时间进行干预。   例如,您可以使用挂钩执行以下操作:

     

在安装过程中先加载ConfigMap或Secret,然后再加载其他图表。

     

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

     

在删除发行版之前运行作业,以便在删除发行版之前适当地取消服务

头盔挂钩是一个不错的选择吗?我认为,有了它们,我可以实现自动化,或者至少可以使hooks应用程序接管秘密创建和一些helm chart

我是否可以将pre/post-deploymentkongcert-manager资源操作(命令和YAML文件执行)视为由头盔挂钩管理的操作或动作?

  • 平台方法:从中提供部署(某些步骤或全部)。

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

这种地形方法对于安装Ingressmy helm chart application头盔很有用

孔也喜欢terraform提供商

当前,有一些第三方存储库可与Terraform中的kong合作。 Terraform Provider Kong对我来说更合适,因为我正在使用Azure Kubernetes服务,并且可以实现的不同资源配置看起来非常好。我不确定在使用cert-manager和证书管理器通信时是否必须手动注入类似certificatesroute的资源,但是即使是这个terraform kong提供商也允许我使用导入现有路线kong-ingress-controller

的可能性

可以将其应用于terraform import kong_route.<route_identifier> <route_id>和其他资源吗?

  • 使用python脚本

通过python自动部署怎么样? 这种选择的情况如何? 是否有可能从python到kubernetes进行交互并执行我上面描述的命令操作(certificateskubectl从本地和远程存储库中的YAML文件和Helm图表创建资源)

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

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

  • 使用Jupyter笔记本。

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

因此,我认为terraform方法(使用Ingresshelm提供程序从基础结构的角度来看将是非常有用的工具,但是我不确定是否会选择它,也许有没有那么复杂的替代方法?

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

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

2 个答案:

答案 0 :(得分:1)

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

您可以编写一个Python脚本,使用PyHelm依次安装图表(全面披露-我是软件包的维护者之一)。

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

答案 1 :(得分:1)

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

通常,对于给定的A和B应用程序,您将使用helm或事件更好的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)同时安装许多图表。