在同一命名空间中使用 Helm 部署单个应用程序的多个版本
Deploying multiple version of a single application with Helm in the same namespace
我有一个应用程序,我想 运行 几组不同配置的实例。我猜想通过在线准备,人们通常会在您的集群中拥有相同应用程序的多个版本。
但让我稍微描述一下高级用例。该应用程序是一个组件,它将一个数据集和一组说明如何处理该数据集的指令作为配置。数据集实际上是一个数据源。
所以在同一个命名空间中,我们想要例如进程 2 数据集。
所以这就像为同一个应用程序进行了两次部署。每个数据集都有不同的要求,因此我们应该能够将 deployment1 扩展到 10 个实例,将 deployment 2 扩展到 5 个实例。
问题是它是相同的应用程序,到目前为止它是相同的控制图和部署定义。
问题是目前有哪些不同的选项来处理这个问题。
欢迎提供示例、指针和文章。
到目前为止,我发现以下文章最有希望:
https://itnext.io/support-multiple-versions-of-a-service-in-kubernetes-using-helm-ce26adcb516d
我想到的另一件事是将部署图表复制到文件夹名称不同的 2 个子图表中。
Helm 非常直接地支持这一点。
在 Helm 术语中,您将编写一个 图表 来描述如何安装您的应用程序的一个副本。这将创建 Kubernetes 部署和其他清单;但它具有模板,允许在部署时填写应用程序的某些部分。安装的一个副本是 release,但您可以在相同或不同的 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
当你去部署这个时,你可以创建一个值文件:
# 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 将要安装无论给定图表出现在图表层次结构中的哪个位置,都只有一个副本。还有其他更高级别的工具,例如 Helmsman and Helmfile,可以让您基本上在单个文件中描述这些多个 helm install
命令。
您可以“级联”YAML 文件的值来实现您想要的效果。例如,您可以将 common.yaml
定义为应用程序的所有通用设置。然后,每个单独的实例将是第二个 YAML 文件。
这是一个例子。假设文件 common.yaml
看起来像这样:
namespace: myapp-dev
pod-count: 1
use_ssl: true
image-name: debian:buster-slim
... more ...
假设您想要两个 Deployment,一个扩展到 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 文件级联,后面的文件覆盖前面的文件。
我有一个应用程序,我想 运行 几组不同配置的实例。我猜想通过在线准备,人们通常会在您的集群中拥有相同应用程序的多个版本。
但让我稍微描述一下高级用例。该应用程序是一个组件,它将一个数据集和一组说明如何处理该数据集的指令作为配置。数据集实际上是一个数据源。
所以在同一个命名空间中,我们想要例如进程 2 数据集。
所以这就像为同一个应用程序进行了两次部署。每个数据集都有不同的要求,因此我们应该能够将 deployment1 扩展到 10 个实例,将 deployment 2 扩展到 5 个实例。
问题是它是相同的应用程序,到目前为止它是相同的控制图和部署定义。
问题是目前有哪些不同的选项来处理这个问题。
欢迎提供示例、指针和文章。
到目前为止,我发现以下文章最有希望:
https://itnext.io/support-multiple-versions-of-a-service-in-kubernetes-using-helm-ce26adcb516d
我想到的另一件事是将部署图表复制到文件夹名称不同的 2 个子图表中。
Helm 非常直接地支持这一点。
在 Helm 术语中,您将编写一个 图表 来描述如何安装您的应用程序的一个副本。这将创建 Kubernetes 部署和其他清单;但它具有模板,允许在部署时填写应用程序的某些部分。安装的一个副本是 release,但您可以在相同或不同的 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
当你去部署这个时,你可以创建一个值文件:
# 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 将要安装无论给定图表出现在图表层次结构中的哪个位置,都只有一个副本。还有其他更高级别的工具,例如 Helmsman and Helmfile,可以让您基本上在单个文件中描述这些多个 helm install
命令。
您可以“级联”YAML 文件的值来实现您想要的效果。例如,您可以将 common.yaml
定义为应用程序的所有通用设置。然后,每个单独的实例将是第二个 YAML 文件。
这是一个例子。假设文件 common.yaml
看起来像这样:
namespace: myapp-dev
pod-count: 1
use_ssl: true
image-name: debian:buster-slim
... more ...
假设您想要两个 Deployment,一个扩展到 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 文件级联,后面的文件覆盖前面的文件。