在同一命名空间中使用 Helm 部署单个应用程序的多个版本

时间:2021-07-02 19:23:34

标签: kubernetes kubernetes-helm

我有一个应用程序,我想为其运行多组不同配置的实例。我猜从在线准备开始,人们通常会在您的集群中拥有相同应用程序的多个版本。

但让我稍微描述一下高层的用例。该应用程序是一个组件,它将一个数据集和一组说明如何处理该数据集的指令作为配置。数据集实际上是一个数据源。

所以在同一个命名空间中,我们希望例如处理 2 数据集。

所以这就像对同一个应用程序有两个部署。每个数据集都有不同的要求,因此我们应该能够将部署 1 扩展到 10 个实例,部署 2 扩展到 5 个实例。

问题是它是同一个应用程序,到目前为止它是相同的掌舵图和部署定义。

问题是目前有哪些不同的选择可以处理这个问题。

欢迎提供示例、指针、文章。

到目前为止,我发现以下文章最有前途:

https://itnext.io/support-multiple-versions-of-a-service-in-kubernetes-using-helm-ce26adcb516d

我想的另一件事是将部署图表复制到 2 个文件夹名称不同的子图表中。

2 个答案:

答案 0 :(得分:2)

Helm 非常直接地支持这一点。

在 Helm 术语中,您将编写一个图表来描述如何安装您的应用程序的一个副本。这会创建 Kubernetes 部署和其他清单;但它具有模板,允许在部署时填充应用程序的某些部分。安装的一个副本是一个发行版,但您可以在相同或不同的 Kubernetes 命名空间中拥有多个发行版。

例如,假设您有一个用于 Kubernetes 部署的 YAML 模板:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-processor
spec:
  replicas: {{ .Values.replicas }}
  template:
    spec:
      containers:
        - env:
            - name: DATASET_NAME
              value: {{ .Values.dataset }}
          # and the other things that usually go into a container spec

当你去部署这个时,你可以创建一个values文件

# a.yaml
replicas: 10
dataset: dataset-1

你可以部署它:

helm install \
  one        \ # release name
  .          \ # chart location
  -f a.yaml    # additional values to use

如果你使用kubectl get deployment,你会看到one-processor,如果你仔细查看,你会看到它有10个副本,并且它的环境变量设置为dataset-1

您可以在同一命名空间中使用不同的设置创建第二个部署:

# b.yaml
replicas: 5
dataset: dataset-2
helm install two . -f b.yaml

或者在不同的命名空间中:

helm install three . -n other-namespace -f c.yaml

理论上可以有一个只安装其他子图表的图表(一个伞形图表),但它有一些实际问题,最明显的是 Helm 只想安装一个给定图表,无论它出现在图表层次结构中的哪个位置。还有其他更高级的工具,例如 HelmsmanHelmfile,它们可以让您基本上在单个文件中描述这些多个 helm install 命令。

答案 1 :(得分:0)

您可以“级联”值 YAML 文件以实现您想要的。例如,您可以将 common.yaml 定义为应用程序的所有通用设置。然后,每个单独的实例将是第二个 YAML 文件。

这是一个例子。假设文件 common.yaml 如下所示:

namespace: myapp-dev
pod-count: 1
use_ssl: true
image-name: debian:buster-slim
... more ...

假设您想要两个部署,拥有可扩展到 5 个副本,一个可扩展到 10 个。您将再创建两个文件:

# local5.yaml
pod-count: 5

# local10.yaml
pod-count: 10

请注意,您不必必须重复 common.yaml 中的设置。要部署五副本版本,您可以执行以下操作:

$ helm install -f common.yaml -f local5.yaml five . 

要部署 10 副本版本:

$ helm install -f common.yaml -f local10.yaml ten . 

YAML 文件级联,后面的文件覆盖前面的文件。