【问题标题】:Helm - Release multi container application and partial releaseHelm - 发布多容器应用和部分发布
【发布时间】:2022-01-06 09:06:38
【问题描述】:

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

欢迎所有建议。欢迎询问更多详情。

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

【问题讨论】:

    标签: kubernetes yaml kubernetes-helm helm3


    【解决方案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
      

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

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

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

      您已准备好运行 helmfile 命令

    • helmfile -n <namespace> apply 将一次性释放所有服务

    • helmfile -n <namespace> -l app=service1 apply 将发布带有 app: service 标签的单个服务

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

    【讨论】:

    • 这听起来绝对是我需要尝试的解决方案。我会让你知道我如何处理这个。感谢您的回答!干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2016-05-22
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多