k8s-容器内获取Pod信息和资源限制
前言:
从容器内获取容器的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
posted on 2021-08-15 21:44 运维开发玄德公 阅读(162) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」