Kubernetes获取完整的pod名称作为环境变量

rslzwgfq  于 5个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(66)

我知道我可以定义这样的东西来获取容器中的pod名称:

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

字符串
但是当我运行时:$kubectl get pods
我有一个不同的结果,类似于:uipod-5d6795db87-cxxkg对应于<replicatset name>-cxxkg
有没有可能得到完整的名字(uipod-5d6795db87-cxxkg)作为命名变量?而不是只得到pod的名字(uipod)。
非常感谢

wr98u20j

wr98u20j1#

你不需要显式地设置环境变量pod name,它已经在pod中作为一个名为HOSTNAME的环境变量存在。
例如

$ kubectl run nginx --image=nginx
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectlrun --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
$
$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7bb7cd8db5-kddbs   1/1     Running   0          12s
$
$ kubectl exec -it nginx-7bb7cd8db5-kddbs bash
root@nginx-7bb7cd8db5-kddbs:/#
root@nginx-7bb7cd8db5-kddbs:/# env | grep HOSTNAME
HOSTNAME=nginx-7bb7cd8db5-kddbs
root@nginx-7bb7cd8db5-kddbs:/#

字符串

  • 注意:正如您所看到的,HOSTNAME环境变量已经设置了确切的pod名称。*
u2nhd7ah

u2nhd7ah2#

official Kubernetes documentation没有指定HOSTNAME环境变量中提供pod名称。它只提到libc中的hostname命令和gethostname函数调用:
Container的hostname是Container运行所在Pod的名称。可以通过hostname命令或libc中的gethostname函数调用获得。
因此,虽然在实践中许多Kubernetes发行版确实设置了它,但为了最大限度地兼容,最好坚持规范。
许多编程语言的标准库依赖于libc中的gethostname函数调用。例如,在Java中,InetAddress.getLocalHost().getHostName()does it

相关问题