【发布时间】:2020-01-03 10:32:06
【问题描述】:
我只为 1 个 pod 分配了 650MB/30% 内存的资源(对于其他内置 pod,限制内存仅为 69%)
但是,在处理 pod 的过程中,pod 的使用率在 650MB 以内,但 node 的总体使用率是 94%。
为什么会发生,因为它应该有 69% 的上限?是不是因为其他内置的 pod 没有设置限制?如果内存使用率 > 100%,如何防止这种情况发生,因为有时我的 pod 会出错?
我的分配设置(kubectl describe nodes):
Kubernetes Node 和 Pod 空闲时的内存使用情况:kubectl top nodeskubectl top pods
Kubernetes Node 和 Pod 运行任务时的内存使用情况:kubectl top nodeskubectl top pods
进一步测试的行为:
1. 准备命名空间test-ns下的deployment、pods和service
2. 由于只有 kube-system 和 test-ns 有 pod,因此为它们每个分配 1000Mi(来自kubectl describe nodes),目标是小于 2GB
3. 假设 kube-system 和 test-ns 使用的内存小于 2GB 小于 100%,为什么内存使用率可以达到 106%?
在 .yaml 文件中:
apiVersion: v1
kind: LimitRange
metadata:
name: default-mem-limit
namespace: test-ns
spec:
limits:
- default:
memory: 1000Mi
type: Container
---
apiVersion: v1
kind: LimitRange
metadata:
name: default-mem-limit
namespace: kube-system
spec:
limits:
- default:
memory: 1000Mi
type: Container
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: devops-deployment
namespace: test-ns
labels:
app: devops-pdf
spec:
selector:
matchLabels:
app: devops-pdf
replicas: 2
template:
metadata:
labels:
app: devops-pdf
spec:
containers:
- name: devops-pdf
image: dev.azurecr.io/devops-pdf:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
resources:
requests:
cpu: 600m
memory: 500Mi
limits:
cpu: 600m
memory: 500Mi
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: devops-pdf
namespace: test-ns
spec:
type: LoadBalancer
ports:
- port: 8007
selector:
app: devops-pdf
【问题讨论】:
-
内存 94% 到底是什么意思?有多种不同类型的内存,Linux 机器的理想状态是接近 100% 的 RAM 消耗。
-
我刚刚使用
kubectl top nodes获取“CUP 和内存的运行时使用情况”进行监控。因此,我的案例是以 100% 的内存使用率运行 Puppeteer 代码,page.evaluate() 出现错误,无法打印 PDF。 -
如果不知道它究竟在报告什么 - 你无法讨论它。一般来说 - 约 100% 的消费并不意味着任何坏、好或中性。
标签: kubernetes nodes azure-aks memory-limit