我正试图将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