k8s基本组件及作用
k8s主要由master节点和node节点构成
master节点负责管理集群(管理者),node几点是容器应用真正运行的地方(工作者)
master节点组件:
1.kube-api-server:集群管理的统一访问入口;是其他组件之间的数据交互和通信枢纽,其他组件之间不会直接通信,其他组件的对资源对象的曾删改查和监听操作都是交由api-server处理后,api-server再交给etcd数据库做持久化存储,只有api-server才能直接操作etcd数据库,其他组件都是通过api-server间接的读取和写入到etcd。
2.kube-controller-manage:k8s中各种控制器的管理者,是集群内部的管理控制中心,也是k8s自动化的核心;controller-manage内部包含replication controller、node controller、deployment controller和endpoint controller等各种资源对象的控制器,每种控制器都负责一种特定的资源控制流程,而controller-manage是这些controller的核心管理者。
3.kube-scheduler:负责集群资源调度,将待调度的pod通过一系列复杂的调度算法计算出最合适的node节点,然后将pod绑定到目标节点上。shcheduler会根据pod的信息,全部节点信息列表,过滤掉不符合要求的节点,过滤出一批候选节点,然后给候选节点打分,选出分最高的就是最佳节点,scheduler就会把目标pod安置到该节点。
4.Etcd:分布式键值对存储数据库,主要用于保存k8s集群状态数据;etcd可以是单个也可以是多个,多个就是etcd数据库集群,etcd通常部署奇数个实例;etcd本质上可以不与master节点部署在一起,只要master节点能通过网络连接etcd数据库即可。
node节点组件:
1.kubelet:连接master和各node之间的桥梁,负责维护pod和容器的生命周期,当监听到master下发到本节点的任务时,比如创建、更新、终止pod等任务,kubelet即通过控制docker来创建、更新和销毁容器;每个kubelet都会在api-server上注册本节点自身的信息,用于定期向master汇报本几点资源的使用情况。
2.kube-porxy:在node节点上实现pod网络代理,维护网络规则和四层负载均衡,kube-proxy会监听api-server而从中获取service和endpoin的变化情况,创建并维护路由规则以提供服务IP和负载均衡功能。简单理解此进程是service的透明代理兼负载均衡器,核心功能是将到某个service的访问请求转发到后端的多个pod实例上。
3.container-runtime:容器运行时环境,即运行容器所需要的一系列程序。
Pod
pod是什么:
pod是k8s中可以创建和管理的最小单元,也是基本单元,是资源对象模型中由用户创建或部署的最小资源对象模型,其他资源对象都是用来支撑pod对象功能的。
pod的原理:
pod的特点:
pod的重启策略:
pod的重启策略是针对pod内所有容器的重启策略,不是重启pod,可通过restartPolicy字段配置pod重启容器的策略。
· Always:容器终止推出后,总是重启容器
· OnFailure:容器异常退出,重启容器
· Never:容器终止退出,从不重启容器
pod的镜像拉取策略:
pod的镜像拉去策略可通过imagePullPolicy字段配置
· ifNotPresent:镜像在node节点宿主机上不存在时拉取
· Always:每次创建pod都会在镜像仓库拉取一次镜像
· Never:永远不会主动拉取镜像,仅使用本地镜像,需要你手动拉取镜像到node节点,如果node节点不存在镜像则pod启动失败
pod的生命周期(状态):
· Pending(挂起):API server已经创建pod,但是pod中还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程
· Running(运行中):pod中所有容器都已经创建,且至少有一个容器处于运行状态、正在启动(包括正在重启)状态
· Succeed(成功):pod中所有容器均已退出,且不会再重启
· Failed(失败):pod内所有容器均已退出,且至少有一个容器为推出失败状态
· Unknown(未知):由于某种原因apiserver无法获取该pod的状态,可能由于网络同行问题导致