我正在试图了解K8S吊舱内存分配的行为,但到目前为止,我在互联网上读到的材料没有什么好运气。
我的问题是,如果我有一个用以下值定义的内存POD模板
Limits:
cpu: 2
memory: 8Gi
Requests:
cpu: 500m
memory: 2Gi
假设我的应用程序突然需要更多内存,POD分配了4Gi(从2Gi初始内存)来完成任务。POD是否会将其获取的额外2Gi返还给底层操作系统,并在任务完成后再次成为2Gi POD,或者在任务完成后将作为具有4Gi内存的POD使用。
我的应用程序是一个在Apache Tomcat上运行的Java应用程序,为6Gi定义了最大堆。
库伯内特斯资源请求基本上在三次生效:
>
在最初计划新的POD时,资源请求(仅)用于查找具有足够空间的节点。请求总数必须小于节点的物理大小。未考虑限制和实际利用率。
如果进程分配内存,这将使其总利用率超过pod的限制,则分配将失败。
如果节点内存不足,Kubernetes将检查该节点上的吊舱,并逐出实际使用量超过其请求的吊舱。
假设您有一个内存为16 GiB的节点。您可以在一个部署中运行这个特定的pod,其中包含8个副本;它们都可以放在节点上,为了便于讨论,让我们假设Kubernetes将它们都放在那里。无论pod在做什么,第9个pod都无法安装在节点上,因为内存请求将超过物理内存。
如果pod继续分配总共4 GiB的内存,只要物理系统有内存就可以了。但是,如果节点内存不足,Kubernetes将看到这个pod比其请求多使用了2 GiB;这可能会导致pod被逐出(销毁并重新创建,可能在另一个节点上)。
如果进程确实将内存返回给操作系统,这将显示在指标的“实际利用率”部分;因为它的使用量现在将低于它的请求,所以如果节点确实运行内存溢出,它被驱逐的危险会更小。(但是,许多垃圾收集系统会尽可能长时间地保留操作系统内存并重用它;参见例如GC是否将内存释放回操作系统?。)
在kubernetes仪表板上,有一个pod,其中内存使用情况(字节)显示为。 这个pod保存了使用Xms512m-Xmx1024m运行的java应用程序,该应用程序位于kubernetes部署文件中- 我已启用gc日志,并在pod日志中看到这些日志: kubernetes是如何到达用法的?如果我理解正确,目前的用法只有: 运行ps显示除了这个java应用程序之外,pod上没有其他进程在运行<任何
我想看看kubernetes吊舱使用了多少内存和CPU。我为此运行了以下命令: 我收到以下错误: > 如果我们进入pod并运行linux命令,我们会得到相同的输出吗?
我有一个Kubernetes 1.10.0,Docker 17.03.2-CE和Jenkins 2.107.1运行在Ubuntu 17.04 VM上,Jenkins安装了Kubernetes插件1.5。我有另外4个Ubuntu虚拟机成功地设置为集群中的节点,包括未受污染的master。我可以直接部署基于Nginx的服务,并且可以不受限制地访问仪表板。所以,Kubernetes本身似乎已经足够快乐了
我需要通过prometheus查询获得kubernetes吊舱中的CPU和内存使用情况。有人能帮忙吗?
这个问题的答案是(Kubernetes会在主节点上运行Docker容器吗?)建议确实可以在主节点上运行用户吊舱--但没有解决是否存在与允许这样做相关的任何问题。 到目前为止,我能找到的唯一信息表明,允许这样做可能存在相关问题,那就是主节点上的吊舱通信不安全(请参见http://kubernetes.io/docs/admin/master-node-communication/和https://g