关于灵雀云:利用EndpointSlices扩展Kubernetes网络提供更强的可伸缩性和功能
EndpointSlices是一个令人兴奋的新API,它提供了Endpoints API的可扩大和可扩张的代替计划。EndpointSlice跟踪Pod服务前面的IP地址,端口,筹备状况和拓扑信息。在Kubernetes(https://www.alauda.cn/product/detail/id/240.html) 1.19中,默认状况下从EndpointSlices中通过kube-proxy读取启用了此性能,而非Endpoints。只管这个更改看起来不起眼,但它能够使大型群集中的可伸缩性失去显著改善。它还在未来的Kubernetes版本中启用了重要的新性能,例如拓扑路由感知。1 Eendpoints API的可扩展性限度应用Endpoints API,一个服务只有一个Endpoints资源。这意味着它须要为反对相应服务的每个Pod存储IP地址和端口(网络端点)。这导致应用微小的API资源。为了解决此问题,kube-proxy在每个节点上运行,并监督Endpoints资源的任何更新。如果在Endpoints资源中甚至只有一个网络端口产生更改,则整个对象也必须发送到每个实例的kube-proxy。Endpoints API的另一个限度是,它限度了能够为服务跟踪的网络端点的数量。存储在etcd中的对象的默认大小限度为1.5MB。在某些状况下,这可能会将Endpoints资源限度为5,000个Pod IP。对于大多数用户而言,这不是问题,然而对于服务靠近此大小的用户而言,这将成为一个重大问题。为了阐明这些问题的严重性,举一个简略的例子是有帮忙的。思考具备5,000个Pod的服务,它最终可能具备1.5MB的Endpoints资源。如果该列表中的单个网络Endpoints都产生了更改,则将须要将残缺的Endpoints资源分配给群集中的每个节点。在具备3,000个节点的大型群集中,这成为一个很大的问题。每次更新将波及跨集群发送4.5GB数据(1.5MB Endpoints * 3,000个节点)。这简直足以填满DVD,并且每次Endpoints更改都会产生这种状况。设想一下,如果滚动更新会导致全副5,000个Pod都被替换-传输的数据量超过22TB(或5,000 DVD)。2 应用EndpointSlice API拆分端点EndpointSlice API旨在通过相似于分片的办法来解决此问题。咱们没有应用单个Endpoints资源跟踪服务的所有Pod IP,而是将它们拆分为多个较小的EndpointSlice。思考一个示例,其中一个服务后端有15个Pod。咱们最终将取得一个跟踪所有端点的单个Endpoints资源。如果将EndpointSlices配置为每个存储5个端点,咱们最终将取得3个不同的端点EndpointSlices:默认状况下,EndpointSlices每个存储多达100个端点,只管能够应用kube-controller-manager上的--max-endpoints-per-slice标记进行配置。EndpointSlices将可扩展性进步了10倍。该API大大提高了网络可伸缩性。当初,当增加或删除Pod时,只需更新1个小的EndpointSlice。当单个Service有成千盈百的Pod时,这种差别变得非常明显。可能更重要的是,既然服务的所有Pod IP都不须要存储在单个资源中,那么咱们就不用放心etcd中存储的对象的大小限度。EndpointSlices已用于将服务扩大到超过100,000个网络端点。所有这些都与kube-proxy所做的一些重大性能改良联合在一起。当大规模应用EndpointSlices时,用于端点更新的数据将大大减少,并且kube-proxy应该更快地更新iptables或ipvs规定。除此之外,服务当初能够扩大到至多任何以前的限度的10倍。3 EendpointSlices启用新性能作为Kubernetes(https://www.alauda.cn/product/detail/id/240.html) v1.16中的alpha性能引入的EndpointSlices旨在在未来的Kubernetes版本中启用一些令人兴奋的新性能。这可能包含双栈服务,拓扑路由感知和端点子设置。双栈服务是一项与EndpointSlices一起开发的令人兴奋的新性能。他们将同时应用IPv4和IPv6地址作为服务,并依附EndpointSlices上的addressType字段按IP系列跟踪这些地址。拓扑感知路由将更新kube-proxy,以在同一区域或区域内实现路由申请。这利用了为EndpointSlice中的每个端点存储的拓扑字段。作为对此的进一步改良,咱们正在摸索端点子集的后劲。这将容许kube-proxy只观看EndpointSlices的子集。例如,这能够与拓扑路由感知联合应用,以便kube-proxy仅需监督蕴含同一区域内端点的EndpointSlice。这将提供另一个十分重要的可伸缩性改良。4 这对Endpoints API意味着什么?只管EndpointSlice API为Endpoints API提供了更新和更可扩大的代替计划,然而Endpoints API将持续被认为是广泛可用且稳固的。为Endpoints API打算的最重要的更改将波及开始截断Endpoints,否则将遇到可伸缩性问题。Endpoints API并没有隐没,然而许多新性能将依赖于EndpointSlice API。为了利用EndpointSlices提供的新的可伸缩性和性能,以后应用Endpoints的应用程序可能在未来思考反对EndpointSlices。原文链接:Scaling Kubernetes Networking With EndpointSliceshttps://kubernetes.io/blog/202 ... ices/作者: Rob Scott(Google)译者:刘博(资深云计算售前架构师)