本文介绍了Pod 中的 Kubernetes 部署名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从 pod 中获取生成当前 pod 的 Kubernetes 部署/作业名称?

How can I to source the Kubernetes deployment/job name that spawned the current pod from within the pod?

推荐答案

在许多情况下,Pod 的主机名等于 Pod 的名称(您可以通过 HOSTNAME 环境变量访问它).然而,这并不是确定 Pod 身份的可靠方法.

In many cases the hostname of the Pod equals to the name of the Pod (you can access that by the HOSTNAME environment variable). However that's not a reliable method of determining the Pod's identity.

您需要使用 Downward API,它允许您将元数据作为环境变量和/或卷上的文件公开.

You will want to you use the Downward API which allows you to expose metadata as environment variables and/or files on a volume.

Pod 的名称和命名空间可以作为环境变量公开(字段:metadata.namemetadata.namespace),但有关 Pod 创建者的信息(这是注解 kubernetes.io/created-by)只能作为文件公开.

The name and namespace of a Pod can be exposed as environment variables (fields: metadata.name and metadata.namespace) but the information about the creator of a Pod (which is the annotation kubernetes.io/created-by) can only be exposed as a file.

示例:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: busybox
  labels: {app: busybox}
spec:
  selector: {matchLabels: {app: busybox}}
  template:
    metadata: {labels: {app: busybox}}
    spec:
      containers:
      - name: busybox
        image: busybox
        command:
        - "sh"
        - "-c"
        - |
          echo "I am $MY_POD_NAME in the namespace $MY_POD_NAMESPACE"
          echo
          grep ".*" /etc/podinfo/*
          while :; do sleep 3600; done
        env:
        - name: MY_POD_NAME
          valueFrom: {fieldRef: {fieldPath: metadata.name}}
        - name: MY_POD_NAMESPACE
          valueFrom: {fieldRef: {fieldPath: metadata.namespace}}
        volumeMounts:
        - name: podinfo
          mountPath: /etc/podinfo/
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "labels"
                fieldRef: {fieldPath: metadata.labels}
              - path: "annotations"
                fieldRef: {fieldPath: metadata.annotations}

太看输出了:

$ kubectl logs `kubectl get pod -l app=busybox -o name | cut -d / -f2`

输出:

I am busybox-1704453464-m1b9h in the namespace default

/etc/podinfo/annotations:kubernetes.io/config.seen="2017-02-16T16:46:57.831347234Z"
/etc/podinfo/annotations:kubernetes.io/config.source="api"
/etc/podinfo/annotations:kubernetes.io/created-by="{"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"busybox-1704453464","uid":"87b86370-f467-11e6-8d47-525400247352","apiVersion":"extensions","resourceVersion":"191157"}}
"
/etc/podinfo/annotations:kubernetes.io/limit-ranger="LimitRanger plugin set: cpu request for container busybox"
/etc/podinfo/labels:app="busybox"
/etc/podinfo/labels:pod-template-hash="1704453464"

这篇关于Pod 中的 Kubernetes 部署名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-01 13:33