gpt4 book ai didi

docker - Kubernetes 多个具有不同配置的相同应用程序和数据库部署

转载 作者:行者123 更新时间:2023-12-02 11:39:05 26 4
gpt4 key购买 nike

困境 :使用相同的 docker 镜像和代码,但不同的配置(使用子域的不同客户端)部署多个应用程序和数据库容器对。

有什么合乎逻辑的方法可以解决这个问题,因为 kubernetes 似乎没有支持这种设置的集成?

可能的方法

  • 为所有应用部署使用单一应用服务,为所有数据库部署使用单一数据库服务。运行单个 Nginx 静态文件服务和部署,它将从应用部署之间共享的静态卷中提供静态文件(都使用相同的静态文件集)。每当需要新部署时,使用 bash 脚本复制应用程序和数据库 .yaml 部署文件,并将 sed 文本替换为客户端的名称,并指向正确的 configmap(当然是手动编写的)并 kubectl 应用它们。一个主要的 nginx 入口将处理传入的流量并通过应用程序部署服务指向正确的 pod
  • 与上面类似,除了使用 StatefulSet 而不是单独的部署,以及一个 init 容器将不同的配置复制到挂载的卷(唯一的缺点是你不能删除 statefulset 中间的项目,如果你不再需要,就会出现这种情况客户端的特定容器,以及这似乎是一种非常hacky的方法)。

  • 理想情况下,如果 StatefulSet 可以使用向下的 api 根据可以解决问题的有状态集的索引动态选择配置映射名称(您基本上可以使用名称中的索引手动制作配置文件,并且它将被选中适当)。就像是:
    env:
    - name: POD_NAME
    valueFrom:
    fieldRef:
    fieldPath: metadata.name

    envFrom:
    - configMapRef:
    name: $(POD_NAME)-config

    但是,该功能在 kubernetes 中不可用。

    最佳答案

    Helm 这样的模板引擎可以帮助解决这个问题。 (我相信当前 Kubernetes 附带的 Kustomize 也可以这样做,但我对 Helm 更熟悉。)基本思想是您有一个包含 Kubernetes YAML 文件但可以使用模板语言的图表(Go text/template 库)动态填充内容。

    在这个设置中,通常你会让 Helm 创建 ConfigMap 和匹配的 Deployment;在您描述的设置中,您将为每个租户单独安装它(Helm 版本)。假设 Nginx 配置足够不同以至于您想将它们存储在 external files 中;图表的核心部分包括

    values.yaml (可覆盖的配置, helm install --set nginxConfig=bar.conf ):

    # nginxConfig specifies the name of the Nginx configuration
    # file to embed.
    nginxConfig: foo.conf

    模板/configmap.yaml :

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: {{ .Release.Name }}-{{ .Chart.Name }}-config
    data:
    nginx.conf: |-
    {{ .Files.Get .Values.nginxConfig | indent 4 }}

    部署.yaml :

    apiVersion: v1
    kind: Deployment
    metadata:
    name: {{ .Release.Name }}-{{ .Chart.Name }}-nginx
    spec:
    ...
    volumes:
    - name: nginx-config
    configMap:
    name: {{ .Release.Name }}-{{ .Chart.Name }}-config
    {{ .Release.Name }}-{{ .Chart.Name }}是一个典型的约定,允许在同一个命名空间中安装多个图表副本;第一部分是你给 helm install 起的名字命令,第二部分是图表本身的名称。也可以直接指定ConfigMap内容,引用其他 .Values...来自 values.yaml 的设置文件,使用 ConfigMap 作为环境变量而不是文件,等等。

    关于docker - Kubernetes 多个具有不同配置的相同应用程序和数据库部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59872398/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com