我是Kubernetes的新手,不确定执行此操作的标准方法。我希望有一个微服务的许多实例,但是每个容器的参数设置略有不同。 (也许是传递给容器的环境变量是否与.yaml文件的容器规范中指定的每个实例不同?)
似乎一个具有多个副本的部署将无法正常工作。但是,在n个不同的部署中,.yaml文件略有不同似乎有点多余。也许有某种模板解决方案?
还是每个微服务都应该相同,并从中央服务中找出其参数?
我意识到这可以解释为“意见问题”,但我正在寻找典型的解决方案。
答案 0 :(得分:1)
您可以选择将StatefulSet与InitContainers加ConfigMap一起使用。
Statefulset将保证您正确的命名和顺序。 ConfigMap将使您存储细粒度的信息(例如单个属性)或粗粒度的信息(例如整个配置文件)。
可以通过多种方式在pod中使用配置数据。 ConfigMap可用于:
1)填充环境变量的值
2)在容器中设置命令行参数
3)在卷中填充配置文件
对于乞讨,您可以阅读Kubernetes – StatefulSets文章,在其中您可以找到有关这些部分如何协同工作的很好解释,并可以查看有关如何从同一映像部署具有不同属性的容器的准备好的示例。
答案 1 :(得分:1)
肯定有几种方法可以做到。一种流行的选择是使用Helm。 Helm允许您使用Go模板定义kubernetes清单,并将它们打包在称为Helm Chart的单个单元上。稍后您可以安装此图表(安装是Helm调用的方法,用于将这些清单保存在Kubernetes API中)。安装Helm Chart时,您可以传递在渲染模板时将使用的参数。这样,您可以重用几乎所有内容,而只需替换清单中的重要部分:部署,服务等。
有plenty of Helm charts available as open sources projects,您可以以此为例来创建自己的图表。