精华内容
下载资源
问答
  • pod信息
    千次阅读
    2022-01-23 14:36:05

    每个Pod在成功创建出来以后,都会被系统分配唯一的名字、IP地址,并且处于某个Namespace中。在Pod容器内要获取Pod这些重要信息,可以使用Downward API。

    Downward API可以通过以下两种方式将Pod信息注入容器底部:

    • 环境变量。用于单个变量,可以将Pod信息和Container信息注入容器内部。
    • Volume挂载:将数组类信息生成为文件,挂载到容器内部。

    一、环境变量方式:将Pod信息注入为环境变量

    下例通过Downward API将Pod的IP、名称和所在Namespace注入容器的环境变量中,容器应用使用env命令将全部环境变量打印到标准输出中:

    dapi-test-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      containers:
     - name: test-container
        image: busybox
        command: ["/bin/sh","-c","env"]
        env:
          - name: MY_POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: MY_POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: MY_POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
    restartPolicy: Never
    

    注意到上面valueFrom这种特殊的语法是Downward API的写法。目前Downward API提供了以下变量。

    • metadata.name:Pod的名称,当Pod通过RC生成时,其名称是RC随机产生的唯一名称。
    • status.podIP:Pod的IP地址,之所以叫作status.podIP而非metadata.IP,是因为IP属于状态数据,而非元数据。
    • metadata.namespace:Pod所在的Namespace。

    运行kubectl create命令创建Pod:

    kubectl create -f dapi-test-pod.yaml
    

    查看dapi-test-pod的日志:

    kubectl logs dapi-test-pod
    ......
    MY_POD_NAMESPACE=default
    MY_POD_IP=172.17.1.2
    MY_POD_NAME=dapi-test-pod
    

    从日志中可以看到Pod的IP、Name及Namespace等信息都被正确保存到了Pod的环境变量中。

    二、环境变量方式:将容器资源信息注入为环境变量

    下例通过Downward API将Container的资源请求和限制信息注入容器的环境变量中,容器应用使用printenv命令将设置的资源请求和资源限制环境变量打印到标准输出中:
    dapi-test-pod-container-vars.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod-container-vars
    spec:
      containers:
     - name: test-container
       image: busybox
       command: ["sh","-c"]
       args:
     - while true;do
          echo -en '\n';
          printenv MY_CPU_REQUEST MY_CPU_LIMIT;
          printenv MY_MEM_REQUEST MY_MEM_LIMIT;
          sleep 3600;
         done;
    	resources:
    	  requests:
    	    memory: "32Mi"
    	    cpu: "125m"
    	  limits:
    	    memory: "64Mi"
    	    cpu: "250m"
    	env:
    	  - name: MY_CPU_REQUEST
    	    valueFrom:
    	      resourceFieldRef:
    	        containerName: test-container
    	        resource: request.cpu
    	  - name: MY_CPU_LIMIT
    	    valueFrom:
    	      resourceFieldRef:
    	        containerName: test-container
    	        resource: limits.cpu
    	  - name: MY_MEM_REQUEST
    	    valueFrom:
    	      resourceFieldRef:
    	        containerName: test-container
    	        resource: request.memory
    	  - name: MY_MEM_LIMIT
    	  	valueFrom:
    	  	  resourceFieldRef:
    	  	    containerName: test-container
    	  	    resource: limits.memory
    restartPolicy: Never	
    

    注意valueFrom这种特殊的Downward API语法,目前resourceFieldRef可以将容器的资源请求和资源限制等配置设置为容器内部的环境变量。

    • request.cpu:容器的CPU请求值
    • limits.cpu:容器的CPU限制值
    • requests.memory:容器的内存请求值
    • limits.memory:容器的内存限制值
    kubectl create -f dapi-test-pod-container-vars.yaml
    kubectl get pods
    

    查看dapi-test-pod-container-vars的日志:

    kubectl logs dapi-test-pod-container-vars
    

    从日志中可以看到Container的requests.cpu、limits.cpu、requests.memory、limits.memory等信息被正确保存到了Pod的环境变量中。

    三、Volume挂载方式

    下例通过Downward API将Pod的Label、Annotation列表通过Volume挂载为容器内的一个文件,容器应用使用echo命令将文件内容打印到标准输出中:

    dapi-test-pod-volume.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod-volume
      labels:
        zone: us-est-coast
        cluster: test-cluster1
        rack: rack-22
      annotations:
        build: two
        builder: john-doe
    spec:
      containers:
     - name: test-container
       image: busybox
       imagePullPolicy: Never
       command: ["sh","-c"]
       args:
     - whild true; do
          if [[ -e /etc/labels ]]; then
          	echo -en '\n\n'; cat /etc/labels; fi;
          if [[ -e /etc/annotations ]]; then
            echo -en '\n\n'; cat /etc/annotations; fi;
          sleep 3600;
        done;
      volumeMounts:
      	- name: podinfo
      	  mountPath: /etc
      	  readOnly: false
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "labels"
                fieldRef:
                  fieldPath: metadata.labels
              - path: "annotations"
              	fieldRef:
              	  fieldPath: metadata.annotations
    

    注意volumes中downwardAPI的特殊语法,通过items的设置,将会以path的名称生成文件。

    • 将在容器内生成/etc/labels和/etc/annotations两个文件,/etc/labels中将包含metadata.labels的全部Label列表,/etc/annotations中将包含metadata.annotations的全部Label列表。

    运行kubectl create命令创建Pod

    kubectl create -f dapi-test-pod-volume.yaml
    
    kubectl get pods
    

    查看dapi-test-pod-volume的日志:

    kubectl logs dapi-test-pod-volume
    zone="us-est-coast"
    cluster="test-cluster1"
    rack="rack-22"
    
    build="two"
    builder="john-doe" 
    

    从日志中看到Pod的Label和Annotation信息都被保存到了容器内的/etc/labels和/etc/annotations文件中。

    四、Downward API价值

    • 在某些集群中,集群中的每个节点都需要将自身标识ID及进程绑定的IP地址等信息事先写入配置文件中,进程启动时读取这些信息,然后发不到某个类似服务注册中心的地方,以实现集群节点的自动发现功能。
    • 此时Downward API就可以派上用场了,具体做法是先编写一个预启动脚本或Init Container,通过环境变量或文件方式获取Pod自身的名称、IP地址等信息,然后写入主程序的配置文件中,最后启动主程序。
    更多相关内容
  • 容器中获取Pod信息

    容器中获取Pod信息

    众所周知,Pod的逻辑概念是在容器之上的,Kubernetes创建Pod治好后,就会为Pod和相关的容器设定一些额外的信息,如pod的名称、IP、Node IP、Lable、Annotaion以及容器的相关的资源限制等,在很多的使用场景中,这些信息对容器内的应用有很大的用处,Kubernetes提供了Downward API机制来将Pod和容器的某些元数据信息注入到容器环境中以方便提供给容器中的应用使用。

    Downward API可以通过以下两种方式将Pod和容器的元数据信息注入容器内部。

    • 环境变量:将Pod或者容器信息设置为容器的环境变量。
    • Volume挂载:将Pod或者容器信息以文件的形式挂载到容器内部。

    环境变量方式

    将Pod信息设置为容器内的环境变量

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-envars-fieldref
    spec:
      containers:
        - name: test-container
          image: busybox
          command: [ "sh", "-c"]
          args:
          - while true; do
              echo -en '\n';
              printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
              printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
              sleep 10;
            done;
          env:
            - name: MY_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName		# Pod所在的Node的名称
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name		# Pod的名称
            - name: MY_POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace	# Pod所在的命名空间的名称
            - name: MY_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP		# Pod的IP地址
            - name: MY_POD_SERVICE_ACCOUNT
              valueFrom:
                fieldRef:
                  fieldPath: spec.serviceAccountName	# Pod使用的ServiceAccount名称
      restartPolicy: Never
    

    注意:环境变量不直接设置value,而是设置valueFrom对Pod的元数据进行引用
    使用上述的YAML文件创建Pod,通过日志打印可将环境变量的值打印出来,可以通过日志看到Pod的Node IP、Pod的名称、命名空间的名称、Pod IP、ServiceAccount名称等相关的容器的环境变量。

    将Container的信息设定为容器的环境变量

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-envars-resourcefieldref
    spec:
      containers:
        - name: test-container
          image: busybox
          imagePullPolicy: Never
          command: [ "sh", "-c"]
          args:
          - while true; do
              echo -en '\n';
              printenv MY_CPU_REQUEST MY_CPU_LIMIT;
              printenv MY_MEM_REQUEST MY_MEM_LIMIT;
              sleep 10;
            done;
          resources:
            requests:
              memory: "32Mi"
              cpu: "125m"
            limits:
              memory: "64Mi"
              cpu: "250m"
          env:
            - name: MY_CPU_REQUEST
              valueFrom:
                resourceFieldRef:
                  containerName: test-container
                  resource: requests.cpu			# 容器的CPU请求值
            - name: MY_CPU_LIMIT
              valueFrom:
                resourceFieldRef:
                  containerName: test-container
                  resource: limits.cpu				# 容器的CPU限制值
            - name: MY_MEM_REQUEST
              valueFrom:
                resourceFieldRef:
                  containerName: test-container
                  resource: requests.memory			# 容器的内存请求值
            - name: MY_MEM_LIMIT
              valueFrom:
                resourceFieldRef:
                  containerName: test-container
                  resource: limits.memory			# 容器的内存限制值
      restartPolicy: Never
    

    在上述的YAML文件中,通过Downward API将Container的资源限制信息设定为环境变量、

    Volume挂载方式

    将Pod信息挂载为容器内部文件

    apiVersion: v1
    kind: Pod
    metadata:
      name: kubernetes-downwardapi-volume-example
      labels:
        zone: us-est-coast
        cluster: test-cluster1
        rack: rack-22
      annotations:
        build: two
        builder: john-doe
    spec:
      containers:
        - name: client-container
          image: busybox
          command: ["sh", "-c"]
          args:
          - while true; do
              if [[ -e /etc/podinfo/labels ]]; then
                echo -en '\n\n'; cat /etc/podinfo/labels; fi;
              if [[ -e /etc/podinfo/annotations ]]; then
                echo -en '\n\n'; cat /etc/podinfo/annotations; fi;
              sleep 5;
            done;
          volumeMounts:
            - name: podinfo
              mountPath: /etc/podinfo
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "labels"
                fieldRef:
                  fieldPath: metadata.labels			# Pod的Lable列表
              - path: "annotations"
                fieldRef:
                  fieldPath: metadata.annotations		# Pod的Annotation列表
    

    在Pod的volumes字段中使用Downward API的方法:通过fieldRef字段设定需要引用Pod的元数据信息,将其设定到volume的items中。
    通过容器级别volumeMounts的设置,系统会基于volume中各item的path名称生成文件。
    按照上述的YAML文件,系统将在容器中的/etc/podinfo目录下生成lables和annotations两个文件,在lables文件中包含了Pod的所有的Label列表,在annotation文件中包含了Pod的所有的Annotation列表。

    使用上述的文件创建Pod,并且使用查看日志命令,可以查看到相关的信息,也可以进入容器中查看相关的路径下的挂载文件,并且查看挂载文件中的内容。

    将Container信息挂载为容器内部文件

    apiVersion: v1
    kind: Pod
    metadata:
      name: kubernetes-downwardapi-volume-example-2
    spec:
      containers:
        - name: client-container
          image: k8s.gcr.io/busybox:1.24
          command: ["sh", "-c"]
          args:
          - while true; do
              echo -en '\n';
              if [[ -e /etc/podinfo/cpu_limit ]]; then
                echo -en '\n'; cat /etc/podinfo/cpu_limit; fi;
              if [[ -e /etc/podinfo/cpu_request ]]; then
                echo -en '\n'; cat /etc/podinfo/cpu_request; fi;
              if [[ -e /etc/podinfo/mem_limit ]]; then
                echo -en '\n'; cat /etc/podinfo/mem_limit; fi;
              if [[ -e /etc/podinfo/mem_request ]]; then
                echo -en '\n'; cat /etc/podinfo/mem_request; fi;
              sleep 5;
            done;
          resources:
            requests:
              memory: "32Mi"
              cpu: "125m"
            limits:
              memory: "64Mi"
              cpu: "250m"
          volumeMounts:
            - name: podinfo
              mountPath: /etc/podinfo
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "cpu_limit"
                resourceFieldRef:
                  containerName: client-container
                  resource: limits.cpu					# 容器的CPU限制
                  divisor: 1m
              - path: "cpu_request"
                resourceFieldRef:
                  containerName: client-container
                  resource: requests.cpu				# 容器的CPU请求
                  divisor: 1m
              - path: "mem_limit"
                resourceFieldRef:
                  containerName: client-container
                  resource: limits.memory				# 容器的内存限制
                  divisor: 1Mi
              - path: "mem_request"
                resourceFieldRef:
                  containerName: client-container
                  resource: requests.memory				# 容器的内存请求
                  divisor: 1Mi
    

    使用上述的YAML文件创建Pod,查看Pod的日志,可以看到挂载文件的相关内容,也可以进入容器查看挂载文件内容。

    Downward API支持设定的Pod和Container信息

    • 通过fieldRef设定的元数据如下

      • metadata.name:Pod名称
      • metadata.namespace: Pod所在的命名空间名称
      • metadata.uid:Pod的UID (Kubernetes 1.8.0 +)
      • metadata.labels[‘<KEY>’]:Pod某个Label的值,通过KEY进行引用
      • metadata.annotations[‘<KEY>’]:Pod某个Annotation的值,通过KEY进行引用
    • 通过resourceFieldRef设定的元数据如下

      • Container级别的CPU Limit
      • Container级别的CPU Request
      • Container级别的Memory Limit
      • Container级别的Memory Request
      • Container级别的临时存储空间(ephemeral-storage)Limit (Kubernetes 1.8.0 +)
      • Container级别的临时存储空间(ephemeral-storage)Request (Kubernetes 1.8.0 +)
    • 通过fieldRef字段设定的元数据如下

      • metadata.label:Pod的Label列表,每个Label都以KEY为文件名,value为文件内容,每个Label占文件一行
      • metadata.annotations: Pod的Annotation列表,每个Annotation都以KEY为文件名,value为文件内容,每个Annotation占文件一行
    • Pod元数据信息可以设置为容器内的环境变量

      • status.podIP:Pod的IP地址
      • spec.serviceAccountName:Pod使用的ServiceAccount名称
      • spec.nodeName:Pod所在Node的名称 (Kubernetes 1.4.0 +)
      • status.hostIP:Pod所在Node的IP地址 (Kubernetes 1.7.0 +)
    展开全文
  • 使用Kubernetes ServiceAccount来查询指定名称空间的pod信息的简单python脚本。 构建容器后,预期用途如下: $ kubectl run pod-explorer --image=pod-explorer:1.0 -- $ kubectl logs pod-explorer 使用此容器...
  • kubernetes 自从1.7开始,可以在pod 的container 内获取pod的spec,metadata 等信息。 具体方法可以通过env获取: env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName ...

    全栈工程师开发手册 (作者:栾鹏)
    架构系列文章


    kubernetes 自从1.7开始,可以在pod 的container 内获取pod的spec,metadata 等信息。

    为啥可以获取

    容器中进程启动顺序:先调度确定pod部署在哪个机器上,部署pod,部署container,启动进程。

    所以在启动进程前,就已经有了pod的信息,所以可以获取,然后通过进程启动前设置环境变量的形式来实现。

    可以传递的信息

    先随便部署一个pod,通过

    kubectl get pod  -n your-namespace -o yaml your-app
    

    获取的pod信息为

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        cni.projectcalico.org/podIP: 172.16.162.2/32
      creationTimestamp: "2020-03-06T15:11:40Z"
      generateName: your-app-57846cfdbf-
      labels:
        app: your-app
        pod-template-hash: 57846cfdbf
      name: your-app-57846cfdbf-x6nj6
      namespace: your-namespace
      ownerReferences:
      - apiVersion: apps/v1
        blockOwnerDeletion: true
        controller: true
        kind: ReplicaSet
        name: your-app-57846cfdbf
        uid: 8b88c1f5-9cce-49bf-8b7d-7f90c67483af
      resourceVersion: "62526266"
      selfLink: /api/v1/namespaces/your-namespace/pods/your-app-57846cfdbf-x6nj6
      uid: e86bd373-25bb-4a2d-8a18-49ced8809771
    spec:
      containers:
      - command:
        - python
        - server.py
        env:
        - name: user
          value: aaaaa
        - name: password
          value: bbbbb
        image: xxxxxxxxxxxxxxxxxx
        imagePullPolicy: Always
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 80
            scheme: HTTP
          initialDelaySeconds: 100
          periodSeconds: 300
          successThreshold: 1
          timeoutSeconds: 5
        name: your-app
        ports:
        - containerPort: 80
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 80
            scheme: HTTP
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        resources:
          limits:
            cpu: "5"
            memory: 5000Mi
          requests:
            cpu: 10m
            memory: 100Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /etc/localtime
          name: tz-config
        - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
          name: default-token-sq77d
          readOnly: true
        workingDir: /app/
      dnsPolicy: ClusterFirst
      enableServiceLinks: true
      imagePullSecrets:
      - name: hubsecret
      nodeName: ch009022000050
      priority: 0
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: default
      serviceAccountName: default
      terminationGracePeriodSeconds: 30
      tolerations:
      - effect: NoExecute
        key: node.kubernetes.io/not-ready
        operator: Exists
        tolerationSeconds: 300
      - effect: NoExecute
        key: node.kubernetes.io/unreachable
        operator: Exists
        tolerationSeconds: 300
      volumes:
      - hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
          type: ""
        name: tz-config
      - name: default-token-sq77d
        secret:
          defaultMode: 420
          secretName: default-token-sq77d
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2020-03-06T15:11:41Z"
        status: "True"
        type: Initialized
      - lastProbeTime: null
        lastTransitionTime: "2020-03-09T02:43:51Z"
        status: "True"
        type: Ready
      - lastProbeTime: null
        lastTransitionTime: "2020-03-09T02:43:51Z"
        status: "True"
        type: ContainersReady
      - lastProbeTime: null
        lastTransitionTime: "2020-03-06T15:11:40Z"
        status: "True"
        type: PodScheduled
      containerStatuses:
      - containerID: docker://59b535d6fe210f70b6172a68729d99d7af57489564754a2d97fb224034c2b437
        image: xxxxxxxxxxxxxxxxxx
        imageID: xxxxxxxxxxx-pipline@sha256:812e9d09f8fe8577b5f9c6aa212194c624eea5c7111261d9a8503026a29e6da7
        lastState:
          terminated:
            containerID: docker://a70c979c114ca0131ffeac04e0016c3a0dea9d266f98042e333e9048f3cfa92c
            exitCode: 1
            finishedAt: "2020-03-09T02:43:15Z"
            reason: OOMKilled
            startedAt: "2020-03-09T02:40:11Z"
        name: your-app
        ready: true
        restartCount: 2
        state:
          running:
            startedAt: "2020-03-09T02:43:30Z"
      hostIP: 9.22.0.50
      phase: Running
      podIP: 172.16.162.2
      qosClass: Burstable
      startTime: "2020-03-06T15:11:41Z"
    

    这上面的信息都可以获取。并传给自定义环境变量

    获取pod信息,传递给环境变量

    具体方法可以通过env获取:

     env:
     - name: MY_NODE_NAME
       valueFrom:
         fieldRef:
           fieldPath: spec.nodeName
     - name: MY_POD_NAME
       valueFrom:
         fieldRef:
           fieldPath: metadata.name
     - name: MY_POD_NAMESPACE
       valueFrom:
         fieldRef:
           fieldPath: metadata.namespace
     - name: MY_POD_IP
       valueFrom:
         fieldRef:
           fieldPath: status.podIP
     - name: MY_POD_SERVICE_ACCOUNT
       valueFrom:
         fieldRef:
           fieldPath: spec.serviceAccountName
    

    spec.nodeName : pod所在节点的IP、宿主主机IP

    status.podIP :pod IP

    metadata.namespace : pod 所在的namespace

    注意:此示例中的字段是Pod字段。它们不是Pod中“容器”的字段。

    更多参数:https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/

    展开全文
  • k8s-容器内获取Pod信息和资源限制

    千次阅读 2021-08-13 15:05:45
    1. 获取pod信息 说明:容器中获取pod的所有信息,先看一个简单示例,然后我们说明怎么获取其他信息。 1.1 一个简单示例 说明:定义一些变量,以获取POD状态信息(如节点名/容器名/namespace等) yml文件如下 ...

    前言:
    从容器内获取容器的IP/端口/namespace等信息,以及k8s对容器的内存/CPU等资源限制的值。

    1. 获取pod信息

    说明:容器中获取pod的所有信息,先看一个简单示例,然后我们说明怎么获取其他信息。

    1.1 一个简单示例

    说明:定义一些变量,以获取POD状态信息(如节点名/容器名/namespace等)

    • yml文件如下
    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox-infor
      namespace: test
    spec:
      containers:
      - name: busybox-infor
        image:  harbocto.boe.com.cn/public/nginx
        env:
          - name: MY_NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: MY_POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: MY_POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: MY_POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          - name: MY_POD_SERVICE_ACCOUNT
            valueFrom:
              fieldRef:
                fieldPath: spec.serviceAccountName
        ports:
        - containerPort: 80
    
    • 结果测试
      用上边的yml文件启动容器(略)之后,进入容器,并打印yml文件中定义的变量,可以看见容器的信息被以变量形式传入容器。
    [root@DoM01 test]# kubectl exec -it -n test busybox-infor bash
    root@busybox-infor:/# echo ${MY_NODE_NAME}
    don03
    root@busybox-infor:/# echo ${MY_POD_NAME}
    busybox-infor
    root@busybox-infor:/# echo ${MY_POD_NAMESPACE}
    test
    root@busybox-infor:/# echo ${MY_POD_IP}
    10.244.5.20
    root@busybox-infor:/# echo ${MY_POD_SERVICE_ACCOUNT}
    default
    
    

    1.2 可以获取那些信息

    上边通过k8s提供的这些接口看到的信息,实际上我们用edit 查看pod信息时都可以看到。

    从示例中我们可以看到变量的valueFrom都是诸如: metadata.namespace, spec.nodeName, metadata.name …… 很容易猜到,这和我们使用edit pod 看到的信息应该是一致的。所以我们可以用变量取到这里的所有信息。

    • 我们验证一下,执行如下命令:
    [root@DoM01 test]# kubectl edit -n test pod busybox-infor
    

    可以查找到刚才的信息,如我们可以看到 namespace的key如下:

    在这里插入图片描述

    而我们刚才定义变量获取值的位置是:

    metadata.namespace
    

    这是一致的。如此我们可以定义你查到的pod的任意信息了。

    2. 获取容器资源限制

    说明:此处获取的是k8s对容器的资源限制,区别前边的容器信息。当然我们通过edit也是可以看到的。

    • 创建podinfo.yml文件如下:
    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox-infor
      namespace: test
    spec:
      containers:
      - name: busybox-infor
        image:  harbocto.boe.com.cn/public/nginx
        env:
          - name: MY_CPU_REQUEST
            valueFrom:
              resourceFieldRef:
                resource: requests.cpu
          - name: MY_CPU_LIMIT
            valueFrom:
              resourceFieldRef:
                resource: limits.cpu
          - name: MY_MEM_REQUEST
            valueFrom:
              resourceFieldRef:
                resource: requests.memory
          - name: MY_MEM_LIMIT
            valueFrom:
              resourceFieldRef:
                resource: limits.memory
        resources:
          requests:
            cpu: "250m"
            memory: "64Mi"
          limits:
            cpu: "4000m"
            memory: "8Gi"
    
    • 启动容器
    [root@DoM01 test]# kubectl create -f podinfo.yml
    pod/pod-infor created
    [root@DoM01 test]# kubectl get pod -n test
    NAME             READY   STATUS    RESTARTS   AGE
    pod-infor        1/1     Running   0          5s
    
    • 验证
      进入容器,打印刚才的变量如下:
    [root@DoM01 test]# kubectl exec -it -n test busybox-infor bash
    root@busybox-infor:/# echo ${MY_MEM_LIMIT}
    8589934592
    root@busybox-infor:/# echo ${MY_MEM_REQUEST}
    67108864
    

    如上,变量值和我们刚才设置的一样。如果没有设置,变量值为0


    在这里插入图片描述

    展开全文
  • k8s 通过环境变量获取Pod信息

    千次阅读 2022-03-01 17:50:10
    env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName // 节点名称 - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name // pod 名称 - name: MY_POD_NAMESPAC
  • 通过文件将Pod信息呈现给容器文档:
  • kubernetes 容器内获取Pod信息

    千次阅读 2020-12-21 11:12:00
    valueFrom: fieldRef: fieldPath: spec.nodeName - name: MY_POD_NAME # 获取pod名称 valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_NAMESPACE # 获取pod的namespace valueFrom: fieldRef: ...
  • Flask Web应用程序以获取在kubernetes集群中部署的Pod的详细信息这是一个示例Flask Web应用程序,用于获取在kubernetes集群中部署的Pod的详细信息。 CURL,wget,IP实用程序,DNS实用程序和tcpdump包含在此映像中。...
  • kubernetes 开发入门之获取pod信息

    千次阅读 2017-06-19 10:05:23
    .Pod {}, time .Second * 0 , cache .ResourceEventHandlerFuncs { AddFunc: func(obj interface{}) { fmt .Printf ( "add: %s \n" , obj) }, DeleteFunc: func(obj interface{}) { fmt .Printf ( "delete:...
  • Pod详解大全

    2021-08-24 20:00:24
    文章目录一、Pod介绍1、pod的结构主容器 pause业务容器 user container1 user container22、Pod定义1)、k8s中的命名规范1、下面是Pod的资源清单:2、查看每种资源的可配置项3、案例1、案例1 – 部署nginx、tomcat2...
  • k8s 查看 删除,更新POD信息

    万次阅读 2018-04-13 16:26:56
    查看所有POD:kubectl get pod查看某个POD: kubectl get pod name以JSON格式输出POD信息: kubectl get pod name --output json以yaml格式输出POD信息: kubectl get pod name --output yaml删除某个POD:kubectl ...
  • SVC 通过label 标签去匹配自己的pod,定义在selector属性中 每个pod 创建时都会指定自己label标签 pod死了一个,deployment新建一个,新的是新IP Nginx中配置的还是老iP error occur 逐个手动去改配置,?,,更好...
  • 我们知道,每个Pod在被成功创建出来之后,都会被系统分配唯一的名字、IP地址,并且处于某个Namespace中,那么我们如何在Pod的容器内获取Pod的这些重要信息呢?答案就是使用Downward API。 Down...
  • k8s查看pod日志的几种方法

    千次阅读 多人点赞 2022-07-06 16:16:06
    rancher 2.5 rancher 2.6 有时候,我们在rancher2.6查看某个pod的指定容器的日志时,发现日志框是完全空白的,看不到任何日志信息,而通过kubectl logs,或者docker logs却能看到不少日志信息。这大概率是因为...
  • 我有N个服务在运行中 而这些则是 kube-state-metrics 提供的内容,它基于 client-go 开发,轮询 Kubernetes API,并将 Kubernetes 的结构化信息转换为 metrics。kube-state-metrics 是 kubernetes 开源的一个插件。...
  • 1.先在prometheus-cfg.yaml配置文件里添加如下配置信息: - job_name: kubernetes-pods kubernetes_sd_configs: - role: pod relabel_configs: - action: keep regex: true source_labels: - __meta_...
  • pod_tcpstate_exporter 导出K8S Pod的TCP统计信息指标
  • 文章目录容器化应用资源消耗 ≠ 设备资源消耗Prometheus 及其 ProQLPrometheus 中常见资源监控的 query 写法Pod CPU 利用率Pod MEM 占用Pod GPU 利用率Pod GPU 显存占用 容器化应用资源消耗 ≠ 设备资源消耗 不管是...
  • kubernetes 查看 pod的描述

    千次阅读 2021-02-28 18:27:09
    kubernetes 查看 pod的描述 kubectl describe pod [pod名字] kubectl describe pod javademo1-69f7678847-qf5gf
  • gitpod-workspace-cli

    2021-04-22 16:41:54
    它包含有关Gitpod和我们使用的扩展的一些重要信息。 Gitpod提醒 要在Gitpod中运行前端(仅HTML,CSS,Javascript)应用程序,请在终端中输入: python3 -m http.server 应该出现一个蓝色按钮,以单击: “公开” ...
  • k8s api获取pod

    千次阅读 2020-12-21 11:12:02
    {"optioninfo":{"dynamic":"ture","static":"true"},"simplifiedDisplay":"newEdition","newCard":[{"ifIcon":"img","link":"","icon":"","iconImg":...
  • 1、Pod介绍 Pod是Kubernetes进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于PodPod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器 1)、Pod=进程组 在Kubernetes里面,Pod实际上...
  • 使用kubectl获取pod日志小技巧

    千次阅读 2022-07-26 10:23:53
    如何查看k8s中pod的console控制台日志?即类似于dockerlogs查看容器日志一样;可以使用kubectl命令,查看K8S中Pod的日志。在这里,将通过kubectl获取Pod的日志,包括当前运行、同一deployment下所有副本的日志。.......
  • Pod status 状态解释

    千次阅读 2020-12-06 11:57:58
    启动容器失败 PostStartHookError:执行hook报错 ContainersNotInitialized:容器没有初始化完毕 ContainersNotReady:容器没有准备完毕 ContainerCreating:容器创建中 PodInitializing:pod 初始化中 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,877
精华内容 30,750
关键字:

pod信息