Windows节点的资源管理
本页概述了Linux和Windows在资源管理方式上的差异。
在Linux节点上,cgroups用作资源控制的pod边界。容器是在该边界内创建的,用于网络、进程和文件系统隔离。LinuxcgroupAPI可用于收集CPU、I/O和内存使用统计信息。
相比之下,Windows使用带有系统命名空间过滤器的每个容器的作业对象来包含容器中的所有进程并提供与主机的逻辑隔离。(Job对象是一种Windows进程隔离机制,不同于Kubernetes所说的工作)。
如果没有适当的命名空间过滤,就无法运行Windows容器。这意味着无法在主机上下文中声明系统特权,因此特权容器在Windows上不可用。容器不能假设来自主机的身份,因为安全帐户管理器(SAM)是独立的
内存预留
Windows没有Linux那样的内存不足进程杀手。Windows始终将所有用户模式内存分配视为虚拟的,并且页面文件是强制性的。
Windows节点不会为容器中运行的进程过度使用内存。最终结果是Windows不会像Linux那样达到内存不足的情况,并且将页面处理到磁盘而不是受到内存不足(OOM)终止的影响。如果内存过度配置并且所有物理内存都用尽了,那么分页会降低性能。
您可以使用kubelet参数--kubelet-reserve和/或--system-reserve;限制工作负载的内存使用。这些考虑了节点(容器外部)的内存使用情况,并减少了NodeAllocatable。在部署工作负载时,请设置容器的资源限制。NodeAllocatable一旦节点已满,这也会减少并阻止调度程序添加更多pod。
注意:当您为Windows容器设置内存资源限制时,您应该设置一个限制并且不指定内存请求,或者将请求设置为等于该限制。
在Windows上,避免过度配置的良好做法是为kubelet配置至少2GiB的系统保留内存,以解决Windows、Kubernetes和容器运行时开销。
CPU预留
要考虑操作系统、容器运行时和Kubernetes主机进程(例如kubelet)的CPU使用情况,您可以(并且应该)保留总CPU的百分比。您应该根据节点上可用的CPU内核数来确定此CPU预留。要确定要保留的CPU百分比,请确定每个节点的最大pod密度并监控在其中运行的系统服务的CPU使用率,然后选择一个满足您的工作负载需求的值。
您可以使用kubelet参数限制工作负载的CPU使用率--kubelet-reserve和/或--system-reserve考虑节点(容器外部)的CPU使用率。这减少了NodeAllocatable。然后,集群范围的调度程序在确定pod放置时会考虑此预留。
在Windows上,kubelet支持命令行标志来设置kubelet进程的优先级:--windows-priorityclass.与在Windows主机上运行的其他进程相比,此标志允许kubelet进程获得更多的CPU时间片。有关允许值及其含义的更多信息,请参阅Windows优先级。为确保正在运行的Pod不会饿死kubelet的CPU周期,请将此标志设置为ABOVE_NORMAL_PRIORITY_CLASS或更高。