K8S的SDN容器网络解决方案【机制篇】

戳蓝字“CSDN云计算”关注我们哦!


编者按:关于容器网络的解决方案业界已经有较多的讨论,笔者无意继续赘述。本文从K8S的网络实现入手,重点阐述SDN在容器网络中的应用价值。K8S及其网络模型体现了鲜明的解耦设计思想,采用SDN技术实现K8S容器网络,并与相应的生态组件形成SDN监管控一体化解决方案,可以更好地提高整个系统的运营水平,更有效地提升企业的核心竞争力。本篇将谈论的是K8S的机制原理。

综述:K8S的基本机制是以“对象-控制器”架构模式为基础设计与实现的。组件API server与etcd的主要功能是实现对各种资源对象REST风格的增删改查CRUD、盯Watch操作。组件controller-manager包括了各种内置控制器,其功能是确保整个系统处于预期的状态。这种数据存储与应用逻辑分离的模式是各功能组件实现无状态服务架构的关键。K8S集群针对基本操作单元Pod对象的处理主要是通过scheduler和kubelet实现的。实际上我们可以把scheduler看作是集群层面的Pod对象控制器,把kubelet理解为是节点层面Pod对象的创建与维护的控制器。

K8S场景下实现Pod互联等的容器网络特别是其数据转发面遵循并适用网络技术的一般性原则与实现。当前主流的容器网络基本解决方案主要包括以Calico为代表的基于经典的三层路由/Netfilter模型的实现,和以OpenShift的SDN实现为代表的二层SDN/OVS模型的实现。而容器网络的特殊性则主要体现在管理控制面实现、以及基于K8S扩展机制的SDN控制器云原生部署等方面。K8S及其网络模型体现了鲜明的解耦设计思想,不论是在K8S与网络组件之间,还是在容器网络与Pod接入容器网络之间等各方面。

狭义地讲SDN的核心技术主要包括数据转发面特别是流表流水线的设计和相应的基于SDN控制器平台的应用的设计与实现等。SDN控制器与各节点上的SDN代理相配合完成系统容器网络的项目租户、网络子网路由、安全策略与服务、SLA/QoS的管控,以及监控可视化等各项操作。而CNI-Plugin的主要功能则是在kubelet创建Pod时将之挂接到容器网络上。在K8S场景下,SDN的价值同样体现在与各种生态组件的集成,实现一体化监管控解决方案,可以更好地提升整个系统的运营水平。

640?wx_fmt=png

图1 K8S系统核心组件构成

K8S基本机制

K8S集群提供了以Pod为基本操作单元的容器化应用的部署、维护、扩展等功能。主要由主节点上的API server、etcd、controller-manager、scheduler等,以及工作节点上的kubelet、容器运行时等功能组件构成。命令行kubectl可以在主节点上也可以部署在远程运行,并通过API server调用与K8S交互。etcd集群可以采用与主节点分离的方式进行部署。另外,即使是主节点不参与业务Pod的分配与创建,也需要运行有一个kubelet实例。

对象处理组件与功能

kube-apiserver:API server通过Web Service端点处理函数的注册与相应的访问请求相关联,实现REST机制对资源对象的增删改查CRUD盯Watch等的操作功能,是系统对外访问的统一入口。而K8S集群内部各功能组件之间的互动也主要是通过API server 的Watch机制实现的。API server本身实现了无状态服务架构模式。Web Service端点以API Group来管理分组和版本适配,分组包括核心组、扩展组、其他的auto scaling组、metrics组等。而Proxy类API server接口的作用是代理REST请求,并转发给相应节点的kubelet进行实际的操作处理。此外API server还提供有各种web hook扩展机制。

etcd集群:etcd是Go语言编写的基于raft分布式协议的高可用key-value存储系统,作为API server的后台用于K8S存储各种资源对象包括外部扩展定制资源对象(CRD - Custom Resource Definition)等配置与状态信息,支持典型的消息发布与订阅机制,即Watch机制。etcd是K8S组件API server等实现无状态服务架构的基础。K8S集群内任何对资源对象的增删改查CRUD盯Watch操作等都通过API server的storage接口统一与etcd交互,各组件不会直接操作etcd。

