在 k8s 中定义环境变量的值嵌套环境变量无法读取

一、描述

  • 将 jvm 参数放到k8s环境变量中,如果值也有环境变量会导致无法读取环境变量问题,导致服务启动异常

1.1、yaml 内容

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    build-user: akiraka
    release-type: JAVA
  name: test
  namespace: beta
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      release-name: test
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        build-user: akiraka
        release-type: JAVA
      name: test
      namespace: beta
    spec:
      containers:
        - command:
            - ping
            - www.baidu.com
          env:
            - name: JvmParam
              value: >-
                -D=io.netty.noPreferDirect=true -verbose:gc
                -Xloggc:/root/${HOSTNAME}-%t.log -XX:+PrintGCDetails
                -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation
                -XX:NumberOfGCLogFiles=30 -XX:GCLogFileSize=100M

1.2、错误提示

  • 因为没读取到 ${HOSTNAME} 内容导致启动失败
root@test-7b79996d95-j6mzn:/$java -jar ${JvmParam} /app/test.jar
Invalid file name for use with -Xloggc: Filename can only contain the characters [A-Z][a-z][0-9]-_.%[p|t] but it has been /root/${HOSTNAME}-%t.log
Note %p or %t can only be used once
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

1.3、解决思路

  • 说白了 通过 envsubst 将字符串环境变量内容解析出来,然后重新定义一个相同变量即可
#   基础镜像调整 增加 envsubst 
# debain/ubuntu 安装 apt-get update -y; apt-get install gettext-base
CMD export JvmParam=`echo ${JvmParam} | envsubst`; java ${JvmParam} ${LinkParam} -jar /app/%v.jar;

版权声明:
作者:Akiraka
链接:https://www.akiraka.net/kubernetes/1556.html
来源:Akiraka
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
在 k8s 中定义环境变量的值嵌套环境变量无法读取
一、描述 将 jvm 参数放到k8s环境变量中,如果值也有环境变量会导致无法读取环境变量问题,导致服务启动异常 1.1、yaml 内容 --- apiVersion: apps/v1 kind:……
<<上一篇
下一篇>>
文章目录
关闭
目 录