(1)、kube-APIserver:集群的控制中枢,各个模块之间信息交互都需要经过kube-APIserver同时它也是集群管理、资源配置、整个集群安全机制的入口。
(2)、Controller-Manager:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。
(3)、Scheduler:集群的调度中心,它会根据指定的一系列条件,选择一个或一批最佳的节点,然后部署我们的Pod。
(4)、Etcd:键值数据库,报错一些集群的信息,一般生产环境中建议部署三个以上节点(奇数个)
(1)、Kubelet:负责监听节点上pod状态,同时负责上报节点和节点上面pod状态,负责与master节点通信,并管理节点上面的pod
(2)、Kube-proxy:负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上
查看kube-proxy工作模式
我这里的规则是iptables一般使用都是ipvs规则
ipvs:监听master 节点增加和删除service以及endpoint的消息,调用Netlink接口创建相应的ipvs规则,通过ipvs规则将流量装法至相应的pod上。
iptables:监听master 节点增加和删除service以及endpoint的消息,对于每一个service,他都会创建一个iptables规则,将servie的clusterIP代理后端对应的Pod。
Calico:符合CNI标准的网络插件,主要功能是给每个pod生成一个唯一的ip地址,并且把每个节点当作一个路由器。 Cilium(新的网络插件)支持eBPF
CoreDNS:用于kubernetes集群内部service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。
(3)Docker:容器引擎,负载对容器的管理。
(4) Pod 是Kubernetes最基本的操作单元。它是由一组、一个或多个容器组成,
每个pod还包含了一个pause容器,pause容器是pod的父容器,主要负责僵尸进程的回收管理,通过pause容器可以使同一个pod里面的多个容器共享存储、网络、PID、IPC等。
由client向master上的API Sever请求,然后将pod存储在etcd上,存储信息返回至API Server
由API Server告知Schedule为其分配node,在分配完node之后将结果返回API Server,并将结果存储在etcd上
node节点访问API Server然后读取etcd拿到分配给当前节点的pod,然后响应给docker创建容器。
(1)用户发出删除pod命令,此时pod被视为死亡状态,将pod标记为“Terminating”状态(这时候pod会有一个宽限时间30秒)
(2)kubelet监控到pod对象为“Terminating”状态的同时启动pod关闭过程
(3)endpoints控制器监控到pod对象关闭,将pod与service匹配的endpoints列表中删除,pod内对象的容器收到TERM信号
(4)当一切准备完毕后,kubelet请求api server 将此pod资源宽限期设置为0从而完成删除操作
(1)Pending挂起:pod没有调度到节点上,可能还在下载镜像,容器还未启动
(2)Running运行中:pod已经绑定到一个node上,pod中的容器已经创建,有一个或者个容器已经运行
(3)Succeeded成功:Pod中所有的容器都被成功终止,并且不会被重启。
(4)Failed失败:Pod中的所有容器都已经终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止
(5)Unknown未知:因为某些原因无法取得Pod状态,通常是因为与Pod所在node失去通信造成失联。
4、pod探针有哪几种有什么作用?
(1)startupProbe:k8s1.16版本新加的探针方式,用于判断容器内应用程序是否已经启动。如果配置了startupProbe,就会禁止其他的探测,直到它成功为止,成功后将不在进行探测。
(2) LivenessProbe:用于探测容器是否运行,如果探测失败kubelet会根据配置的重启策略进行相应的处理,若没有配置该探针,默认就是success
(3)ReadinessProbe:一般用于探测容器内的程序是否健康,它返回值如果为success,那么就代表这个容器已经完成启动,并且程序已经可以接受流量的状态。