spring-boot - config-map kubernetes 多环境

标签 spring-boot deployment kubernetes

我正在尝试使用来自 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 等
  • 在配置映射中指定环境特定属性的最佳方法是什么?以及如何在 Spring boot 应用程序中访问它们?
    例如:如果应用程序部署在 qa 中,我的服务应该返回消息“Hello from qa Kubernetes Configmap”
  • 我们也计划将来从 GIT 中读取这些配置文件。如何处理该用例?
  • 最佳答案

    让我尝试提供一个答案,我认为它可以满足您的需求,而无需使用您在大多数机器上安装的工具之外的任何工具。也许先尝试一下,如果您发现该方法变得难以管理和扩展,请转向更复杂的方法。

    步骤 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 源发生更改,只需运行上面显示的命令。

    概括

    基于原始命令,无需特殊工具,您可以:
  • 版本控制配置
  • 管理每个环境的配置
  • 当配置代码更改时更新或创建配置
  • 如果需要,可以在 CI/CD 管道中轻松应用相同的方法

  • 我强烈建议您在使用更复杂的工具来解决相同的问题之前遵循这种基本的“第一原则”方法,在许多情况下,您可以毫不费力地自己完成,学习关键概念并将更复杂的工具保存到以后,如果你真的需要它。

    希望有帮助!

    关于spring-boot - config-map kubernetes 多环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728512/

    相关文章:

    python - 一个 Django 实例一个数据库 vs 不同的 Django 实例

    spring-boot - Kubernetes 无法访问 cassandra 数据库

    java - intelij更新后无法正确导入spring boot项目

    java - Spring Boot - 远程 Zookeper 配置

    svn - 选择分支策略来满足我们的部署需求

    deployment - Windows Phone 8 模拟器 - 部署错误

    java - 执行 joborg.springframework.dao.EmptyResultDataAccessException : Incorrect result size: expected 1, 实际 0 时遇到 fatal error

    kubernetes - AKS:IP白名单(入口)

    java - 无法在 Spring 返回带有异常详细信息的 ResponseEntity

    java - 我的服务中的字段存储库需要一个无法找到的 bean