【发布时间】:2021-07-10 04:51:57
【问题描述】:
尝试在启动时获取 Tomcat 容器内的 pod 名称。已经在search.yaml 文件中使用Kubernetes Downward API 将pod 的全名公开为环境变量,如下所示(仅附加文件的一部分)。
apiVersion: apps/v1
kind: Deployment
metadata:
name: search
namespace: dev
labels:
app: search
spec:
replicas: 1
selector:
matchLabels:
app: search
template:
metadata:
labels:
app: search
spec:
hostname: search-host
imagePullSecrets:
- name: regcred
containers:
- name: search-container
image: docker.test.net/search:develop-202104070845
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
ports:
- containerPort: 8080
resources:
requests:
memory: "2048Mi"
cpu: "1"
limits:
memory: "2048Mi"
cpu: "2"
env:
- name: SERVER_GROUP
value: "SEARCH"
- name: MIN_TOMCAT_MEMORY
value: "512M"
- name: MAX_TOMCAT_MEMORY
value: "5596M"
- name: DOCKER_TIME_ZONE
value: "Asia/Colombo"
- name: AVAILABILITY_ZONE
value: "CMB"
运行 pod 后,此环境变量在 docker 级别可用。
吊舱详情
NAME READY STATUS RESTARTS AGE
search-56c9544d58-bqrxv 1/1 Running 0 4s
Pod 名称的 Pod 环境变量
POD_NAME=search-56c9544d58-bqrxv
当在名为BootsTrap.jar 的jar 中的Tomcat 容器的java 代码中访问它时,它返回为null。
String dockerPodName = System.getenv( "POD_NAME" );
是因为在tomcat容器初始化之前pod没有启动运行还是java中访问环境变量不正确还是有其他方式通过java访问pod的环境变量。
【问题讨论】:
-
您正在运行哪个容器?只是tomcat还是其他的东西?
-
只使用tomcat
-
Pod 名称应该可以通过
HOSTNAME环境变量获得,你能检查一下你是否看到这个吗?尝试使用BootsTrap.jar打印所有环境变量,你能看到吗? -
请显示您的 pod/replicaset/deployment 的完整 YAML。您在 Java 应用程序中使用 SecurityManager 吗?
-
@anemyte 将尝试分享输出
标签: java docker tomcat kubernetes