五、kubernetes架构(K8S的架构也是master和node模式)
集群里至少需要有一个master节点,即就是主节点。node节点可以多个。
若是多个master节点,worker节点和master的apiserverr进行交互时,就需要通过LB(load banlance)
1、示意图(一个master、两个worker节点)
1.1此处红色圈住的是master节点
1.2后面的是两个worker节点
网盘的集群一个master两个worker
2、组件
2.1、master组件:apiserver、schedule、contonrollermanager
1)master节点的作用
控制整个集群、负责整个集群的控制和管理。
可以暴露api
调度部署
对节点进行管理。
master是不建议去部署我们的应用程序的,部署应用程序会增加节点的压力,如果master节点挂了,单个看s就不可以再进行用,master节点可以打污点
2)master组件中apiserver、schedule、contonrollermanager的作用
①apiserver
集群的控制中枢,整个K8S的操作都是要经过apiserver,即就是资源操作的入口。也是资源操作唯一的入口。
②contonrollermanager
一个控制器,会通过apiserver提供的接口去实时监控集群所有资源的状态。会保证资源达到期望值
③schedule调度器
通过apiserver提供的接口,和这个apiserver进行通信。如果监听到有创建资源的信息,通过kubectl创建发送资源的命令,监听到创建资源的信息后,会检索所有要求pod的work节点,通过调度算法去选择节点,最后将资源绑在目标的节点上。
关于master至少要三个节点,这样才可以实现高可用。如果一个挂了,整个k8s都没法用了。
2.2、worcker节点组件(即就是node节点):主要就是kubelet、kube-proxy
1)kubelet作用
两个woker节点,上面一个,下面一个
kubelet监听节点上的pod的状态,定期去调用apiserver暴露的接口,上报节点和pod节点的状态上报到aiserver。也可以通过apisertver监听到pod相关信息,监听到资源不满足期望,会告诉给apiserver,kubelet就获取到了这个信息,要启动pod的节点,会去调用docker提供的接口创建pod。创建成功后,会把信息上传到给apiserver,apsserver每次会把信息放到etcd中,edc是键值数据库。etcd的也是多个,work节点上另外一个就是kube-proxy,做负载均衡,每个worker上都有。
2)kube-proxy(提供网络代理、负载均衡)
3)calico
kubetcl get po -n kube-system -owide
获取pod,通过 -n指定命名空间、kube-system系统命名空间、-owide展示扩展信息
上面有calico,网络插件,功能就是给每个pod提供IP,并且将每一个node当作路由器。
4)coredns
解决服务发现问题,服务之间,访问的话都是通过serversice进行调用,sevice解析ip地址就是coredns进行解析。
这里也可以看coredns的service
kubetcl get svnc -n kube-system
kube-dns默认是k8s serverice网段的第10个
每一个节点还会去安装docker,docker是容器引擎,主要就是负责对本机上容器的一个创建拉取镜像。
这些pod都在系统空间下
meterics-server采集数据的。可以通过kebutcl top po -n
,默认命名空间下密钥创建pod。此时看到的资源都指定了是kubetcl命名空间下的
通过命令可以看到每个pod的cpu、内存、的消耗。
cpu的m是豪赫。1000mh的话是等于1h
3、etcd
etcd生生产环境上一定是集群
etcd在redis也看到过,是在键值数据库里,都是键值数据库
关于etc也是部署三个以上的基数节点,而且是单独部署,不要和master部署,最好使用ssd的硬盘,不然会导致集群比较慢,apisever会频繁的和etcd做交互,把收集到的信息次持久化到etcd中。