困境:使用相同的 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 中没有该功能。