热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

k8s容器内获取Pod信息和资源限制

文章目录1.获取pod信息1.1一个简单示例1.2可以获取那些信息2.获取容器资源限制前言:从容器内获取容器的IP端口namespace等信息,以及k8

文章目录

  • 1. 获取pod信息
    • 1.1 一个简单示例
    • 1.2 可以获取那些信息
  • 2. 获取容器资源限制


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


1. 获取pod信息

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


1.1 一个简单示例


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


  • yml文件如下

apiVersion: v1
kind: Pod
metadata:name: busybox-infornamespace: test
spec:containers:- name: busybox-inforimage: harbocto.boe.com.cn/public/nginxenv:- name: MY_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: MY_POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: MY_POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MY_POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: MY_POD_SERVICE_ACCOUNTvalueFrom:fieldRef:fieldPath: spec.serviceAccountNameports:- 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-infornamespace: test
spec:containers:- name: busybox-inforimage: harbocto.boe.com.cn/public/nginxenv:- name: MY_CPU_REQUESTvalueFrom:resourceFieldRef:resource: requests.cpu- name: MY_CPU_LIMITvalueFrom:resourceFieldRef:resource: limits.cpu- name: MY_MEM_REQUESTvalueFrom:resourceFieldRef:resource: requests.memory- name: MY_MEM_LIMITvalueFrom:resourceFieldRef:resource: limits.memoryresources: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



在这里插入图片描述


推荐阅读
author-avatar
西南科技大学地质协会_927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有