7个简单的Kubernetes性能优化技巧
有鉴于此,下面介绍Kubernetes性能优化技巧。无论你刚开始构建集群,还是已有了生产环境,本文主要介绍改善Kubernetes性能的简单操作。
创建新的worker节点之前,为现有worker节点添加资源。
改善Kubernetes性能最明显的方法可能是为集群添加更多的worker节点。拥有的worker越多,可用于运行工作负载的资源就越多。你还可以提升可用性,因为拥有更多的节点可以减少众多节点失效以至于工作负载开始出现故障的机会。
但如果你想最大程度地利用worker节点,为现有worker节点添加内存和CPU资源而不是创建新节点可获得更好的效果。换句话说,最好拥有20个节点、每个节点有16 GB的内存,而不是拥有40个节点、每个节点有8 GB的内存。
这有两个原因。首先,由于主机操作系统,每个节点有一定量的开销。节点越少意味着以这种方式浪费的资源越少。其次,节点越多,调度程序、kube-proxy及其他组件跟踪一切就越费劲。
很显然,你需要考虑可用性,并确保数量最少的worker节点可满足可用性目标。但是一旦超过该阈值,可以通过确保为每个节点分配尽可能多的资源,而不是试图增加节点总数,以提高整体性能。但别走极端(比如说你可能不希望单个节点上有24 TB的内存),因为如果某节点失效,你可能会失去那些资源。
当然,你在确定节点的资源分配方面是否有很大的灵活性不好说。如果它们是在云中运行的虚拟机,你可以分配任意数量的资源。如果是本地虚拟机或物理服务器,那就比较棘手。
使用多个主节点
Kubernetes集群中使用多个主节点的主要原因是为了获得高可用性。拥有的主节点越多,它们都失效、导致集群崩溃的可能性就越小。
然而添加更多的主节点还能提高性能,因为这为托管在主节点上的基本Kubernetes组件(比如调度程序、API服务器和Etcd)提供了更多的托管资源。Kubernetes会使用所有主节点的集体资源来支持这些组件。
因此,添加一个或数个主节点是提高Kubernetes集群性能的好方法。
设置worker节点评分限制
Kubernetes调度程序的一项工作是对worker节点进行“评分”,这意味着它确定哪些worker节点适合处理工作负载。在拥有几十个或更多worker节点的集群中,调度程序最终会将时间浪费在检查每个worker节点上。
为了避免这种低效,可以将percentOfNodesToScore参数设置为小于100的百分比。然后,调度程序将仅检查你指定的那部分节点。
设置资源配额
设置资源配额是提高Kubernetes性能的一种简单而很有效的方法,尤其是在多个团队共享的大集群中。资源配额对某个命名空间可以使用的CPU、内存和存储资源数量作了限制。
因此,如果你将集群划分为多个命名空间,为每个团队分配不同的命名空间,并设置资源配额,就有助于确保所有工作负载都能得到公平分配的资源。
资源配额本身并不是优化性能的方法,它更像是解决嘈杂邻居问题的方法。但它确实有助于确保每个命名空间都拥有充分执行任务所需的资源。
设定限制范围
如果你想限制工作负载耗用的资源,但该工作负载又与其他工作负载在同一命名空间中运行,该怎么办?这时限制范围就能派上用场。
资源配额对每个命名空间可以耗用多少资源作了限制,限制范围则针对每个pod或每个容器执行同样的操作。
为了简单起见,大多数情况下的一条优秀实践是使用命名空间和资源配额来分隔工作负载。但如果这种方法不切实际,限制范围让你可以保证各个pod或容器拥有执行任务所需的资源。
设置端点切片
端点切片(Endpoint Slice)是一项鲜为人知的Kubernetes功能,让你可以根据服务和端口组合将网络端点分组在一起。设置完毕后,kube-proxy在决定如何路由传输流量时参照端点切片。
在拥有大量端点的环境中,端点切片可通过减少kube-proxy为在集群内路由传输流量而需要执行的工作量来改善性能。
使用极简的主机操作系统
最后但并非最不重要的是一个基本而有效的技巧:确保托管Kubernetes集群的操作系统尽可能简约。运行Kubernetes不需要的任何额外组件都会导致资源浪费,从而降低集群的性能。