在 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
1
二维码
海报
在 k8s 中定义环境变量的值嵌套环境变量无法读取
一、描述
将 jvm 参数放到k8s环境变量中,如果值也有环境变量会导致无法读取环境变量问题,导致服务启动异常
1.1、yaml 内容
---
apiVersion: apps/v1
kind:……
文章目录
关闭
共有 0 条评论