由于内存消耗,我的部署窗口被驱逐:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Evicted 1h kubelet, gke-XXX-default-pool-XXX The node was low on resource: memory. Container my-container was using 1700040Ki, which exceeds its request of 0.
Normal Killing 1h kubelet, gke-XXX-default-pool-XXX Killing container with id docker://my-container:Need to kill Pod
我尝试通过在我的部署中添加以下内容来为其提供更多内存yaml:
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
containers:
- name: my-container
image: my-container:latest
...
resources:
requests:
memory: "3Gi"
但是,它未能部署:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 4s (x5 over 13s) default-scheduler 0/3 nodes are available: 3 Insufficient memory.
Normal NotTriggerScaleUp 0s cluster-autoscaler pod didn't trigger scale-up (it wouldn't fit if a new node is added)
部署仅请求一个容器。
我正在使用GKE自动缩放,默认(和唯一)池中的节点具有3.75 GB内存。
从反复试验中,我发现我可以请求的最大内存是“2Gi”。为什么我不能利用单个pod的完整3.75节点?我是否需要具有更大内存容量的节点?
即使节点具有3.75 GB的总内存,很可能容量可分配不是全部3.75 GB。
Kubernetes为系统服务保留了一些容量,以避免容器在节点中消耗太多资源,从而影响系统服务的运行。
来自文档:
Kubernetes节点可以安排到容量。默认情况下, Pod可以占用节点上的所有可用容量。这是一个问题,因为节点通常运行很多系统守护进程,为操作系统和Kubernetes本身提供动力。除非为这些系统守护程序留出资源,否则pod和系统守护程序会争用资源并导致节点上的资源不足问题。
因为您使用的是GKE,所以它们不使用默认值,运行以下命令将显示您在节点中拥有多少可分配资源:
kubectl describe node [NODE_NAME] | grep Allocatable -B 4 -A 3
来自GKE文档:
可分配资源按以下方式计算:
Allocatable =容量 - 保留 - 逐出阈值
对于内存资源,GKE保留以下内容:
前4GB内存的25%
接下来4GB内存的20%(最高8GB)
下一个8GB内存的10%(最高16GB)
下一个112GB内存的6%(最高128GB)
128GB以上的任何内存的2%
GKE在每个节点上保留额外的100 MiB内存用于kubelet驱逐。
正如错误消息所示,扩展群集将无法解决问题,因为每个节点容量限制为X内存量,POD需要更多。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。