Kubernetes目录configMap和Java系统属性

时间:2019-03-18 14:36:01

标签: spring-boot docker kubernetes

我正在尝试使用目录配置映射作为运行Spring Boot应用程序的Docker容器内部的挂载卷。我正在将某些安装路径传递给诸如spring application.yaml之类的东西,但是由于找不到配置,因此似乎没有按预期方式进行安装。例如

像这样创建configmap

kubectl create configmap example-config-dir \
 --from-file=/example/config/

Kubernetes yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: example
  labels:
   app: example
spec:
  replicas: 1
  selector:
   matchLabels:
     app: example
  template:
    metadata:
      labels:
        app: example
    spec:
     containers:
     - name: example
       image: example:latest
       ports:
         - containerPort: 8443
       volumeMounts:
          - name: config-vol
            mountPath: /config
     volumes:
       - name: config-vol
         configMap:
           name: example-config-dir

还有Dockerfile(还有其他步骤可以复制我未详细介绍的jar文件)

VOLUME /tmp
RUN echo "java -Dspring.config.location=file:///config/ -jar myjarfile.jar" > ./start-spring-boot-app.sh"
CMD ["sh", "start-spring-boot-app.sh"]

1 个答案:

答案 0 :(得分:1)

Create ConfigMaps from DirectoriesCreate ConfigMaps from files中所述,当您使用--from-file创建ConfigMap时,文件名成为存储在ConfigMap数据部分中的键 。文件内容成为键的值。

按照您想要的方式进行操作,更好的方法是像这样创建yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  SPECIAL_LEVEL: very
  SPECIAL_TYPE: charm

然后像这样申请:

kubectl create -f https://k8s.io/examples/configmap/configmap-multikeys.yaml

运行pod时,命令ls /config会在下面产生输出:

special.level
special.type

您做的方式应该生成一个与原始文件同名的文件,并在其中包含文件的内容。