39

Kubernetes 网络、监控技术全面解读!

 4 years ago
source link: https://www.tuicool.com/articles/E3iQnii
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

宇宙文明的技术进步与其可控制的能源总量息息相关,从低到高可以确定文明发展的三种类型:类型一、能够充分利用行星资源;类型二、能够收集整个恒星系统的能源;类型三、可以利用星系系统的能源。

—— 1964年,天体物理学家尼古拉-卡尔达舍夫

如果从资源利用的角度划分,云计算可以划分为两个类型,类型一:基于传统虚拟化构建的云,这是目前大部分云的形态。 类型二:基于容器构建的云,这是云必然的未来。 容器对资源的利用率要提高一个数量级,更重要的是颗粒度更细,自动化程度更高。 容器是传统虚拟化效率的数百倍,滚滚洪流,不可阻挡。

更高的类型,也意味着更复杂,笔者尤其关注容器云在网络、监控两方面面临巨大的挑战。

一、容器常见的网络解决方案概述和对比

容器常见的网络标准有两种,分别是Docker公司提出的CNM(Container Network Model),和CoreOS公司提出的CNI(Container Network Interface)。

1. CNM介绍

Libnetwork是CNM规范的规范实现,Libnetwork提供Docker守护程序和网络驱动程序之间的接口。网络控制器负责将驱动程序与网络配对。每个驱动程序负责管理其拥有的网络,包括提供给该网络的服务。 每个网络有一个驱动程序,多个驱动程序可以与连接到多个网络的容器同时使用。 

J3qyuyf.png!web

Libnetwork提供Docker守护程序和网络驱动程序之间的接口,图来源:thenewstack.io

2. CNI介绍

jm6JnmN.png!web

CNI已经成为云原生应用基金会(CNCF)的正式项目,用于编写插件以配置Linux容器中的网络接口。CNI仅关注容器的网络连接并在删除容器时删除分配的资源。CNI提供了广泛的支持,并且规范易于实现,支持第三方插件。

BfqiMbV.png!web

CNI是向网络添加和删除容器的最小规范,图来源:thenewstack.io

目前主流的容器云都是基于Kubernetes构建,CNI也是Kubernetes所采用的网络标准。常见的CNI网络插件有:

aQRfyiE.jpg!web

图来自于网络,出处不可考

1)常见的CNI插件介绍

  • Calico: Calico使用纯L3方法提供简单,可扩展的网络。Calico还提供无状态IP-in-IP模式,除了可扩展的网络,Calico还提供策略隔离。Calico是一个基于BGP的纯三层的数据中心网络方案(不需要Overlay)。

  • Flannel: flannel一种简单易用的方法,可以配置为Kubernetes设计的layer3网络结构。flannel基于Linux TUN/TAP,使用UDP封装IP包来创建overlay网络,并借助etcd维护网络的分配情况。

  • Canal: Canal支持Flannel和Calico,提供开箱即用的VXLAN网络,同时还允许利用Calico策略隔离。

  • Cilium: Cilium是一个开源软件,用于透明地提供和保护使用Kubernetes、Docker和Mesos等Linux容器管理平台部署的应用程序服务之间的网络和API连接。Cilium的基础是名为BPF的新Linux内核技术,它可以在Linux本身内动态插入强大的安全性、可见性和网络控制逻辑。

  • kopeio-networking: kopeio-networking是专为Kubernetes而设计的,充分利用了Kubernetes API,因此更简单,更可靠。

  • kube-router: Kube-router是专为Kubernetes打造的专用网络解决方案,旨在提供操作简单性和性能。Kube-router将pod网络解决方案,服务代理和网络策略实施器作为一体化解决方案。

  • Romana: Romana为pod网络使用标准的第3层网络。Romana支持Kubernetes网络策略API,使群集跨网络可用区域分割,Romana支持各种网络拓扑,包括第2层和第3层网络。节点之间的路由在本地安装,必要时使用BGP或OSPF分发到网络设备。

  • Weave Net: Weave Net支持多主机容器网络,可以跨越不同的云网络配置,简化Kubernetes上运行的旧工作负载。

2) CNI插件 项目Forks数量比较

2URBRb2.png!web

Github上被Forks的数量对比,图来源chrislovecnm.com

