Rancher v1.2基础设施引擎整体架构分析

Rancher v1.2基础设施引擎整体架构分析

大家好,又见面了,我是全栈君。

Rancher Labs官方于12月1日发布了其容器部署与管理平台Rancher的最新版本,Rancher v1.2。Rancher v1.2可以说是一个里程碑版本,只要体会其新版功能,会发现漫长的等待绝对是值得的。

从架构角度看,用两个字来概括就是“解耦”,基础设施引擎的分离,agent节点的服务粒度更细;

从产品角度看,给了用户更多定制的空间,Rancher依然秉持着全部OpenSource的理念;

在开发语言上,之前遗留的通过shell脚本方式的粗糙实现也都基于Golang重写,解耦的新服务也几乎使用Golang开发,agent节点全线基于Golang这也为后续便利地支持ARM埋下伏笔;

在市场选择上,Rancher依然在kubernetes下面投入了大量精力,引入了万众期待的CNI plugin管理机制,坚持要做最好用的Kubernetes发行版。

本文就带着大家从架构角度总览Rancher v1.2版本的特性。

架构总览

在v1.2版本的整体架构图(如下图所示)上,Cattle引擎向下深入演化成了基础设施引擎,这一点上在v1.1时代也早有体现。Cattle更多得作为基础设施的管理工具,可以用它来部署其他服务和编排引擎,当然它本身编排能力还是可以使用的,习惯了stack-service的朋友仍然可以继续使用它,同时rancher scheduler的引入也大大增强了其调度能力。Rancher仍然支持Kubernetes、Mesos、Swarm三大编排引擎,Kubernetes可以支持到较新的v1.4.6版本,由于所有的部署过程的代码都是开放的,用户依然可以自己定制部署版本。值得一提的是,Rancher支持了新版的Swarm Mode也就是Swarmkit引擎,这也意味着Rancher可以在Docker1.12上部署,不小心装错Docker版本的朋友这回可以放心了。

wKiom1jGia6Sn-VCAAEFU6DDKpc100.png

在存储方面,Rancher引入了Kubernetes社区的flexvol来做存储插件的管理,同时也支持Docker原生的volume plugin机制,并实现了对AWS的EFS&EBS以及标准NFS的支持,先前的Convoy应该会被抛弃,Rancher最终还是选择参与社区标准。在网络方面,除了CNI插件机制的引入,用户还可以使用rancher-net组件提供的vxlan网络替代先前的ipsec网络。在可定制性方面,还体现在Rancher提供了用户可以自定义rancher-lb的机制,如果特殊场景下默认的Haproxy不是很给力时,用户可以自定义使用nginx、openresty或者traefik等等。下面便做一下详细分解。

 

基础设施引擎

初次安装v1.2版本,会发现多了Infrastructure(如下图所示)的明显标识,默认的Cattle引擎需要安装healthcheck、ipsec、network-services、scheduler等服务。这个是有rancher-catalog来定义的,https://github.com/rancher/rancher-catalog,新分离出来了infra-templates和project-templates:infra-templates就是Rancher定义的各种基础设施服务,包括基础服务和编排引擎;project-templates对应的是Env初始化时默认安装的服务,它可以针对不同的编排引擎进行配置。

wKioL1jGicDTKHowAABysR4ZS9o387.png

以Cattle引擎为例,可以在project-templates的Cattle目录中找到相应的配置文件,当ENV创建初始化时会创建这里面定义的服务,这样一个机制就可以让我们可以做更深入的定制,让ENV初始化时创建我们需要的服务:

wKiom1jGic6SjPCYAABmf1GDKxw835.jpg

在Cattle引擎调度方面,Rancher实现了rancher-scheduler,https://github.com/rancher/scheduler。它实现了允许用户按计算资源调度,目前支持memory、cpu的Reservation。其实现原理是,内部有一个resource watcher,通过监听rancher metadata的获取Host的使用资源数据变化,进而得到ENV内所有Host资源汇总信息。与此同时,监听rancher events的scheduler.prioritize、scheduler.reserve、scheduler.release等各种事件,通过排序过滤可用主机后发送回执信息,Rancher Server就有了可以选择的Host列表。如下图所示:

wKioL1jGid2DK27lAABq1_FiUuc335.png

需要注意的是,rancher-scheduler并没有和rancher-server部署在一起,而是在你添加Host时候部署在agent节点上,当然rancher-scheduler在一个ENV内只会部署一个。

Agent节点服务解耦

agent节点一个最大的变化就是,agent-instance容器没有了,它被拆分成多个容器服务,包括rancher-metadata、network-manager、rancher-net、rancher-dns、healthcheck等。

wKiom1jGie7BKzPDAACb4HbwTu8268.png

metadata服务是老朋友了,它在每个agent节点上保存了host、stack、service、container等的信息,可以非常方便的在本地调用取得,https://github.com/rancher/rancher-metadata,在新的体系中它扮演了重要角色,几乎所有agent节点上的服务均依赖它。在先前的体系中,metadata的answer file的更新是通过事件驱动shell脚本来执行下载,比较简单粗暴。v1.2开始使用监听rancher events方式来reload metadata的answer file,但是answer file还需要到rancher server端下载,总的来说效率还是有一定提升的。

dns在新的体系中仍然承担着服务发现的功能,https://github.com/rancher/rancher-dns。除了拆分成单独容器之外,它也在效率上做了改进,它与rancher-metadata容器共享网络,以metadata的结果生成dns的answer file。与之前的架构相比,省去了dns answer file下载的过程。需要注意的是,rancher-dns的TTL默认是600秒,如果出于各种原因觉得dns作为服务发现不是很可靠,那么可以使用etc-host-updater和rancher-metadata的组合,etc-host-updater(https://github.com/rancher/etc-host-updater)会根据metadata数据动态生成hosts文件并写入容器内,这样通过服务名访问时,其实已经在本地转换成了IP,无需经过dns,如下图所示:

