K8s 超详细总结!

开发者全社区

共 4509字,需浏览 10分钟

 ·

2021-12-18 22:28

作者:stackpush

来源:blog.csdn.net/huakai_sun/article/details/82378856
上一篇:SQL查找是否"存在",别再count了!

一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿,K8s有亿:亿级日服务人次。

一个目标:容器操作


Kubernetes(k8s)是自动化容器操作的开源平台。这些容器操作包括:部署、调度和节点集群间扩展。

具体功能:

调度:容器在哪个机器上运行。

组成:

下面是K8s的架构拓扑图:


两地三中心


两地三中心包括本地生产中心、本地灾备中心、异地灾备中心。

两地三中心要解决的一个重要问题就是数据一致性问题。k8s使用etcd组件作为一个高可用、强一致性的服务发现存储仓库。用于配置共享和服务发现。搜索公众号互联网架构师复“2T”,送你一份惊喜礼包
它作为一个受到Zookeeper和doozer启发而催生的项目。除了拥有他们的所有功能之外,还拥有以下4个特点:


四层服务发现


先一张图解释一下网络七层协议:

k8s提供了两种方式进行服务发现:
环境变量:当创建一个Pod的时候,kubelet会在该Pod中注入集群内所有Service的相关环境变量。需要注意的是,要想一个Pod中注入某个Service的环境变量,则必须Service要先比该Pod创建。这一点,几乎使得这种方式进行服务发现不可用。搜索公众号互联网架构师复“2T”,送你一份惊喜礼包
比如,一个ServiceName为redis-master的Service,对应的ClusterIP:Port为10.0.0.11:6379,则对应的环境变量为:

DNS:可以通过cluster add-on的方式轻松的创建KubeDNS来对集群内的Service进行服务发现。

以上两种方式,一个是基于tcp,众所周知,DNS是基于UDP的,它们都是建立在四层协议之上。

五种Pod共享资源


Pod是K8s最基本的操作单元,包含一个或多个紧密相关的容器,一个Pod可以被一个容器化的环境看作应用层的“逻辑宿主机”;一个Pod中的多个容器应用通常是紧密耦合的,Pod在Node上被创建、启动或者销毁;每个Pod里运行着一个特殊的被称之为Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。

同一个Pod里的容器之间仅需通过localhost就能互相通信。
一个Pod中的应用容器共享五种资源:
Pod的生命周期通过Replication Controller来管理;通过模板进行定义,然后分配到一个Node上运行,在Pod所包含容器运行结束后,Pod结束。
Kubernetes为Pod设计了一套独特的网络配置,包括:为每个Pod分配一个IP地址,使用Pod名作为荣期间通信的主机名等。


六个CNI常用插件


CNI(Container Network Interface)容器网络接口,是Linux容器网络配置的一组标准和库,用户需要根据这些标准和库来开发自己的容器网络插件。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。

搜索公众号互联网架构师后台回复“2T”,获取一份惊喜礼包。
下面用一张图表示六个CNI常用插件:



七层负载均衡


提负载均衡就不得不先提服务器之间的通信。
相关阅读:2T架构师学习资料干货分享

IDC(Internet Data Center),也可称 数据中心、机房,用来放置服务器。IDC网络是服务器间通信的桥梁。

上图里画了很多网络设备,它们都是干啥用的呢?
路由器、交换机、MGW/NAT都是网络设备,按照性能、内外网划分不同的角色。
先说说各层负载均衡:
这里用一张图来说说四层和七层负载均衡的区别:

上面四层服务发现讲的主要是k8s原生的kube-proxy方式。K8s关于服务的暴露主要是通过NodePort方式,通过绑定minion主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式有下面的缺陷:
理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然后根据域名或者服务名向后面的Service ip转发,Nginx很好的解决了这个需求,但问题是如果有的心得服务加入,如何去修改Nginx的配置,并且加载这些配置?Kubernetes给出的方案就是Ingress。这是一个基于7层的方案。


八种隔离维度




K8s集群调度这边需要对上面从上到下从粗粒度到细粒度的隔离做相应的调度策略。


九个网络模型原则


K8s网络模型要符合4个基础原则,3个网络要求原则,1个架构原则,1个IP原则。

每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问。搜索公众号互联网架构师复“2T”,送你一份惊喜礼包
K8s中的Pod的IP是最小粒度IP。同一个Pod内所有的容器共享一个网络堆栈,该模型称为IP-per-Pod模型。
IP-per-Pod模型从端口分配、域名解析、服务发现、负载均衡、应用配置等角度看,Pod可以看做是一台独立的VM或物理机。

要符合下面的架构:

由上图架构引申出来IP概念从集群外部到集群内部



十类IP地址


大家都知道IP地址分为ABCDE类,另外还有5类特殊用途的IP。

第一类

A 类:1.0.0.0-1226.255.255.255,默认子网掩码/8,即255.0.0.0
B 类:128.0.0.0-191.255.255.255,默认子网掩码/16,即255.255.0.0
C 类:192.0.0.0-223.255.255.255,默认子网掩码/24,即255.255.255.0
D 类:224.0.0.0-239.255.255.255,一般用于组播。
E 类:240.0.0.0-255.255.255.255(其中255.255.255.255为全网广播地址)。E 类地址一般用于研究用途。

第二类

0.0.0.0
严格来说,0.0.0.0 已经不是一个真正意义上的 IP 地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的不清楚是指在本机的路由表里没有特定条目指明如何到达。作为缺省路由。
127.0.0.1 本机地址。

第三类

224.0.0.1 组播地址。
如果你的主机开启了IRDPinternet路由发现,使用组播功能),那么你的主机路由表中应该有这样一条路由。

第四类

169.254.x.x
使用了 DHCP 功能自动获取了 IP 的主机,DHCP 服务器发生故障,或响应时间太长而超出了一个系统规定的时间,系统会为你分配这样一个 IP,代表网络不能正常运行。

第五类

10.xxx、172.16.x.x~172.31.x.x、192.168.x.x 私有地址。
大量用于企业内部。保留这样的地址是为了避免亦或是哪个接入公网时引起地址混乱。


1、2T架构师学习资料干货分享

2、985副教授工资曝光

3、心态崩了!税前2万4,到手1万4,年终奖扣税方式1月1日起施行~

4、雷军做程序员时写的博客,很强大!

5、人脸识别的时候,一定要穿上衣服啊!

6、清华大学:2021 元宇宙研究报告!

7、绩效被打3.25B,员工将支付宝告上了法院,判了

浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报