【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

当今K8s独霸天下之时,咱们站在更高的角度,好好的看看K8s网络是以什么理念构筑的。以及一个容器集群的好保姆,是如何分别照顾 南北流量和东西流量的。

一、简单介绍下Kubernetes

略。。容器集群管理的事实标准了,不知道要打屁股。

(ps本章节可参考唐老师的《K8S前世今生》文章)

二、世界上的集群都一个样

有点标题党哈,不过我接触过的各种集群也不少,各种各样

Ø OpenStack:在一大堆物理机上面,管理(启动/停止)VM的。

Ø SGE,Slurm,PBS:在一大堆电脑集群里面,管理(启动/停止)App的。

Ø Yarn:在一大堆电脑集群里面,管理(启动/停止)大数据App的。

Ø CloudFoundry:在一大堆电脑集群里面,管理(启动/停止)容器的

Ø Kubernetes:在一大堆电脑集群里面,管理(启动/停止)容器的。

它们都有一些共同特点:

2.1 跨节点跑xx程序

【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

这个xx程序一定是首先单机可以运行的。比如OpenStack:单机上面可以用qemu启动VM,想跨节点管理VM,就引入了OpenStack。Kubernetes也一样:单机上面可以跑Docker容器;想跨节点管理容器,就得引入集群管理老大的概念。

2.2 有一个管事的老大

A)集群管理的老大,负责让手下的某个小弟干活。别管是命令式(直接下命令)的,还是申明式(发告示)的,小弟收到命令后,乖乖干活就是了。

B) 同时,这个集群管理的老大,需要有脑子,不然小弟数量多了管不好。所以它需要拿笔记一记。比如OpenStack的老大得带个Mysql数据库;Kubernetes把笔记记在了ETCD里面(不过ETCD这个本子太小,记得东西不能太大,这是另话)。

C) 不管哪种老大,都得有个军师。一个新活来到老大这里,那么多小弟,指派给谁不是干呀。这活实际分配给哪个小弟,这得军师说了算,所以每中集群软件都自己写了一套 Scheduler 算法,可谓程序员间浪费重复轮子之典型代表。

2.3 小弟上面都有一个Agent

【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

这个小弟上面的Agent,时刻向老大汇报自己的状态:活不活着,忙还是闲,方便老大派活。同时,Agent也就是那台电脑里面的地头蛇了,帮忙老大负责各种临时事物。只是大家的取名不一样:

OpenStack:取名Nova

Kubernetes:取名Kubelet

Yarn:取名NodeManager

2.4 老大怎么给小弟发号施令

一般老大都是通过:消息队列来,给小弟发号施令的,而不是亲自上门(直连)下达命令。原因么,当然是小弟可能临时出门(故障)了呗~ 直接上门可能不通,放消息队列里面就可靠多了。等小弟出差回来,还能看到老大下达的任务令。

Ø OpenStack:用 RabbitMQ 发号施令

Ø Kubernetes:用 ETCD 发号施令

Ø CloudFoundry:用 NATS 发号施令

上面这些组件都是带消息通知的功能,区别有些有名,有些没那么出名罢了。

比如我们的K8s:

【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

特别需要提一下:K8s这个老大不简单,找了个ETCD这个好帮手。这小家伙挺神,既能当笔记本记点事情(代替OpenStack中的Mysql),又能当公告牌,通知点消息(代替OpenStack中的Rabbit)。所以K8s这个容器集群管理相对OpenStack这个虚机管理不需要数据库,666~

三、K8s怎么设计容器网络的呢 3.1 南北流量

要看到K8s诞生的时候,那时是有CloudFoundry和Docker的,且都已经比较成熟。那时作为PaaS一哥的CF对容器网络的抽象:

【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现

主要考虑平台外部,怎么访问容器里面的App。而平台内部的App之间如何互相访问,几乎没有太多的设计。

由上图所示,可以看到,平台外部访问,一般都是上下画的,所以也叫做南北流量。我们这么叫,也是便于程序员之间沟通和理解。

Ps:PaaS的基本原型大致都这样:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsjdz.html