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 运维开发玄德公 阅读(139) 评论(0) 编辑 收藏 举报 来源