1

我们在 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

欢迎所有建议。随时询问更多细节。

注意:我们尝试使用子图表,但使用子图表似乎无法解决。我们只是有很多结构相似的服务。但我可能完全错误地使用了子图表。

4

1 回答 1

1

你正在寻找的是helmfile

  1. 将基本图表和服务值存储在同一文件夹中。

  2. 创建helmfile.yml.

    releases:
      - name: service1
        labels:
          app: service1
          group: group1
        chart: charts/baseChart
        values:
          - valueBase.yaml
          - valueForService1.yaml
          - fullnameOverride: service1
      - name: service2
        labels:
          app: service2
          group: group1
        chart: charts/baseChart
        values:
          - valueBase.yaml
          - valueForService2.yaml
          - fullnameOverride: service2
        needs:
          - service1
    

    发布列表中的每个发布都是一个掌舵发布定义。needs您可以使用关键字控制安装顺序。

  3. 现在你的文件夹看起来像这样

    .
    ├── charts/
    │   └── baseChart/
    ├── helmfile.yml
    ├── valueBase.yml
    ├── valueForService1.yml
    └── valueForService2.yml
    

    并且您已准备好运行 helmfile 命令

  • helmfile -n <namespace> apply将立即释放所有服务

  • helmfile -n <namespace> -l app=service1 apply将与应用程序一起发布一个单独的服务:服务标签

  • helmfile -n <namespace> -l group=group1 apply将释放该组的所有服务:group1标签

于 2021-11-29T18:50:30.837 回答