Kubernetes deployment name from within a pod?

前端 未结 1 1465
后悔当初
后悔当初 2021-01-18 10:55

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

相关标签:
1条回答
  • 2021-01-18 10:57

    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.

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

    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.

    Example:

    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}
    

    Too see the output:

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

    Output:

    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\"}}\n"
    /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"
    
    0 讨论(0)
提交回复
热议问题