3)CNI插件项目10Gbit网络下的CPU消耗比较

bEZRFn3.jpg!web

10Gbit网络下的CPU消耗比较,图来源itnext.io

由于篇幅所限,本文仅对CNI插件做简单介绍,如果对CNI插件有进一步兴趣,可以查阅相关项目官方文档。

二、Kubernetes的监控解决方案介绍

Kubernetes因为状态一直动态变化,因此监控也是一个难点,常见的监控工具有:

  • Kubelet: Kubelet通过Kubernetes API服务器监视PodSpecs,并收集资源利用率统计信息以及pod和事件状态。

  • cAdvisor: cAdvisor是一个开源容器资源使用和性能分析代理,专为容器而构建。在Kubernetes中,cAdvisor被集成到Kubelet二进制文件中。cAdvisor自动发现机器中的所有容器,并收集CPU,内存,文件系统和网络使用情况统计信息。

  • Prometheus: Prometheus可以原生地监测Kubernetes,Prometheus Operator简化了Kubernetes上的Prometheus设置,并允许使用Prometheus适配器提供自定义指标API。 Prometheus提供强大的查询语言和内置仪表板,用于查询和可视化数据。

  • Sysdig: Sysdig将来自系统调用,Kubernetes事件,Prometheus指标,statsD,JMX等的数据整合到一个页面中,从而提供环境的全面信息。Sysdig还提供了API来查询,以提供强大且可定制的解决方案。Sysdig和Sysdig Inspect能够自由地执行故障排除,性能分析和取证。

  • Jaeger: Jaeger是优步科技发布的追踪系统,用于在复杂的分布式系统中进行故障排除和监控事务。

  • Weave Scope: Weave Scope是Weaveworks开发的监控工具。Weave Scope在Kubernetes集群中生成进程,容器和主机的映射,以帮助实时了解Docker容器。还可基于 图形UI 管理容器并在容器上运行诊断命令。

目前主流的 Kubernetes监控方式 通过Prometheus,通过Grafana展现。

uymEzqf.jpg!web

通过Prometheus监控Kubernetes,通过Grafana展现,图来源:grafana.com

从上面的介绍可以看出,Kubernetes在网络、服务状态、监控方面有各种解决方案,每种解决方案可以说都有优缺点。笔者最近参加了UCloud的TIC大会,现场听了UCloud优刻得实验室负责人叶理灯关于Kubernetes的一个分享, 叶理灯的分享干货很多,比如基于RBAC实现账号管理隔离,有状态和无状态服务的管理。笔者特别关注了 UCloud在Kubernetes网络和监控解决方案的独到之处,和大家分享下。

三、KUN和UK8S网络和监控几个厉害的玩法

叶理灯介绍了UCloud基于Kubernetes打造的内部容器云平台(简称KUN)和针对外部用户的容器管理服务UK8S。KUN的主要实现方法之一是K8S+Docker,通过Docker提高运维部署效率和运维环境的一致性,通过K8S实现跨可用区容灾和Auto Scaling能力,从而实现高可用、在线升级、自动扩缩、负载均衡、日志查看、资源监控等多种功能。而UK8S可以让用户直接在上面部署、管理、扩展容器化应⽤,⽽⽆需关⼼Kubernetes集群⾃身的搭建及维护等运维类⼯作。 UK8S完全兼容原⽣的Kubernetes API,以UCloud私有⽹络为基础,并整合了ULB、UDisk、EIP、VPC等云产品。

1. UK8S网络特点-连放五个大招

UK8S在网络上有五个大招,全面支持IPV6,实现了容器云和现有公有云的无缝融合,并且在性能和云主机一致:

  • UK8S全面支持IPV6,并且能够做到核⼼基础⽹络⽆需修改,underlay,Pod与集群外部互通。

  • ⾃研CNI插件,与VPC⽹络深度集成

  • 利⽤SecondaryIP,API实现IP管理

  • ⽆overlay,性能与云主机⼀致

  • Pod⽹络可与物理云托管云直接互通

令人印象深刻的是,UCloud自研的CNI(Container Network Interface)插件,使 UK8S拥有与云主机等同的网络性能(目前最高可达10 Gb/s,100万pps)。

