繁体   English   中英

通过 configMap 将参数传递给 GKE google cloud 中的 Spring boot 应用程序

[英]Passing params via configMap to Spring boot application in GKE google cloud

我正在配置应用程序以在 Kubernetes 谷歌云集群中工作。 我想通过configMap将参数传递给 Spring boot application.properties中的 application.properties。 我正在尝试通过Environment Variable传递价值。

我已经在命名空间default的谷歌云 Kubernetes 集群中创建了配置映射,如下所示:

apiVersion: v1
kind: ConfigMap
metadata: 
  name: app-config
data:
  config-key: 12345789abde 

kubectl create -f app-config.yaml -n default
configmap/app-config created

我正在检查是否已创建 configMap:

在此处输入图像描述

键值对看起来不错:

在此处输入图像描述

我正在尝试使用cloudbuild.yaml部署 Spring boot 应用程序(当我不使用 configMap 时它可以工作)。 内容是:

substitutions:
  _CLOUDSDK_COMPUTE_ZONE: us-central1-c  # default value
  _CLOUDSDK_CONTAINER_CLUSTER: kubernetes-cluster-test      # default value

steps:
  - id: 'Build docker image'
    name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/${_TECH_RADAR_PROJECT_ID}/${_TECH_CONTAINER_IMAGE}:$SHORT_SHA', '.']
  - id: 'Push image to Container Registry'
    name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/${_TECH_RADAR_PROJECT_ID}/${_TECH_CONTAINER_IMAGE}:$SHORT_SHA']
  - id: 'Set image in yamls'
    name: 'ubuntu'
    args: ['bash','-c','sed -i "s,${_TECH_CONTAINER_IMAGE},gcr.io/${_TECH_RADAR_PROJECT_ID}/${_TECH_CONTAINER_IMAGE}:$SHORT_SHA," deployment.yaml']
  - id: 'Create or update cluster based on last docker image'
    name: 'gcr.io/cloud-builders/kubectl'
    args: ['apply', '-f', 'deployment.yaml']
    env:
      - 'CLOUDSDK_COMPUTE_ZONE=${_CLOUDSDK_COMPUTE_ZONE}'
      - 'CLOUDSDK_CONTAINER_CLUSTER=${_CLOUDSDK_CONTAINER_CLUSTER}'
  - id: 'Expose service to outside world via load balancer'
    name: 'gcr.io/cloud-builders/kubectl'
    args: [ 'apply', '-f', 'service-load-balancer.yaml' ]
    env:
      - 'CLOUDSDK_COMPUTE_ZONE=${_CLOUDSDK_COMPUTE_ZONE}'
      - 'CLOUDSDK_CONTAINER_CLUSTER=${_CLOUDSDK_CONTAINER_CLUSTER}'
options:
  logging: CLOUD_LOGGING_ONLY

deployment.yaml参考配置映射(容器也在默认命名空间中)是:

apiVersion: "apps/v1"
kind: "Deployment"
metadata:
  name: "java-kubernetes-clusters-test"
  namespace: "default"
  labels:
    app: "java-kubernetes-clusters-test"
spec:
  replicas: 3
  selector:
    matchLabels:
      app: "java-kubernetes-clusters-test"
  template:
    metadata:
      labels:
        app: "java-kubernetes-clusters-test"
    spec:
      containers:
        - name: "app"
          image: "kubernetes-cluster-test-image"
          env:
            - name: CONFIG_KEY
              valueFrom:
                configMapKeyRef:
                  name: app-config
                  key: config-key

Spring boot 无法读取占位符,我在尝试将应用程序部署到谷歌云时遇到错误,如下所示:

在此处输入图像描述

我正在尝试在 application.properties 中引用名称为 CONFIG_KEY 的application.properties

com.example.dockerkubernetes.property.value=${CONFIG_KEY}

然后在 Spring Boot 控制器中:

@RestController
@RequiredArgsConstructor
public class MyController {

    @Value("${com.example.dockerkubernetes.property.value}")
    private String testValue;

    public String getConfigMapTestKey() {
        return this.testValue;
    }
}

有谁知道为什么它不起作用? 也许缺少某些权限? 我将不胜感激。

您可以从环境中读取属性,但这可能需要一些编码和重构(取决于您的代码的其余部分)来导入和使用这些值,即导入到Properties对象中。

如果您想直接使用application.properties文件,最好使用 SubPath将单个文件安装到应用程序的容器中。

确保您完全按照链接的官方文档中的指定安装文件,否则您可能会收到与容器的 FS 权限相关的错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM