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 EndpointSlices

https://kubernetes.io/blog/202 ... ices/
作者: Rob Scott(Google)

译者:刘博(资深云计算售前架构师)

利用EndpointSlices扩展Kubernetes网络,提供更强的可伸缩性和功能的更多相关文章

  1. 利用pyinotify监控文件内容,像tailf命令但比它更强

    Linux的tail/tailf命令使用了内核提供的inotify功能,下面的Python例子也使用inotify实现比tail/tailf更强的监控文件功能. watchfile.py #!/usr ...

  2. Kubernetes网络的4种解决方案

    一.Kubernetes + Flannel Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的 ...

  3. Kubernetes网络方案的三大类别和六个场景

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文章根据网易云资深解决方案架构师 王必成在云原生用户大会上的分享整理. 今天我将分享个人对于网络方案的理解,以及网易云在交付 Kubernetes ...

  4. 更强、更稳、更高效:解读 etcd 技术升级的三驾马车

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 陈星宇(宇慕 ...

  5. 超长干货丨Kubernetes网络快速入门完全指南

    Kubernetes网络一直是一个非常复杂的主题.本文将介绍Kubernetes实际如何创建网络以及如何为Kubernetes集群设置网络. 本文不包括如何设置Kubernetes集群.这篇文章中的所 ...

  6. DevOps专题|玩转Kubernetes网络

    Kubernetes无疑是当前最火热的容器编排工具,网络是kubernetes中非常重要的一环, 本文主要介绍一些相应的网络原理及术语,以及kubernetes中的网络方案和对比. Kubernete ...

  7. SOLOv 2:实例分割(动态、更快、更强)

    SOLOv 2:实例分割(动态.更快.更强) SOLOv2:  Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...

  8. Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用

    概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...

  9. 深入解读docker网络与kubernetes网络

    前言:你是否学习使用k8s很久很久了可是对于网络这块仍旧似懂非懂呢? 您是否对网上一堆帖子有如下的抱怨: 打开多个博客,然后发现有区别么? 明显是直译过来的,越看越迷糊 “因为xxx,所以yyy”,. ...

随机推荐

  1. Java值引用和对象引用区别Demo

    转自:http://blog.csdn.net/gundsoul/article/details/4927404 以前就知道JAVA对象分对象引用和值引用,并且还知道8种基础数据类型,即引用时是值引用 ...

  2. [BUUCTF]PWN——[V&N2020 公开赛]easyTHeap

    [V&N2020 公开赛]easyTHeap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,常见的堆的菜单 64位ida载入,main函数 最多只能申请7个ch ...

  3. CF981B Businessmen Problems 题解

    Content 有一个长度为 \(n\) 的序列和长度为 \(m\) 的序列,两个序列中的元素都有一个编号 \(num\) 和一个值 \(val\),且同一个序列的元素之间的编号互不相同.现在从这两个 ...

  4. CF675A Infinite Sequence 题解

    Content 给定三个整数 \(a,b,c\),问你 \(b\) 是否在以 \(a\) 为首项,公差为 \(c\) 的等差数列中. 数据范围:\(-10^9\leqslant a,b,c\leqsl ...

  5. jQuery Validate验证(判断)某个字段是否通过验证

    jQuery Validate 默认只能判断整个表单是否验证通过,但是有时候我们需要对某个字段进行判断 ,可以使用以下方法 var bool=$("整个form表单的ID").va ...

  6. XSS工具类,清除参数中的特殊字符

    package com.xss; import java.util.regex.Pattern; /** * XssUtil 工具类 */ public class XssUtil { static ...

  7. JAVA获取当前日期所在的周一到周日的所有日期集合

    /** * 获取当前日期所在的周一到周日的所有日期集合 * @return */ public static List<Date> getWeekDateList() { Calendar ...

  8. SpringBoot整合redis实现过期key监听事件

    Spring整合redis实现key过期事件监听:https://www.cnblogs.com/pxblog/p/13969375.html 可以用于简单的过期订单取消支付.7天自动收货场景中 1. ...

  9. 【LeetCode】842. Split Array into Fibonacci Sequence 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么

    第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...