Flink 获取Kuberbetes Pod name id作为环境变量

nfs0ujit  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(181)

我尝试在yaml文件中获取pod名称中的id作为环境变量:

job-05d93d91-d527-4b06-ad89-593f0350ecd6-jobmanager--1-qfjqf      1/1     Running   0          22m
job-05d93d91-d527-4b06-ad89-593f0350ecd6-taskmanager-66758j5h4d   1/1     Running   0          22m
job-05d93d91-d527-4b06-ad89-593f0350ecd6-taskmanager-66758vsj5q   1/1     Running   0          22m

字符串
我想有“66758vsj5q”和“66758j5h4d”和“qfjqf”作为一个环境变量。
我可以通过暴露来获取pod名称:

envVars:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name


但是来自Expose Pod Information to Containers Through Environment Variables的POD_NAME返回整个pod名称。我实际上使用的是ververica平台,并遵循此文档。
有可能做到吗?

olqngx59

olqngx591#

以下是您可以使用valueFrom获得的支持内容。
valueFrom:环境变量值的来源。如果value不为空,则无法使用。
EnvVarSource表示EnvVar的值的源。

获取MapKeyRef(object)

重新配置ConfigMap的键。

fieldRef(对象)

pod的一个字段:支持metadata.name、metadata.namespace、metadata.labels、metadata.annotations、spec.nodeName、spec.serviceAccountName、status.hostIP、status. podIP。

resourceFieldRef(object)

调用容器的资源:目前只支持资源限制和请求(limits.cpu、limits.memory、limits.ephemeral-storage、requests.cpu、requests.memory和requests.ephemeral-storage)。

secretKeyRef(object)

在pod的命名空间中创建一个secret的密钥
所以你尝试的方式,它不起作用。
metadata.name获取的字符串实际上已经作为名为HOSTNAME的环境变量公开。
知道这些名字的模式,name-hash 你可以使用shell或任何其他工具来获取最后一部分。例如,通过参数扩展或通过连字符分割。这取决于你想要使用哪个上下文。

apiVersion: batch/v1
kind: Job
metadata:
  name: get-hash
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: get-hash
          image: busybox
          command: ["sh", "-c"]
          args:
            - |
              echo "the podname is: $HOSTNAME";
              echo "the hash is: ${HOSTNAME##*-}"

个字符

相关问题