在项目中处理多个环境时组织kubernetes yaml的最佳实践
我不清楚在多个环境中组织树结构的最佳实践是什么。例如,我们每个阶段和生产有2个集群。我想在阶段集群中创建一个开发名称空间。我们想使用Helm进行打包,使用Jenkins进行部署在项目中处理多个环境时组织kubernetes yaml的最佳实践,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我不清楚在多个环境中组织树结构的最佳实践是什么。例如,我们每个阶段和生产有2个集群。我想在阶段集群中创建一个开发名称空间。我们想使用Helm进行打包,使用Jenkins进行部署 因此,我不确定k8s和Helm将应用程序部署到多个环境(如开发->测试->阶段->产品)的树结构应该是什么样子。在机械级别上,您可以让Jenkins使用任意标志运行Helm upgrade--installhelm-upgrade和helm-install将从正在运行的图表中获取值.yaml文件,但随后任何-f或-set
因此,我不确定k8s和Helm将应用程序部署到多个环境(如开发->测试->阶段->产品)的树结构应该是什么样子。在机械级别上,您可以让Jenkins使用任意标志运行
Helm upgrade--install
helm-upgrade
和helm-install
将从正在运行的图表中获取值.yaml
文件,但随后任何-f
或-set
选项将覆盖值.yaml
文件中的内容。因此,在某种形式上,您需要:
- 如果设置正确,可以安装软件的舵图
- 该图表中的默认
文件具有合理的默认值,可能适用于kind或minikube等本地环境values.yaml
- 覆盖
文件,可能是每个服务、每个环境,用于指定外部数据库等内容的位置values.yaml
- 这是一种专门设置图像标记的方法,因为Jenkins将在每个构建上生成一个带有新的唯一标记的新图像
不想把它说成是“最好的”,下面是我倾向于使用的总体布局。这是一个每个团队最终负责自己部署的设置。这意味着,对于每个服务存储库,源代码、Jenkins管道代码、Docker映像构建代码和Kubernetes清单都在同一个存储库中。这大致看起来像:
a-service
+-- Dockerfile # to build the Docker image
+-- Jenkinsfile # scripted pipeline code
+-- Makefile # or something similar to build the program
+-- charts
| \-- a-service
| +-- Chart.yaml # Helm chart metadata
| +-- templates
| | \-- ...
| +-- values.yaml # default values
| +-- values.dev.yaml # development override values
| +-- values.prod.yaml # production override values
\-- src # actual source code lives here
\-- ...
在Jenkinsfile
中,您可以执行以下操作启动安装
dir('charts/a-service'){
sh“头盔升级--安装a-service.-f值.$ENV.yaml--设置标签=$tag”
}
谢谢您的回复,这将非常有用。。但我对Helm非常熟悉,向模板传递值的最佳方式是什么。如何将values.dev.yaml和values.prod.yaml值传递给模板?这就是-f
(使用附加值文件)和-set
(设置一些特定值)选项在helm upgrade
命令中所做的。好的,我假设我需要在deployment.yaml中添加多个值。但是deployment.yaml在helm创建之后保持原样,并将根据git分支值在jenkinsfile中使用此命令,对吗?我应该定义任何环境变量还是该方法涵盖了我想要的内容