kubernetes Pod在容器内获取Pod信息

Downward API

我们知道,每个Pod在被成功创建出来之后,都会被系统分配唯一的名字、IP地址,并且处于某个Namespace中,那么我们如何在Pod的容器内获取Pod的这些重要信息呢?答案就是使用Downward API。

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

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

下面通过几个例子对Downward API的用法进行说明。

将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

    - name: NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName

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

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

查看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
    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_LIMT;
      sleep 3600;
      done;
    resources:
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod-container-vars
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 3600;
      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
    - name: MY_CPU_LIMIT
      valueFrom:
        resourceFieldRef:
          containerName: test-container
          resource: limits.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

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

  • requests.cpu:容器的CPU请求值。
  • limits.cpu:容器的CPU限制值。
  • requests.memory:容器的内存请求值。
  • limits.memory:容器的内存限制值。

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

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

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes中的Pod是最小的可部署单元,它可以包含一个或多个容器。Service是Pod的抽象,它为一组Pod提供一个统一的入口,以便其他应用程序可以访问这些Pod。下面是Pod容器的Service的基本原理和操作: 1. Pod容器的Service基本原理: - Pod容器的Service是Kubernetes中的两个概念,Pod是最小的可部署单元,容器是运行在Pod中的应用程序。 - Service是Pod的抽象,为一组Pod提供一个统一的入口,以便其他应用程序可以访问这些Pod。Service有一个虚拟IP地址和一个端口号,用于将请求路由到后端Pod。 - Service的基本原理是通过标签选择器来选择一组Pod,这些Pod可以通过Service的虚拟IP地址和端口号来访问。当请求到达Service时,它会将请求路由到后端Pod中的一个或多个容器。 2. Pod容器的Service基本操作: - 创建Pod:使用Kubernetes中的Pod对象创建一个或多个Pod。 - 添加标签:为Pod添加标签,这样Service可以使用标签选择器来选择Pod。 - 创建Service:使用Kubernetes中的Service对象创建一个Service,指定它的虚拟IP地址和端口号,并指定标签选择器来选择后端Pod。 - 测试Service:使用Service的虚拟IP地址和端口号测试Service是否正常工作。可以使用Kubernetes中的kubectl命令行工具来测试Service。 - 扩展Pod:可以使用Kubernetes中的ReplicaSet或Deployment对象来扩展Pod。当Pod扩展时,Service会自动将请求路由到新的Pod中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值