k8s基础

一、K8S中的组件及作用

1、Master节点:整个集群的控制中枢

(1)、kube-APIserver:集群的控制中枢,各个模块之间信息交互都需要经过kube-APIserver同时它也是集群管理、资源配置、整个集群安全机制的入口。

(2)、Controller-Manager:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。

(3)、Scheduler:集群的调度中心,它会根据指定的一系列条件,选择一个或一批最佳的节点,然后部署我们的Pod。

(4)、Etcd:键值数据库,报错一些集群的信息,一般生产环境中建议部署三个以上节点(奇数个)

2、Node:工作节点 (worker节点、minion节点)

(1)、Kubelet:负责监听节点上pod状态,同时负责上报节点和节点上面pod状态,负责与master节点通信,并管理节点上面的pod

(2)、Kube-proxy:负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上

查看kube-proxy工作模式

k8s基础_第1张图片

 我这里的规则是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

k8s基础_第2张图片

CoreDNS:用于kubernetes集群内部service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。

  (3)Docker:容器引擎,负载对容器的管理。

(4) Pod 是Kubernetes最基本的操作单元。它是由一组、一个或多个容器组成,

每个pod还包含了一个pause容器,pause容器是pod的父容器,主要负责僵尸进程的回收管理,通过pause容器可以使同一个pod里面的多个容器共享存储、网络、PID、IPC等。

k8s基础_第3张图片

二、面试题

1、创建pod过程

由client向master上的API Sever请求,然后将pod存储在etcd上,存储信息返回至API Server

由API Server告知Schedule为其分配node,在分配完node之后将结果返回API Server,并将结果存储在etcd上

node节点访问API Server然后读取etcd拿到分配给当前节点的pod,然后响应给docker创建容器。

k8s基础_第4张图片

 2、k8s删除pod过程

  (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从而完成删除操作
 

3、pod的状态status

(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,那么就代表这个容器已经完成启动,并且程序已经可以接受流量的状态。

你可能感兴趣的:(java,运维,数据库)