Mug*_*gen 5 kubernetes google-kubernetes-engine kubernetes-deployment kubernetes-pod
由于内存消耗,我的部署窗口被驱逐:
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
Run Code Online (Sandbox Code Playgroud)
我尝试通过在我的部署中添加以下内容来为其提供更多内存yaml:
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
containers:
- name: my-container
image: my-container:latest
...
resources:
requests:
memory: "3Gi"
Run Code Online (Sandbox Code Playgroud)
但是,它未能部署:
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)
Run Code Online (Sandbox Code Playgroud)
部署仅请求一个容器.
我正在使用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需要更多.
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |