如何控制kubernetes应用程序的版本?
当然,我已经签出了helm.sh,但乍一看,整个设置似乎有点复杂(helmclient&tillerserver)。在我看来,在大多数情况下,只要有一个掌舵客户,我就可以脱身 这就是我目前所做的 假设我有一个由3个服务组成的项目,即如何控制kubernetes应用程序的版本?,kubernetes,microservices,kubernetes-helm,Kubernetes,Microservices,Kubernetes Helm,当然,我已经签出了helm.sh,但乍一看,整个设置似乎有点复杂(helmclient&tillerserver)。在我看来,在大多数情况下,只要有一个掌舵客户,我就可以脱身 这就是我目前所做的 假设我有一个由3个服务组成的项目,即postgres,express,nginx 我创建了一个名为product release的目录,如下所示: product-release/ .git/ k8s/ postgres/ Deployment.y
postgres
,express
,nginx
我创建了一个名为product release
的目录,如下所示:
product-release/
.git/
k8s/
postgres/
Deployment.yaml
Service.yaml
Secret.mustache.yaml # Needs to be rendered by the dev before use
express/
Deployment.yaml
Service.yaml
nginx/
Deployment.yaml
Service.yaml
updates/
0.1__0.2/
Job.yaml # postgres schema migration
update.sh # k8s API server scritps to patch/replace existing k8s objects, and runs the state change job
通常的git内容现在可以应用了。每次进行更改时,我都会对规范文件进行更改,测试它们,编写更新脚本以帮助从上一个版本移动到当前版本,然后提交并标记它
问题:
helm
有舵柄服务器?在客户端做模板不是更简单吗?当然,如果您想将部署活动与应用程序知识(如机密)分开,那么模板必须在服务器上进行,否则为什么换句话说,Helm包定义及其依赖项与构成web应用程序几个组件的源代码和图像定义是分开的。注意:Helm v3中删除了Tiller。查看此答案,了解为什么在头盔v2中需要舵柄以及为什么在头盔v3中移除舵柄的详细信息: 根据的想法,您所做的是一种正确的方式(从git回购中执行发布)。但是,如果您想进一步推广,使其更加普遍,您可以计划更多的目标,包括:
- 仅选择k8s应用程序声明性定义之外的配置管理系统。例如,Helm(如上面的答案所示)。它们只是纯客户端
- 通过使用诸如
或kubectl apply
等流行工具更改helm install
,避免定制发布过程update.sh
- 使用CI/CD引擎,如Travis CI或GitHub操作,从git标记/分支驱动更改交付
- 使用分支策略,以便您可以在直接交付测试/登台/生产/环境之前尝试更改