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. 数据恢复binlog2sql

    目录 一.原理及其使用 用途 闪回原理简析 binlog 有三种可选的格式: 来实例演习下来实例演习下 二.准备工作 一.原理及其使用 生产上误删数据.误改数据的现象也是时常发生的现象,作为运维这时候 ...

  2. LeetCode 36. Valid Sudoku (Medium)

    题目 Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according ...

  3. 安装MySQL5.7.26教程图解

    安装MySQL5.7.26教程图解 1.安装mysql所需的yum源 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf ...

  4. selenium 控制窗口无限向下滚动

    使用脚本 window.scrollBy(0, 1000),放入 while True 循环,示例代码: while True: js = 'window.scrollBy(0, 1000)' dri ...

  5. bjdctf_2020_babyrop2(没有成功拿到shell)

    看到程序先例行检查一下 可以看到开启了canary和nx保护,需要注意的是这个acnary 将程序放入ida中shift+f12 没有关键性函数.我们进入main函数中 在main的gift程序里面我 ...

  6. [BUUCTF]PWN——others_shellcode

    others_shellcode 附件 解题步骤: 例行检查,32位程序,开启了NX(堆栈不可执行)和PIE(地址随机化)双重保护 试运行了一下,发现直接就能执行shell的命令 远程连接运行一下,直 ...

  7. Vue2与Vue3的组件通讯对比

    Vue2 父传子 父传子比较简单, 主要通过以下步骤实现 父在template中为子绑定属性 <Child :childData='pMsg'/> <!-- 也可以写死 --> ...

  8. TCP 长连接保活机制&HTTP长连接设置

    TCP KeepAlive Wireshark抓包分析机制 -------------------------------- 如上图所示,TCP保活报文总是成对出现,包括TCP保活探测报文和TCP保活 ...

  9. 【linux项目】lichee nano linux烧写

    目录 前言 参考: 安装交叉编译链 搭建 SPI FLASH 烧录环境 让芯片进入烧写模式 sunxi 烧写命令 u-boot 裁剪 拉取 u-boot 源码 配置 u-boot 检查 flash 驱 ...

  10. 【LeetCode】871. Minimum Number of Refueling Stops 解题报告(Python)

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