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

Maa*_*mon 4 kubernetes kubernetes-helm

我遇到一种情况,我有一个应用程序,我想为其运行几组以不同方式配置的实例。我猜想,通过在线准备,人们通常会在集群中拥有同一应用程序的多个版本。

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

因此,在同一个命名空间中,我们想要进程 2 数据集。

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

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

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

欢迎示例、指点、文章。

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

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

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

Dav*_*aze 7

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
Run Code Online (Sandbox Code Playgroud)

当您要部署它时,您可以创建一个值文件

# a.yaml
replicas: 10
dataset: dataset-1
Run Code Online (Sandbox Code Playgroud)

您可以部署它:

helm install \
  one        \ # release name
  .          \ # chart location
  -f a.yaml    # additional values to use
Run Code Online (Sandbox Code Playgroud)

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

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

# b.yaml
replicas: 5
dataset: dataset-2
Run Code Online (Sandbox Code Playgroud)
helm install two . -f b.yaml
Run Code Online (Sandbox Code Playgroud)

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

helm install three . -n other-namespace -f c.yaml
Run Code Online (Sandbox Code Playgroud)

理论上可以有一个只安装其他子图表(伞形图表)的图表,但它存在一些实际问题,最值得注意的是,Helm 只希望安装给定图表的一个副本,无论它出现在图表中的位置等级制度。还有其他更高级的工具,例如HelmsmanHelmfile,它们可以让您基本上helm install在单个文件中描述这些多个命令。