获取Kuberbetes Pod名称id作为环境变量



我正试图将pod名称中的id作为yaml文件中的环境变量:

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;作为env变量。

我可以通过暴露获得吊舱名称:

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

但是来自ExposePod Information to Containers Through Environment Variables的POD_NAME返回整个POD名称。我实际上是在使用ververica平台并遵循此文档。

有可能做到吗?

以下是valueFrom支持的内容。

valueFrom:环境变量值的源。如果值不为空,则无法使用。

EnvVarSource表示EnvVar值的源。

configMapKeyRef(对象(

选择ConfigMap的键。

fieldRef(对象(

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

resourceFieldRef(对象(

选择容器的资源:当前只支持资源限制和请求(limits.pu、limits.memory、limits.eephemeral-storage、requests.cu、requests.memory和requests.ephemeral storage(。

secretKeyRef(对象(

在pod的名称空间中选择一个密钥

所以你尝试的方式是行不通的。

您从metadata.name获得的字符串实际上已经公开为名为HOSTNAME的环境变量。

了解了这些名称的模式,namehash您可以使用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##*-}"
$ kubectl create -f get-hash.yaml
$ kubectl logs job.batch/get-hash
the podname is: get-hash-mpf7p
the hash is: mpf7p

相关内容

  • 没有找到相关文章

最新更新