GKE扩展内存和可分配的Kubernetes内存

And*_*gan 5 docker google-cloud-platform kubernetes google-kubernetes-engine

在GKE上创建集群时,可以创建自定义实例类型。向Kubernetes 添加8GB内存时n1-standard-1仅显示可分配的内存6.37GB。为什么是这样?

请求的内存包括kube-system名称空间中的所有Pod,那么这些额外的内存在哪里?

Gal*_*one 5

来自文档的报价:

节点可分配资源

请注意,运行Kubernetes引擎需要节点的一些资源,而使该节点作为集群的一部分所必需的Kubernetes资源。这样,您可能会注意到节点的总资源(在机器类型文档中指定)与Kubernetes Engine中节点的可分配资源之间存在差异

注意:由于较大的机器类型倾向于运行更多的容器(并扩展为Kubernetes容器),因此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
Run Code Online (Sandbox Code Playgroud)

注意:列出的可分配资源的值不考虑kube系统pod使用的资源,其数量随每个Kubernetes版本而变化。这些系统Pod通常在每个节点上占用额外的400m CPU和400mi内存(值是近似值)。如果需要对每个节点上的可用资源进行准确的核算,建议您直接检查群集。

更新

Kubernetes文档中还有关于为什么使用此资源的官方解释:

kube-reserved旨在为kubernetes系统后台驻留程序(如kubelet,容器运行时,节点问题检测器等)捕获资源预留。它并不旨在为作为Pod运行的系统后台驻留程序保留资源。保留kube通常是节点上容器密度的函数。此性能仪表板在多个Pod密度级别下显示kubelet和docker引擎的cpu和内存使用情况配置文件。这篇博客文章解释了如何解释仪表板以提出合适的kube保留预留。

如果您有兴趣了解更多信息,建议您浏览页面。