2017-02-16 68 views

回答

2

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

您会希望使用Downward API,它允许您将元数据公开为卷上的环境变量和/或文件。

名称和吊舱的命名空间可以公开为环境变量(字段:metadata.namemetadata.namespace),但有关波德(这是注释kubernetes.io/created-by)的创建者的信息只能暴露一个文件。

实施例:

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\"}}\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" 
相关问题