控制器架构模式及组件功能

控制器模式是K8S各组件功能实现的基本框架,其基础主要是基于etcd特性在API server内部实现的List-Watch机制和相应的client-go客户端平台库函数。

List-Watch机制:该机制是基于etcd本身的Watch特性的,属于API server对资源对象CRUD操作的体系化扩展。API server内部向etcd发起的Watch只能订阅某个对象的创建、删除事件,无法设置过滤条件的,不能针对对象的属性进行过滤;而API server实现对外部各种K8S功能组件发起的Watch请求的处理,并能够针对对象属性进行过滤。在集群运行过程中组件向API server发送REST请求进行Watch订阅,告诉API server对什么资源对象及发生什么样的变化事件感兴趣。而每一个Watch操作的生命周期对应相应的HTTP REST请求的生命周期。

库函数client-go包括了访问API server的客户端,以及支持控制器实现所需的相关平台机制List-Watch的客户端informer和事件队列workqueue等。这样控制器的设计与实现只需专注应用逻辑,只需提供对象的事件回调函数和相应的队列处理功能即可。

640?wx_fmt=jpeg

图2 K8S控制器架构模式

控制器架构模式:一个典型的控制器实现通过API server的List-Watch机制的客户端informer与API server保持交互,跟踪特定的资源对象的状态与变化。对象变化的事件由informer调用相应的callback完成一些基本的处理,然后把相关的变更及对象信息放到workqueue里面。控制器的应用逻辑实现在worker协程里面。控制器可启动多个worker协程来处理workqueue里的对象事件。根据对象的期望状态和当前系统的实际情况进行相应的处理,并通过clients向API server发送行动请求。实际上也是通过对其他相关下游资源对象的设置,以实现整个集群向期望的状态演进。此外,为缓解各组件模块对API server的访问压力、提高处理性能,控制器的内部实现也都采用了缓存机制的支持。

kube-controller-manager:K8S内置了一系列的控制器,基本上都是嵌入在controller-manager进程里的。其中,Replication Controller的功能是确保集群中有且仅有指定个数的Pod实例在运行,可以通过调整RC中的副本数量来实现系统扩容或缩容,通过改变RC中的Pod模板来实现系统的滚动升级;Endpoints Controller中的Endpoints表示某个Service对应的所有Pod副本的访问地址。此控制器的功能是通过监听Service和对应的Pod副本的变化,负责生成和维护所有Endpoints对象。而工作节点上的kube-proxy就是通过监听Service和Endpoints来配置相应的数据面实现相应的转发和负载均衡功能。我们可以理解Endpoints Controller是K8S除Pod以外最重要的资源对象服务Service的集群层面的控制器,而kube-proxy则是相应节点层面的控制器;Namespace Controller的功能是在后台实现优雅地删除某Namespace下的Service Account、RC、Pod等资源对象及此Namespace本身;Service Accounts Controller的功能是为每个Namespace维护一个默认的Service Account,并与Token Controller配合实现K8S集群内部Pod访问API server的认证功能。

K8S除本身内置的这些控制器外,也支持各种用户自定义扩展。控制器可以运行在K8S主节点上,也可以运行在工作节点上;可以运行在K8S集群内,甚至运行在集群外。

640?wx_fmt=png

图3 Pod调度、创建、CNI-Plugin挂接容器网络的处理时序

Pod处理组件与功能

基本上K8S的资源对象与控制器都是相互对应、配合起来完成相应的功能的。但如果注意到的话,在controller-manager中并没有针对Pod对象操作的控制器。实际上K8S决定把Pod放到哪个节点上是由组件scheduler按照相应的策略决策的,而Pod的实际创建与维护是由kubelet完成的。所以我们可以理解为scheduler是Pod集群层面的控制器,kubelet则是Pod节点层面的控制器。

