我正在尝试使用来自 Kubernetes 集群的配置数据部署 Spring Boot 应用程序。我有一个简单的 RestController,它通过从 Kubernetes 集群中读取来打印一条消息。
private String message = "Message not coming from Kubernetes config map";
@RequestMapping(value="/echo", method=GET)
public String printKubeConfig() {
return message;
}
在我的 application.yml 中指定了配置映射的名称
spring:
application:
name: echo-configmap
echo-configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: echo-configmap
data:
application.properties: |-
message=Hello from dev Kubernetes Configmap
application_qa.properties: |-
message=Hello from qa Kubernetes Configmap
我有几个环境,如 qa、int、test 等
例如:如果应用程序部署在 qa 中,我的服务应该返回消息“Hello from qa Kubernetes Configmap”
最佳答案
让我尝试提供一个答案,我认为它可以满足您的需求,而无需使用您在大多数机器上安装的工具之外的任何工具。也许先尝试一下,如果您发现该方法变得难以管理和扩展,请转向更复杂的方法。
步骤 1:每个环境的版本控制配置映射
创建一个文件夹,如 k8s/configmaps
或其他什么,并为每个环境创建一个配置映射:
k8s/configmaps/properties.dev.yaml
k8s/configmaps/properties.qa.yaml
k8s/configmaps/properties.sit.yaml
k8s/configmaps/properties.uat.yaml
每个配置映射都应包含您的环境特定设置。
第 2 步:每个环境都有一个命名空间
为每个环境创建一个 k8s 命名空间,例如:
application-dev
application-qa
application-sit
application-uat
第 3 步:为每个环境创建 configmap
一点点 bash 会在这里有所帮助:
#!/usr/bin/env bash
# apply-configmaps.sh
namespace="application-${ENVIRONMENT}"
for configmap in ./k8s/configmaps/*.${ENVIRONMENT}.yml; do
echo "Processing ConfigMap $configmap"
kubectl apply -n ${namespace} -f $configmap
done
现在,为任何环境创建或更新配置映射所需要做的就是:
ENVIRONMENT=dev ./update-configmaps.sh
第 4 步:使用 CI/CD 完成工作
现在您可以创建 CI/CD 管道 - 如果您的 configmap 源发生更改,只需运行上面显示的命令。
概括
基于原始命令,无需特殊工具,您可以:
我强烈建议您在使用更复杂的工具来解决相同的问题之前遵循这种基本的“第一原则”方法,在许多情况下,您可以毫不费力地自己完成,学习关键概念并将更复杂的工具保存到以后,如果你真的需要它。
希望有帮助!
关于spring-boot - config-map kubernetes 多环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728512/