【问题标题】:Kubernetes get pod's full name inside tomcat container in JavaKubernetes在Java中的tomcat容器中获取pod的全名
【发布时间】: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


【解决方案1】:

您将MY_POD_NAME 设置为环境变量,但要查找POD_NAME。在 Java 代码和部署中使用相同的名称。

注意:您的 YAML 似乎有错误的缩进,我认为这只是一个复制粘贴工件。如果不是这种情况,可能会导致部署更改被拒绝,因为 YAML 无效。

【讨论】:

  • 我已经复制粘贴了我使用过的旧 YAML 文件。在新的 YAML 中,我使用了环境变量 POD_NAME,但它在 java 级别中仍然不可用。没有任何部署问题,这已成功部署。由于复制粘贴问题,缩进似乎是错误的。我已经用另一种方式解决了这个问题,我会在一段时间内分享它。感谢您的帮助。
  • 您可以转储所有环境变量以查看实际存在的内容。
猜你喜欢
  • 2016-07-09
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
相关资源
最近更新 更多