K8s 超详细总结!
Posted xhmj12
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s 超详细总结!相关的知识,希望对你有一定的参考价值。
作者:stackpush
来源:blog.csdn.net/huakai_sun/article/details/82378856
一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿,K8s有亿:亿级日服务人次。
一个目标:容器操作
Kubernetes(k8s)是自动化容器操作的开源平台。这些容器操作包括:部署、调度和节点集群间扩展。
具体功能:
调度:容器在哪个机器上运行。
组成:
kube-controller-manager:执行整个系统的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。
kube-scheduler:负责节点资源管理,接收来自kube-apiserver创建Pods任务,并分配到某个节点。
kubelet:运行在每个计算节点上,作为agent,接收分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。
下面是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”,获取一份惊喜礼包。
七层负载均衡
提负载均衡就不得不先提服务器之间的通信。
相关阅读:2T架构师学习资料干货分享
IDC(Internet Data Center),也可称 数据中心、机房,用来放置服务器。IDC网络是服务器间通信的桥梁。
路由器、交换机、MGW/NAT都是网络设备,按照性能、内外网划分不同的角色。
八种隔离维度
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地址分为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 组播地址。
如果你的主机开启了IRDP(internet路由发现,使用组播功能),那么你的主机路由表中应该有这样一条路由。
第四类
169.254.x.x
使用了 DHCP 功能自动获取了 IP 的主机,DHCP 服务器发生故障,或响应时间太长而超出了一个系统规定的时间,系统会为你分配这样一个 IP,代表网络不能正常运行。
10.xxx、172.16.x.x~172.31.x.x、192.168.x.x 私有地址。
大量用于企业内部。保留这样的地址是为了避免亦或是哪个接入公网时引起地址混乱。
以上是关于K8s 超详细总结!的主要内容,如果未能解决你的问题,请参考以下文章