具体的来说,就是scheduler通过API server提供的Watch等接口,监听并获取到未调度的Pod和节点等的相关信息,通过过滤和优先级算分对节点筛选,选择出最合适的节点,将Pod与此节点绑定,并把结果通过API server存储到etcd中。在相应工作节点上的kubelet会去实际创建Pod的SandBox,调用CNI-Plugin进行相应的网络配置挂接SandBox网络名字空间到容器网络上,创建和运行Pod所属的init容器,最终创建和运行Pod的常规业务容器。

关于K8S的机制今天就先介绍到这里,接下来我们将介绍容器网络的具体实现。


 

1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。


推荐阅读

  • Kafka学习笔记

  • “拼多多”惊爆重大 Bug!程序员的眼泪,羊毛党的狂欢

  • “黄鳝门”视频女主播一审宣判!

  • 12306能扛住明星出轨这种流量冲击吗?

  • V神说,解释以太坊2.0最好的文章就是这篇了

  • 以太坊升级的拖油瓶,竟只是这几行代码

  • 程序员有话说 | 程序猿在乘地铁的时候都在想什么?  推 荐 


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png喜欢就点击“好看”吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总编下午茶专题汇总

《总编下午茶》是CSDN一档关注技术应用和IT前沿的访谈类栏目,由CSDN各主编担任该节目主持人,并邀请众多技术大咖分享技术热点与前沿知识,同时也是技术小伙伴们分享交流的最佳平台。 NLP可行性研究方向和应用热点 “现在NLP技术处于什么发展…

云重磅 |央视专访任正非;拼多多被薅上亿羊毛;甲骨文对云未来的10项技术预测...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周二第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

关于云原生,这是最详细的技术知识

戳蓝字“CSDN云计算”关注我们哦!本文旨在揭示现代软件行业的关键主题——云原生应用程序。这篇文章涉及微服务、容器和无服务器应用程序。在这里,我们将讨论这些技术的实际优点和缺点。微服务是什么微服务架构作为构建现代软件应用程序的强大方法而享有…

html之引入独立js方便维护jq代码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

容器精华问答 | Docker是否比虚拟技术要好?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云计算的发展日新月异&#xff0c;新技术层出不穷&#xff0c;尤其容器技术自2013年Docker容器问世以来一路高歌猛进红遍大江南北&#xff0c;与虚拟机相比&#xff0c;容器更显优势&#xff0c;有着更轻量、更快捷、占用资源更少&a…

Kubernetes API 与 Operator:不为人知的开发者战争

戳蓝字“CSDN云计算”关注我们哦&#xff01;前情回顾&#xff1a;《Kubernetes API 与 Operator&#xff1a;不为人知的开发者战争&#xff08;上&#xff09;》2016 年秋天&#xff0c;原 CoreOS 公司的工程师邓洪超像往常一样&#xff0c;来到了同事位于福斯特城&#xff08…

要闻君说:国产5G 手机只比普通版手机贵500元?菜鸟物联网机器人分拨中心首落南京!亚马逊推出的AWS集中式备份服务来啦!...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。借着自家年会即将开幕的兴奋劲&#xff0c;继续给各位看官们带来最新、最扎眼的泛云圈大新闻&#xff0c;还是先听首歌曲&#xff0c…

Spring精华问答 | 什么是Spring Cloud?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spring是为解决企业应用程序开发复杂性而创建的一个Java开源框架&#xff0c;应用非常广泛。业内非常流行的SSH架构中的其中一个"S"指的就是Spring。今天我们就一起来看看关于Spring的精华问答&#xff01;1Q&#xff1a;…

要闻君说:必应(Bing)搜索引擎已在国内被屏蔽;Verizon媒体业务宣布裁员7%;小米率先发布折叠屏手机...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。年底新闻一箩筐果真眼见为实&#xff0c;绝对不假。无论是华为天罡出师再添5G风采&#xff0c;还是小米自研折叠手机惊艳于世&#x…

