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