【问题标题】:Kubernetes access labels from containersKubernetes 从容器中访问标签
【发布时间】:2015-11-24 10:49:56
【问题描述】:

当我们为复制控制器创建 yml 时,我们可以为正在创建的 pod 提供标签。

apiVersion: v1
kind: ReplicationController
metadata:
  name: redis
spec:
  template:
    metadata:
      labels:
        app: redis
        tier: backend

驻留在此 pod 中的容器可以访问这些标签值吗?

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    查看Downward API,它可以让容器更多地了解自己。

    【讨论】:

    【解决方案2】:

    从容器内部访问 pod 信息的一种方法是使用环境变量。 pod 的 yaml 文件为:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-env
    spec:
      containers:
        - name: test-container
          image: ubuntu
          command: [ "sh", "-c"]
          args:
          - while true; do
              echo -en '\n';
              printenv MY_NODE_NAME MY_POD_NAME;
              printenv MY_POD_IP 
              sleep 1000;
            done;
          env:
            - name: MY_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: MY_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
      restartPolicy: Never
    

    mY_POD_NAME 环境变量从 pod 的 spec.nodeName 字段中获取其值。同样,我们也可以将容器的字段作为值。 使用以下命令验证此连接到 pod:

    kubectl exec -it pod-env -- /bin/bash
    

    并打印环境变量:

    printenv MY_POD_NAME
    

    将信息从 pod 传递到容器的其他方式是使用 downAPI:https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-18
      • 2017-02-21
      • 2021-12-04
      • 2020-04-12
      • 1970-01-01
      • 2020-07-20
      • 2015-08-21
      相关资源
      最近更新 更多