有没有一种方法可以获取容器内部的实际资源(CPU和内存)约束?
假设该节点具有4个核心,但是我的容器仅通过资源请求/限制配置了1个核心,因此它实际上使用了1个核心,但仍从/ proc / cpuinfo中看到4个核心。我想根据应用程序实际可以使用的内核数来确定线程数。我对记忆也很感兴趣。
您可以使用Downward API访问资源请求和限制。为此,不需要服务帐户或对apiserver的任何其他访问。
例:
apiVersion: v1 kind: Pod metadata: name: dapi-envars-resourcefieldref spec: containers: - name: test-container image: k8s.gcr.io/busybox:1.24 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 divisor: "1m" - name: MY_CPU_LIMIT valueFrom: resourceFieldRef: containerName: test-container resource: limits.cpu divisor: "1m" - 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
测试:
$ kubectl logs dapi-envars-resourcefieldref 125 250 33554432 67108864
Kubernetes将资源请求和限制转换为内核原语。也可以从Pod中访问该信息,但是要复杂得多,而且也不能移植(Window $节点,有人吗?)
CPU请求/限制::/sys/fs/cgroup/cpu/kubepods/..QOS../podXX/cpu.*
cpu.shares(这是请求;除以1024得到核心百分比),cpu.cfs_period_us,cpu.cfs_quota_us(将cfs_quota_us除以cfs_period_us以获得相对于1个核心的cpu限制)
内存限制: /sys/fs/cgroup/memory/kubepods/..QOS../podXX/memory.limit_in_bytes
内存请求:这很棘手。它会转换为的oom调整得分/proc/..PID../oom_score_adj
。祝你好运,计算回内存请求量:)
简短的回答很棒,对吗?;)