2. 一站式Kubernetes服务(UK8S)打造

在管理服务方面, UK8S支持完全的容器化和微服务化,可以确保所有管理服务全部运行在内部KUN平台上,基于KUN的API对服务模块进行动态管理; 一个集群对应生成一个Watcher,容易进行横向扩展;基于Watcher+Redis缓存的方式,保证用户在控制台获取集群信息的速度足够快,相当于用K8S管理K8S。

托管方面,采用“UK8S+托管物理机”的模式可以合理利用存量物理资源,且无需运维管理UK8S集群以及部署外部负载均衡,业务高峰可随时扩容集群,帮助用户有效利用存量IT资源。例如,Master节点部署在共有云上,Node节点分为公有云和托管云两部分,两个区的网络实现了互联互通等。

6VJbuaR.jpg!web

例如:元年科技CTO 杨熠提到:“ 使用UK8S,开发者可以像使用普通云服务器一样迅速搭建K8S环境。在享受K8S带来的便利的同时,能够让开发人员集中注意力在业务实现的细节,而不必在基础架构搭建上浪费太多的精力。 UCloud为此提供的专业、快速的服务和响应机制帮助我们成功的将整个环境从自建K8S平滑迁移到UK8S。”

3.KUN监控特点介绍

UCloud KUN的监控系统方案基于Prometheus构建,Prometheus部署于K8S集群中,使用HostPath存储数据、Metrics采集,使用 Alert Manager 聚合报警,调用 Monitor Manager 提供的 Web Hook;自研 Monitor Manager 可以实现告警信息的发送,发送渠道包括邮件和微信,告警组管理、互相监控探测功能、报警收敛;使用 Grafana 实现 Web 可视化。

笔者总结KUN监控有两个企业用户特别关心的点:

  • ⾃研 Monitor Manager:实现告警信息的发送,发送渠道包括邮件和微信,告警组管理,互相监控探测功能,报警收敛。

  • 监控系统⾼可⽤:冗余部署每个 AZ 下运⾏⼀个 Prometheus,各个 Prometheus 独⽴运⾏,采集同样的数据;每个 AZ 下运⾏⼀个 Alert Manager,每个 Alert Manager 接受两个 Prometheus 的消息,他们之间互为 peer,去除冗余报警。

为了 实现监控系统的高可用,UCloud采取了冗余部署方案, Monitor Manager 部署在 K8S集群之外,跨AZ部署互相监控;通过微信和听云从外部对 Monitor Manager 进行监控;Prometheus 配置DeadMansSwitch 规则,实现一个永远触发的告警,MonitorManager 对其进行检测,当较长时间没有收到报警时,说明监控告警系统不工作了,发出告警;Grafana 使用 PVC 进行配置文件的存储。

NNF3eiz.jpg!web

4. 一个终极厉害的玩法

因为UK8S在网络上能够做到和公有云全面融合,还可以有一个厉害的玩法--平滑迁移。 因为Pod具有与VM等同的⽹络待遇,让VM与容器混合部署成为可能,也让业务迁移到K8S更简单。

3ENrmeU.jpg!web

总结:使用UK8S,就是抓住未来

Kubernetes已经发布整整5年了,但是Kubernetes还在飞速发展,丝毫没有停下来的迹象,相反还在不断攻城略地,Kubernetes就是现在明显能抓住的未来。在Kubernetes落地过程中,网络和监控面临很大挑战,也有很多解决方案。 UCloud在云计算方面有将近十年的技术积累,推出的UK8S托管方案,如利剑出鞘,斩断任何容器难题,让用户轻松步入容器时代,使用UK8S,就是抓住未来。

↓↓ 点击"阅读原文" 【加入云技术社区】

相关阅读:

2019 Kubernetes 六大趋势预测

Twitter 抛弃 Mesos,全面转向 Kubernetes

2018年Kubernetes 四大趋势预测

Kubernetes 在宜信落地实践

Kubernetes 添加永久存储的挑战

RightScale 2019年云状况调查报告:35% 的云支出被浪费「附50页PDF下载」

2018年云计算九大趋势热词:Serverless、混合云、多云、中台、边缘计算等「附下载」

更多文章 请关注

FfAVJry.jpg!web

文章好看点这里[在看]:point_down:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK