[英]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.