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

6

我知道可以像这样定义以下内容,以获取我的容器中的 pod 名称:

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

但是当我运行命令:$kubectl get pods

我得到了一个不同的结果,类似于:uipod-5d6795db87-cxxkg,它对应于<replicatset name>-cxxkg

是否可能将完整名称(uipod-5d6795db87-cxxkg)作为环境变量获取?而不仅仅是Pod名称 (uipod)。

非常感谢。


1
uipod 不是 Pod 的名称。假设您正在部署一个 Deployment,那么它很可能是 Deployment 的名称。当我使用与上面相同的代码片段创建一个 Deployment 时,POD_NAME 确实会被设置为完整的 Pod 名称,而不是较短的 Deployment 名称。您能否提供一组 YAML 配置文件和运行命令,以重现您声称看到的问题? - Amit Kumar Gupta
@AmitKumarGupta 你是对的,我混淆了我的部署和 Pod 配置。 - akuma8
1个回答

15

您不需要使用 Pod 名称显式设置环境变量,因为其已作为名为 HOSTNAME 的环境变量存在于 Pod 内部。

例如:

$ 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名称。


1
正是我所需要的。 - akuma8
有没有任何文件明确提到HOSTNAME环境变量被设置了?换句话说,这是Kube-provider特定的行为还是属于一些通用规范的一部分? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接