我们在 helm 中有以下图表结构,可以将“微服务”部署到我们的 k8s 集群
service-chart
|_templates
|_deployment.yaml
|_Ingress.yaml
|_service.yaml
|_Chart.yaml
|_valueBase.yaml
|_valueForService1.yaml
|_valueForService2.yaml
..
..
|_valueForService{n}.yaml
valueBase.yaml
包含服务的默认值(例如限制、副本等)
global:
namespace: teamname
environment: staging
limits:
memory: "500Mi"
cpu: "300m"
deployments:
replicas: 1
probes:
path: "/"
并且valueForService1.yaml
文件包含为特定服务覆盖的值
app:
name: "service1"
image:
name: "service1"
version: "2021.11.xxx"
port: 50001
deployments:
replicas: 3
所有上述服务都遵循完全相同的结构并创建类似的资源,即服务、Pod 和入口。我们将单个服务部署为
helm upgrade --install -f valueBase.yaml -f valueForService1.yaml service1 .
但问题是我们有 50 个这样的服务。我们希望将它们全部安装在一起,而不是背靠背运行 50 个命令。还希望在发布多个服务之间进行一些发布协调。例如。在发布 service2 之前发布 service1。
我知道我们可以在一个命令中执行此操作,其中包含 50 个-f
参数,但这不是我在这里的解决方案。
我们如何正确包装它们,以便我们可以
- 在我们需要的时候立即释放所有服务。
- 发布一个单独的服务
- 将它们作为服务组发布,例如。group1 由 service1、service2 和 service3 组成
- 发布编排,例如。释放 service1 然后 service2 然后 service3
欢迎所有建议。随时询问更多细节。
注意:我们尝试使用子图表,但使用子图表似乎无法解决。我们只是有很多结构相似的服务。但我可能完全错误地使用了子图表。