【问题标题】:GKE extended memory and Kubernetes memory allocatableGKE 扩展内存和 Kubernetes 内存可分配
【发布时间】:2018-10-02 13:18:56
【问题描述】:
在 GKE 上创建集群时,可以创建 Custom Instance Types。将8GB 的内存添加到n1-standard-1 时,Kubernetes 仅显示可分配的内存为6.37GB。这是为什么呢?
请求的内存包括 kube-system 命名空间中的所有 pod,那么这些额外的内存去哪儿了?
【问题讨论】:
标签:
docker
kubernetes
google-cloud-platform
google-kubernetes-engine
【解决方案1】:
引用documentation:
节点可分配资源
请注意,运行 Kubernetes 引擎和使该节点作为集群一部分运行所需的 Kubernetes 资源需要节点的一些资源。因此,您可能会注意到节点的总资源(在机器类型文档中指定)与节点在 Kubernetes Engine 中的可分配资源之间存在差异
注意:随着更大的机器类型倾向于运行更多的容器(以及扩展的 Kubernetes Pod),Kubernetes Engine 为集群进程保留的资源量会随着更大的机器而向上扩展。
注意:在 1.7.6 之前的 Kubernetes Engine 节点版本中,预留资源不计入节点的总可分配资源。
如果您的节点最近升级到版本 1.7.6,它们的可用资源可能会减少,因为 Kubernetes Engine 现在会显示可分配的资源。这可能会导致集群的节点出现过度使用,因此您可能需要调整集群的大小。
例如执行一些测试,您可以仔细检查:
Machine type Memory(GB) Allocatable(GB) CPU(cores) Allocatable(cores)
g1-small 1.7 1.2 0.5 0.47
n1-standard-1 (default) 3.75 2.7 1 0.94
n1-standard-2 7.5 5.7 2 1.93
n1-standard-4 15 12 4 3.92
n1-standard-8 30 26.6 8 7.91
n1-standard-16 60 54.7 16 15.89
注意:为可分配资源列出的值不考虑 kube-system pod 使用的资源,其数量因每个 Kubernetes 版本而异。这些系统 pod 通常在每个节点上额外占用 400m CPU 和 400mi 内存(数值为近似值)。如果您需要准确统计每个节点上的可用资源,建议您直接检查集群。
更新
Kubernetes 文档中也有关于为什么使用这些资源的官方解释:
kube-reserved 旨在为 kubernetes 系统守护进程(如 kubelet、容器运行时、节点问题检测器等)捕获资源预留。它并不意味着为运行为的系统守护进程预留资源豆荚。 kube-reserved 通常是节点上 pod 密度的函数。此性能仪表板在多个 pod 密度级别公开 kubelet 和 docker 引擎的 cpu 和内存使用情况。这篇博文解释了如何解释仪表板以提供合适的 kube-reserved 预留。
如果您有兴趣了解更多信息,我建议您浏览this 页面。