栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

K8S集群学习记录03

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

K8S集群学习记录03

文章目录

K8S集群学习记录03

Pod概念

pod类型 控制器类型:

为无状态服务设计的控制器:有状态服务的控制器自定义控制器 网络通讯方式

Flannel

K8S集群学习记录03 Pod概念

只要有pod,pod中的pause容器就会被创建启动;pause容器是pod的根容器,1.初始化网络栈、挂载网络卷,即pod内部的其他容器共用pause容器的网络栈和存储卷。2.启动一系列的应用容器,应用容器数量在一个以上,即需要启动一个主容器

在同一个pod中,容器之间的端口不能冲突

服务的分类:

有状态服务:例如:mysql、数据库类型无状态服务:例如:http、web服务器、ftp服务器中心化服务:去中心化服务: pod类型

创建模式

自主式pod(自己管理自己,出现问题自生自灭)控制器管理pod(控制器管理,pod出问题控制器会处理) 控制器类型: 为无状态服务设计的控制器:

通用型:(目标:要求持续运行)

ReplicationController(RC):用来确保容器应用的副本数始终保持在用户定义的副本数(期望),即如果有容器异常退出,会自动创建新的pod来代替;而如果异常多出来的容器也会被回收。需要注意副本数(期望)的值只是一个范围,具体能够达到多少副本的数量与资源相挂钩。 (在新版本K8S中建议使用RS来代替RC)

ReplicaSet(RS):与RC没有本质的不同,并且RS支持集合式的selector。RS虽好,但不支持滚动更新和回滚。

虽然RS可以单独使用,但一般还是建议使用Deployment来管理RS,这样就无需担心跟其他机制的不兼容问题。

Deployment(Deploy):支持滚动更新以及回滚。

deployment的底层原理:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q50Eygps-1645975384183)(/Users/carry/Desktop/deployment的底层原理 .png)]

特殊场景:

批处理任务:(目标:成功退出,返回码为0)

Job Cron Job:

Job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。

Corn Job:管理基于时间,即 在给定时间点只运行一次;周期性的在给定时间点运行。

job 与 Corn job 主要区别:job保障任务一次或多次的成功;cron job在轮巡计划下定期执行job,实现批处理任务的运行。

每个节点有且只有一个任务:

daemonset:确保全部(或者一些)Node上运行一个pod的副本。当有Node加入集群时,也会为其增加一个pod;当有Node从集群移除,这些pod也会被回收。删除daemonSet将会删除他创建的所有pod。

使用daemonSet的典型用法:

运行集群存储daemon,例如在每个Node上运行glusterd、ceph在每个Node上运行日志收集daemon,例如fluentd、logstash在每个Node上运行监控daemon,例如:prometheus Node Exporter

自动扩容缩

HPA:仅适用于deployment和RS之上,在V1版本中仅支持根据pod的CPU利用率扩容,在V1 alpha版本中支持根据内存和用户自定义的metric扩容。

说人话就是:根据pod资源使用情况,调整副本数量,依赖于RC、RS、Deployment之上。

有状态服务的控制器

StatefulSet:解决有状态服务的问题(对应RS、Deployment是为无状态服务而设计),应用场景包括:

稳定的持久化存储:即pod重新调度后还是能访问到相同的持久化数据,基于PVC实现;

(每一个Pod都有自己稳定的存储)

稳定的网络标志:即pod重新调度后,其podName和HostName不变,基于Headless Server来实现;

( 每一个控件启动的pod都有唯一的访问地址,访问地址是不变的)

有序部署、有序扩容:即pod是有顺序的 ,在部署或扩容的时候要依据定义的顺序依次进行(即从0到N-1,在下一个pod运行之前的所有之前pod必须都是running或ready状态),基于init containers实现

(控制器的启动顺序有顺序,第一个不启动成功、第二个不会启动。)

有序收缩、有序删除(从N-1到0)

自定义控制器

通用型控制器无法满足时,需要自行通过官方的开发工具包进行kubernetes开发。

网络通讯方式

k8s的网络模型假定了所有pod都在一个可以直接连通的扁平的网络空间中,这在GCE(google computer Engine)里面是现成的网络模型,k8s已经假定这个网络存在了。

而在私有云里搭建k8s集群,需要自行实现这个网络假设,将不同节点上的Docker容器之间互相访问先打通,然后运行k8s。

即:没有扁平化的网络,k8s部署好后是未就绪的。

Flannel

Flannel是CoreOS团队针对k8s设计的一个网络规划服务,简单来书,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟网络IP地址(flannel与etcd的联动实现)。而且它还能在这些IP地址之间建立一个覆盖网络,通过覆盖网络将数据包原封不动的传递到目标容器内。


flannel底层原理:

简单来说,10.1.15.2想要发送数据包到10.1.20.3,

    发送源(15.2)的数据包(包含源地址、目标地址)通过docker查询目标地址是否处于同一网段,不处于同一网段,则需要网关进行传递,而所有通过doker网关向外界通讯的报文都会被flannel0捕获;Flannel0管理Flanneld(flanneld实现了flannel0的接口),flanneld进程获取到数据包后,有且只有通过物理网络将报文进行传输,所以Flanneld通过查询etcd,匹配目标地址(10.1.20.3)所在网段对应的物理IP(192.169.66.12);Flanneld获取到目标地址所在网段的物理IP(192.169.66.12)后,将数据包进行二次封装,设定源地址为当前物理ip(192.168.66.11)、目标地址为通过查询得到的物理ip(192.169.66.12)、内容是需要传递的数据包,就如同一个快递被另一个快递包裹进行传递一样。通过物理网络将二次封装的数据包进行UDP传递(UDP网络通讯io有保障,但是在网络设施不佳、传输路径较长时UDP的传输并不稳定,但在当前环境下,缺点被掩盖(同机房));二次封装的数据包到达物理目标地址(192.169.66.12)后,flanneld将二次封装的数据包拆封、将内部数据包传输到docker环境中广播,目标地址(10.1.20.3)进行接收。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/747041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号