高晓松侃5G!2019开年大讲揭示运营商的秘密

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;通信世界日前&#xff0c;著名音乐创作人、电影创作人、自带清华才子光环的高晓松回归母校&#xff0c;竟做了一场没有“诗和远方”全是5G的演讲&#xff01;他演讲的主题是——《5G与区块链&#xff1a;文创产…

容器精华问答 | Docker和虚拟机有什么差别?

戳蓝字“CSDN云计算”关注我们哦&#xff01;容器技术是这两年热门的话题&#xff0c;因为容器技术给我们带来了很多方便的地方&#xff0c;节约了不少成本&#xff0c;不管是在运维还是开发上。今天&#xff0c;就让我们来看看关于容器更加有深度的问题吧。1Q&#xff1a;宿主…

云漫圈 | finally到底是在return之前执行还是return之后执行?

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;程序员乔戈里作者&#xff1a;乔戈里qgl——下课后——public class Main { public static void main(String[] args) { query(); } public static void query() { int i 0; try { …

5G大规模商用来临之前,你必须知道的几个知识点

戳蓝字“CSDN云计算”关注我们哦&#xff01;大数据文摘授权翻译自纽约时报编译&#xff1a;雪清、蒋宝尚当人们在谈论人工智能和自动驾驶的时候&#xff0c;总是离不开5G。要说4G的侧重点是人与人之间不同方式的通信&#xff0c;那么5G将要形成的端到端生态系统&#xff0c;能…

趣挨踢 | 阿里员工吐槽:我在阿里工作五年,面试一个小公司竟然挂了

戳蓝字“CSDN云计算”关注我们哦&#xff01;来自&#xff1a;互联网坊间八卦一名阿里员工在互联网社区吐槽&#xff0c;称自己工作经验丰富&#xff0c;在阿里工作了五年&#xff0c;去面试一个小互联网创业公司竟然挂了&#xff0c;真是无力吐槽&#xff1a;我就郁闷了&#…

要闻君说:亚马逊也进击开源了吗?微软收购开源软件公司Citus Data,剑指云服务!投资15亿的数据中心忠德粤桂云来了!...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。工作日的最后一周&#xff0c;有没有很兴奋&#xff1f;边学习边听歌吧&#xff01;文/要闻君近日&#xff0c;AWS宣布推出Neo-AI项目…

Spark精华问答 | Spark的三种运行模式有何区别?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spark是一个针对超大数据集合的低延迟的集群分布式计算系统&#xff0c;比MapReducer快40倍左右&#xff0c;是hadoop的升级版本&#xff0c;Hadoop作为第一代产品使用HDFS&#xff0c;第二代加入了Cache来保存中间计算结果&#xf…

Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

戳蓝字“CSDN云计算”关注我们哦&#xff01;简书ID&#xff1a;我没有三颗心脏 github&#xff1a;wmyskxz 欢迎关注公众微信号&#xff1a;wmyskxz前言&#xff1a;由于之前没有接触过Hibernate框架&#xff0c;但是最近看一些博客深深被它的“效率”所吸引&#xff0c;所以…

云重磅 | 阿里云开源Blink;华为发布5G Cloud VR;AWS 将举行AI 大会 re;英伟达下调5亿美元业绩预期...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周二第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

虚拟化精华问答 | 虚拟化会使管理更轻松吗?

戳蓝字“CSDN云计算”关注我们哦&#xff01;虚拟化是实现动态IT的重要基石&#xff0c;在虚拟化蓬勃发展的这些年里&#xff0c;虚拟化可以根据不同划分标准进行分类&#xff0c;包括全虚拟化&#xff0c;CPU 虚拟化&#xff0c;硬件虚拟化&#xff0c;服务器虚拟化等等&#…

Storm精华问答 | 为什么这么多人用Spark而不用Storm?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Storm被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍&#xff0c;以及大数据实时处理解决方案的应用日趋广泛&#xff0c;目前已是分布式技术领域最新爆发点&#xff0c;而Storm更是流计算技术中的佼…