【K8S 根本概念】Kubernets的架构和焦点概念及集群搭建
一、Kubernets1.作用:用于自动部署扩展以及管理容器化部署的应用步伐,半开源,k8s的底层是基于谷歌go语言开发的,负责自动化运维管理多个容器化的应用的集群,容器编排框架的工具。现在使用的版本1.18-1.24,最主流的版本为1.20。
2.k8s的使用场景,为什么要有k8s:可以满足多节点部署,不再是单机部署;可以自动完成更新和部署;跨节点容器之间的通信问题;有自我修复机制,使得整个容器集群可以在用户的渴望状态下运行。
3.k8s特点:
自我修复:在节点故障时或者容器启动失败,节点故障时会自动把该节点上的容器重新部署到其它节点;容器启动失败时:k8s会自动的启动容器,一般会启动3次,如果3次启动失败就会认为服务不可用;在容器启动时,也会有检测机制,检测容器启动是否正常,确保集群内部的服务能够正常工作。
弹性伸缩:在一个容器占用机器的资源比较高时,k8s会自动的增加容器数量,在资源占用下降的时间会自动开释容器的数量;以最小的本钱运行服务。
自动发布:也叫滚动发布模式、默认模式;k8s在更新时不是一次性更新所有,而是更新一部门,然后再更新剩余的部门,如果有问题可以随时回滚。
服务发现和负载均衡:多个容器有一个同一的访问入口,内部所在和同一的对外所在,自动负载均衡所有管理的容器,无需考虑容器的IP所在。
存储编排:支持外挂存储,内部挂载就是内部存储卷;外部挂载,本地存储,也是可以公有云,NFS、ceph都可以支持。
集中化配置和密钥管理:k8s的所有配置可以加密的形式保存在集群信息中,进步集群的安全性。
任务的批量处置惩罚
二、k8s架构和焦点组件:
1.架构:主从架构,mater-slave模式就是我们所有的操作、管理、运维都是在主节点完成;从节点在k8s架构中叫node节点,也叫工作节点也就是负载工作的节点
2.组件:主节点
1》kube-apiserver:这是整个集群的大脑,每个组件之间的资源请求和调用操作都是通过apiserver完成的,通过api接口发送到各个组件。所有的资源对象的增编削查和监听也都是由apiserver来完成的,处置惩罚之后交给etcd进行存储。
api接口和端口的区别:
api接口:内部的组件和组件之间通信的接口,也就是步伐和步伐之间,内部调用方法的接口
端口:应用和应用之间,客户端和客户端之间的通信。
2》etcd:k8s内部的存储服务,也是分布式的键值存储体系,存储了k8s集群的配置和用户配置,以及集群内部服务的信息;只有apiserver可以和etcd通信,只有它有读写权限,其它组件要想往etcd存储信息或者读取信息必须通过APIserver;etcd分布式必须是奇数台,要么是一台,要么是三台;etcd说白了就是k8s的数据库。
3》kube-controller-manager:运行管理控制器;k8s集群当中通例任务的后台的线程,是k8s集群当中所有资源对象自动化控制的中心;在k8s集群当中,一个资源对应一个控制器,controller-manager就是管理这些控制器的。
node controller节点控制器,节点出现故障时发现和相应
replication controller副本控制器,我们创建资源对象时可以选择创建的个数(容器数量),保证资源对象声明的副本个创建的数量保持一致;
endpoints controller:端点控制器,指的就是service对应的容器,service来匹配对应的容器,监听容器的变化,端点就是袒暴露来对外访问的。
resourcequota controller:资源配额控制器,确保创建的资源对象不会超过设定体系资源量。
namespace controller:项目上进行区分,每一个命名空间都是独立的,namespace是用来管理命名空间的生命周期。
4》kube-scheduler:根据调理算法,为容器选择一个合适的node节点。node节点的资源越富裕,负载越小的node节点部署容器的排名就越高。
3.node节点组件:
1》kubelet:主节点在node节点的监控器与master节点通信,定时向apiserver报告服务在node节点上的运行情况,担当来自master的调解措施。kubelet负载节点上容器的生命周期。也就是master指令传给kubelet,kubelet完成之后传给apiserver,apiserver把node节点更新的信息保存到etcd当中。
2》kube-proxy:在每个node节点上实现容器的网络署理,是service的具体载体,负责网络规划和四层负载均衡工作原理ip+端口,通过iptables和ipvs实现服务的映射访问;apiserver通过监控kube-proxy来完成对容器的更新和端点的维护,把变化的效果保存到etcd。内部服务的负载均衡是四层署理,实现内部容器的负载均衡,k8s的每个节点都有kube-proxy。内部的IP所在:由flanner及calico这两个插件提供内部容器的IP所在。
3》docker:整个集群的最底层。
https://i-blog.csdnimg.cn/direct/6fa8adff12174247a1a92f3d9c3cce82.png
三、k8s的焦点概念:
pod:k8s内里的最小单元,一个pod就是一个正在运行的进程,pod的内里包罗着容器,可以是一个容器,也可以是多个容器,探针、调理算法、标签也在pod内;部署在同一pod当中的容器,共享网络、存储和计算资源。差别pod之间只能通过集群分配的IP所在进行通信。
Lable:标签,是k8s的特色管理方式,对资源对象进行分类,通过标签把pod--service---资源对象-控制器组件进行管理。
service:在集群当中每个pod都会设定一个IP所在,pod的消散会导致IP所在也消散,service就是来办理这个问题的焦点概念,service----网关。service用于集群的内部访问,service是四层负载均衡,只能是IP+端口
ingress:是整个k8s集群的外部通信,ingress是七层转发,IP+域名
namespace:是一种资源隔离上的方式,逻辑上的隔离,项目越来越多,集群越来越大,通过命名空间把资源分配到各个命名空间,每个命名空间之间资源不共享,使用的是分配的资源,命名空间在集群当中是唯一的,名字不能重复;default默认命名空间,不做任何特别声明,所有的资源都在默认空间;kube-system体系应用的命名空间;查询特定的资源,肯定要加上命名空间。
四、k8s部署:三台
master:192.168.127.44 etcd
node 1:192.168.127.55 docker kubeadm kubelet flannel
node 2: 192.168.127.66
1.关闭防火墙及安全机制
https://i-blog.csdnimg.cn/direct/bbbb76d539ef42219c29728953575f43.png
清空iptables策略
https://i-blog.csdnimg.cn/direct/2fb91520a079485fab4970a46fe7fd40.png
关闭swap交换分区
https://i-blog.csdnimg.cn/direct/4748e76696254d1ea4e58d2cfb1bfbc9.png
加载ipvs模块
https://i-blog.csdnimg.cn/direct/760e7f61e4dd441fba4d6d70cf63ed3d.png
查看时间是否同步:不一致必须做时间同步
https://i-blog.csdnimg.cn/direct/b7b94b8011544dbd9ac8dce2bc25cb1f.png
三台主机改名
https://i-blog.csdnimg.cn/direct/7a93fa2936ac49bc9f1d08682f0d7523.png
https://i-blog.csdnimg.cn/direct/dd0cf6751a1b4ed195d4b2b884fc67ac.png
https://i-blog.csdnimg.cn/direct/c8c5cb45a2f84c5281f5ea614b748653.png
同步操作 su刷新主机名
打开/etc/hosts进行ip和主机名进行映射
https://i-blog.csdnimg.cn/direct/6ede73d323c044c6929527687d3854e5.png
https://i-blog.csdnimg.cn/direct/252e09703b7e4d348c26b94247653169.png
调解内核参数:
https://i-blog.csdnimg.cn/direct/cf826e87a5b4469c80047dca78ccc03f.png
https://i-blog.csdnimg.cn/direct/778ff69ea893447bac8a6434071a896a.png
安装docker
https://i-blog.csdnimg.cn/direct/1afb13adc52c4a7a852275f36a0a1ccd.png
导入阿里云yum源所在
https://i-blog.csdnimg.cn/direct/919cbe948bf346a28af5a5235cbd5e9d.png
安装docker
https://i-blog.csdnimg.cn/direct/5e28ce68a1724d7a9d7cd80d3724f8ae.png
安装docker节点
https://i-blog.csdnimg.cn/direct/1a69553b3a10493cad4432e984b9c95f.png
https://i-blog.csdnimg.cn/direct/e542729419ba45c0a99c3a84b9a62a39.png
https://i-blog.csdnimg.cn/direct/73a53ec8747b416fade11ddccad01c9f.png
拉镜像
https://i-blog.csdnimg.cn/direct/d45d711fc86f4f91afeacc9af53df6c1.png
https://i-blog.csdnimg.cn/direct/95be01c029d942a98a309e92e16e0d75.png
安装kubelet
https://i-blog.csdnimg.cn/direct/d5cea76f7d9d455da65506401b2fe15a.png
https://i-blog.csdnimg.cn/direct/4c8e66e9c152436fa03e3f4b721302d4.png
设置开机自启
https://i-blog.csdnimg.cn/direct/44323e16f66d4329a4b2f9b36d59a3c8.png
kubelet初始化当中需要的镜像
pause镜像:特别容器,整个容器的作用就是保持pod当中其它的容器的运行;我们pod起首是拉取镜像,pod当中会有一个pause,pause会在每个pod中创建一个网络命名空间;pod的生命周期结束,pause容器也会退出,开释该pod的网络命名空间。
https://i-blog.csdnimg.cn/direct/bb5ca4b1e58e476d8d00c20959015867.png
取消同步:master对adim初始化
https://i-blog.csdnimg.cn/direct/318d6af978ae4b188c5f82b74fa043f2.png
https://i-blog.csdnimg.cn/direct/1c5c2aa37d244c7e815b4e906246b682.png
在node1、2节点上添加密钥token验证 加入集群
https://i-blog.csdnimg.cn/direct/4031c25e6eaf49d58d94c581d0f8bb46.png
设置节点的kubelet
https://i-blog.csdnimg.cn/direct/6eec75cf18a4424b8343760afb0186e8.png
https://i-blog.csdnimg.cn/direct/b725c8c511e6462eacd870cae9249b19.png
编辑yum文件、查看node节点状态 https://i-blog.csdnimg.cn/direct/8d6aea8453b54ddb9b77ef6de21b6198.png
https://i-blog.csdnimg.cn/direct/25b1509e20a74acba94d009583803441.png
更改yaml文件的IP所在,查抄集群的状态(kubectl get cs)
https://i-blog.csdnimg.cn/direct/7fa6c0f5d0f24f49b253d4d677b88948.png
https://i-blog.csdnimg.cn/direct/a7d9f9ce3f44499a88e0fcbd04e20ab6.png
https://i-blog.csdnimg.cn/direct/2a7f6f5655204f378949f8e7dc862e3c.png
五、pod
1.pod内部的网络通信:
pod内部容器通信:pod创建完之后集群会分配pod一个全局的唯一ip所在,所有pod内的容器共享这个IP所在;pod内部容器可以用本地通信+端口形式相互通信。
2.同一个node节点上的pod通信:
同一个节点上的pod和docker的通信是一样的,都是由doker0的网桥进行通信。
3.差别节点上pod之间通信
想办法通过主机的物理网卡IP所在进行通信,前提podIP所在是不能重复的,pod的IP和node节点的IP进行关联,以是有了CNI网络插件。pod的IP所在进行封装,通过node节点做为路由,转发到其它的node节点,其它的node节点收到数据包之后解包,把数据包转发到指定的pod
六、k8s的网络类型:
1.CNI网络插件: 分为Flannel 和calico
CNI:是一个标准接口,用于容器在运行时调用网络插件,配置容器的网络;负责设置容器的网络命名空间,IP所在,路由等网络参数
2.Flannel插件:让集群内差别节点创建的pod都有一个集群内部唯一的IP所在
flannel:是一种overlay网络,overlay是一种网络虚拟化技能,在底层的物理网络底子之上在创建一个逻辑虚拟的网络层,通过虚拟的网络层实现跨节点的pod之间的通信。
flannel数据转发的方式:udp、host-gw、vxlan
udp:基于应用层转发,配置简单,性能最差,
host-gw:性能最好,但是配置繁琐,一般不用
vxlan:主流模式,基于内核转发
(vlan:通过标识来实现广播域的分别,差别的vlan之间可以通信2--4095)
vxlan:通过vni标识数据中进行广域网的分别,通过flannel虚拟的三层网络层再搭建一个虚拟的二层的数据链路层网络,类似于三层交换机。
vxlan工作模式:flannel.1是ens33虚拟出来的虚拟网卡
mac所在是由arp广播进行确认
https://i-blog.csdnimg.cn/direct/bc367e2f911444bd8ac3dc01f56da472.png
3.calico网络:路由维护,路由转发
https://i-blog.csdnimg.cn/direct/48116ffa0515441aa6515ec2e145a898.png
https://i-blog.csdnimg.cn/direct/dae53d2c555347dda34e82007fcc5090.png
flanner和calico的区别:
flanner插件:默认的所在是10.244.0.0/16
flanner三种模式:UDP\VXLAN\HOST-GW
flanner的功能简单,不具备复杂的网络策略的配置能力,小集群或者简单的网络首选
calico:BGP直接路由、路由维护、路由转发
默认网段:192.168.0.0/16
calico是一个可以对网络进行管理的插件,具备配置复杂网络配置的能力,自己的配置比较复杂,对开发职员,运维职员要求比较高。需要复杂配置的需要calico。
基于Flannel 插件创建虚拟网卡主节点
https://i-blog.csdnimg.cn/direct/339839da7deb4c1db16c15e8431b49ca.png
https://i-blog.csdnimg.cn/direct/f894baf5ef5440e1ba4e69850c4715a1.png
从节点:先拉包再解包
https://i-blog.csdnimg.cn/direct/e18a7554489045aa9b7677cf9cebdabf.png
主节点:
https://i-blog.csdnimg.cn/direct/bc3775b3df9f44a2a60e203e1721d7f0.png
https://i-blog.csdnimg.cn/direct/21d7df73c6b54dd4aaf57c8a235938bb.png
附加自动补全命令:source <(kubectl completion bash)
https://i-blog.csdnimg.cn/direct/c8582ec682df4c40bd515782911871a7.png
https://i-blog.csdnimg.cn/direct/de340cfde00b4e5fb65b6b29a5d67ef8.png
附加k8s证书签发10年方法:使用update-kubeadm-cert.sh脚本编辑
https://i-blog.csdnimg.cn/direct/d2d3dd69d62647828777cb78a1499a8c.png
https://i-blog.csdnimg.cn/direct/107d4ee2c2a443369beceac4a05db382.png
七、口试题:
flanner网络你们用的是啥:vxlan,其中flanner.1是由ens33虚拟出来的虚拟网卡,虚拟网卡办理了两个问题,起首是给集群中的pod分配一个全局唯一的IP所在,使其与差别节点上的pod进行通信及与宿主机也可以通信。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]