我有兴趣了解在Kubernetes中自动化YAML
部署的最佳方法是什么
我有一个cert-manager
头盔安装和一个kong YAML
清单,以及一个Ingress
资源,它是在Kubernetes集群中创建,安装和工作的。
此部署为我提供了TLS
加密,以便将https
协议传递到我的应用程序服务中,该协议也通过头盔安装(我已经为其创建了头盔图表)
我的目标是找到执行我创建的YAML
文件的方式,以及一些自动执行的helm命令,而不是手动执行步骤和过程。
请务必记住,所有这些证书管理器,kong和Ingress部署都与我创建的头盔图表服务应用程序相关联,因此我一直在部署以下内容:
我已经创建了服务应用程序的头盔图,并通过helm install ...
命令安装了它
我已经使用kong
从YAML清单中安装了kong-ingress-controller
和Postgres
,就像外部服务一样。
我已经通过添加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
Ingress
和KongIngress
资源,以允许访问我的舵图应用程序服务,并允许kong管理入口操作和其他操作,例如路线,证书和服务创建,并将basic-auth
插件之类的东西与我的服务应用程序关联所有这些过程都是通过kubectl apply ...
执行YAML文件以及CLI中的helm ....
命令完成的。
这意味着,当前该过程高度依赖于人为事件,因此,我想自动化kong
和cert-manager
安装过程,甚至可能{{1} }。
当我认为这可能实现时,我是对的吗?
什么是最好的方法?
我在某些地方一直在阅读和寻找,有些人也将我定向到以下替代方法:
在我的头盔图表应用程序中吗?
我一直在阅读头盔中有一个名为hooks
的东西
Ingress
本身描述如下:
一种机制,允许图表开发人员在发行版生命周期的某些时间进行干预。 例如,您可以使用挂钩执行以下操作:
在安装过程中先加载ConfigMap或Secret,然后再加载其他图表。
在安装新图表之前执行作业以备份数据库,然后在升级后执行第二个作业以还原数据。
在删除发行版之前运行作业,以便在删除发行版之前适当地取消服务
头盔挂钩是一个不错的选择吗?我认为,有了它们,我可以实现自动化,或者至少可以使hooks
应用程序接管秘密创建和一些helm chart
。
我是否可以将pre/post-deployment
,kong
和cert-manager
资源操作(命令和YAML文件执行)视为由头盔挂钩管理的操作或动作?
有来自Terraform的Helm和Kubernetes提供程序。我可以探索从terraform脚本安装这些软件包的可能性。
这种地形方法对于安装Ingress
和my helm chart application
头盔很有用
孔也喜欢terraform提供商
当前,有一些第三方存储库可与Terraform中的kong合作。 Terraform Provider Kong对我来说更合适,因为我正在使用Azure Kubernetes服务,并且可以实现的不同资源配置看起来非常好。我不确定在使用cert-manager
和证书管理器通信时是否必须手动注入类似certificates
,route
的资源,但是即使是这个terraform kong提供商也允许我使用导入现有路线kong-ingress-controller
可以将其应用于terraform import kong_route.<route_identifier> <route_id>
和其他资源吗?
通过python自动部署怎么样?
这种选择的情况如何?
是否有可能从python到kubernetes进行交互并执行我上面描述的命令操作(certificates
和kubectl
从本地和远程存储库中的YAML文件和Helm图表创建资源)
在肯定的情况下...我该如何解决这个问题?
我发现了this option which use ansible,但是它还涉及其他一些东西,例如Automate broker ansible和Kubernetes服务目录,这些东西目前我还不知道。
我可以通过jupyter笔记本创建那些资源(helm
以及kong和cert-manager安装和配置),直接写到Kubernetes集群吗?这可能吗?
我该怎么办?
因此,我认为terraform方法(使用Ingress
和helm
提供程序从基础结构的角度来看将是非常有用的工具,但是我不确定是否会选择它,也许有没有那么复杂的替代方法?
有人在Kubernetes集群中执行了资源和事物的自动化。我想这是正常或预期的过程,尽管这是我第一次。
如果有人可以指出正确的方法来解决我的特殊情况,我将不胜感激。 :)
答案 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)同时安装许多图表。