wKioL1jGifqSd_4sAAAuPeUgOeo905.png

rancher-net作出了比较重大的革新,https://github.com/rancher/rancher-net,除了继续支持原有的ipsec外,还支持了vxlan。这个支持是原生支持,只要内核有vxlan的支持模块就可以。vxlan并不是Cattle的默认网络,使用时可以在infra-catalog中重新选择它来部署,其实现以及部署方式后续会在专门的文章中进行探讨:

wKioL1jGigTC-WZhAABmVssbXCQ850.png

network-manager的引入为Rancher v1.2带来了一个重要特性就是CNI插件管理,在之前的版本中很多用户都提到rancher-net本身的网络无法满足业务需求。容器网络之争,无非就是CNM与CNI,Rancher选择站队CNI,这也是为了更好与Kubernetes融合。而CNI的插件很多种,Calico、Weave等之流,每个插件的部署方式都不一样。Rancher为了简化管理提出了network-manager,https://github.com/rancher/plugin-manager,它可以做到兼容主流的CNI插件,它实际上定义了一个部署框架,让CNI插件在框架内部署。network-manager是以容器方式部署,由于每种插件在初始化时可能需要暴露端口或加入一些NAT规则,所以network-manager能够动态设置不同插件的初始化规则,它的做法是以metadata作为 host port和host nat规则的数据源,然后获取数据后生成相应的Iptables规则加入的Host中。而对于真正的CNI插件,需要在network-manager容器内/opt/cni目录下部署对应cni插件的执行程序(calico/weave),/etc/cni目录下部署cni插件的配置,这两个目录映射了docker卷rancher-cni-driver,也就是Host上的/var/lib/docker/volumes/rancher-cni-driver目录下。

关于healthcheck,先前是通过agent-instance镜像实现,里面内置了Haproxy,事件驱动shell脚本来下载healchcheck配置并reload。新的架构中,Rancher实现了单独的healthcheck,https://github.com/rancher/healthcheck,采用Golang微服务的方式,数据源是metadata。当然healthcheck的最终检查仍然是通过与Haproxy sock通信来查看相应member的健康状态(原理如下图),healthcheck的实现主要是为了将其从agent-instance中解耦出来。

wKiom1jGihPAtkZwAAG3WqTZsfM638.png

总结

Rancher v1.2的新特性非常多,基础设施引擎的变化是一切特性的基础,在这篇开篇之作之后,我们后续会持续为大家带来Kubernetes与Swarmkit的支持、自定义rancher-lb、vxlan的支持、各种CNI插件的集成以及各种存储接入的实践操作指南等等。

本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1906140

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108004.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月8日 下午8:00
下一篇 2022年3月8日 下午8:00


相关推荐

  • 0707作业

    0707作业

    2021年6月8日
    102
  • BUUCTF crackMe 题解

    BUUCTF crackMe 题解crackMe 程序信息题目分析 main 函数分析 sub 关键函数分析动态调试 byte 求解总结程序信息 这道题目来自于哪个实际比赛 我没有去找 我个人是从 buuoj 上刷到的 位于 re 部分第二页 题目只有一分 做出来的人也比较多 看起来应该是个简单的题目 之所以要写这个 wp 是对题目的答案存在一些疑问 网上也有很多 wp 我都看了一下 大致都出自于同一个人的手笔 O O 我个人感觉网上的 wp 分析过程都漏了一步 虽然这样得出的 flag 可以通过 buuoj 但是这是个 crack

    2026年3月16日
    3
  • java实现佛洛依德算法

    java实现佛洛依德算法所用到的测试图 packagealgor 弗洛伊德算法思想 Ak i j 意思是 i 点到 j 点经过一系列点 但是点下标最多不超过 k 情况 1 如果 Ak i j 不经过 k 那么 Ak i j Ak 1 i j 情况 2 如果 Ak i j 经过 k 那么 Ak i j Ak 1 i k Ak 1 k j 所以 Ak i j min Ak 1

    2026年3月17日
    1
  • 镁光闪存颗粒对照表_详解闪存颗粒的种类

    镁光闪存颗粒对照表_详解闪存颗粒的种类固态硬盘的存储颗粒从目前来看主要分为SLC,MLC,TLC,QLC.这四种存储颗粒的区别主要体现在那方面,以下我们就从价格,使用寿命,应用场合来划分.SLCMLCTLCQLC示意图SLC:单层次存储单元SLC=Single-LevelCell,即1bit/cell,速度快寿命最长,价格贵(约MLC3倍以上的价格),约10万次擦写寿命.是目前使用寿命最高的颗粒,由于价格贵,产能少,…

    2022年6月22日
    103
  • DeepSeek使用指南:从入门到精通的全方位解析

    DeepSeek使用指南:从入门到精通的全方位解析

    2026年3月12日
    2
  • lm算法讲解_m算法

    lm算法讲解_m算法请问MATLAB中LM算法(Levenberg-Marquard-algorithm)的函数是什么?。http://www.mathworks.com/matlabcentral/fileexchange/16063-lmfsolve-m-levenberg-.%.去看吧好像没有二维的.你最好看看这个函数,根据LM算法的意义修改一下计算方法:用来产生一些数据片段(例如消息或会话项)的哈…

    2022年10月1日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号