聊聊面试常问的Kubernetes概念(K8s组件和高级特性)
Kubernetes简称K8s,是一个Google开源的用作管理容器的一个平台,对容器进行管理和编排以对外提供服务,是一个负责自动化运维管理多个Docker程序的集群。
1.K8s概念
Kubernetes
简称K8s,是一个Google开源的用作管理容器的一个平台,对容器进行管理和编排以对外提供服务,是一个负责自动化运维管理多个Docker程序的集群。 K8s的核心特性有:
- 服务发现
- 服务的负载均衡调度
- 存储卷挂载
- 配置管理:支持一些敏感的数据配置信息用K8s提供的配置服务来做。
- 弹性扩缩容:对容器服务集群进行弹性的扩容和缩容。
- 滚动发布
- 自我修复:kill掉异常的容器,自动启动新的服务。
2.K8s架构概览
K8s总体来说是主从架构模式Master - Slave架构,master节点负责调度、管理,slave节点负责具体程序的运行和节点服务,在K8s里面,主节点一般叫做master node,从节点叫做worker node。所有的主节点和从节点一起组成了K8s集群,在集群里面master和slave都可以是多个,是一个多主多从的集群架构。
2.1 K8s Master Node核心组件
- `**API Server**`:作用是K8s的请求入口提供能力,API Server组件负责接收K8s所有的命令请求,不管是UI控制台还是命令行都会经过API Server组件,API Server负责接收具体的命令请求,去通知其它组件工作。
- `**Scheduler**`:是K8s调度所有worker节点的调度组件,当K8s需要部署服务时,通过Scheduler调度组件来负责调度具体的Worker Node节点来进行服务的部署工作。
- `**Controller Manager**`:监控K8s所有的Worker Node,对工作节点的性能和工作状态监控,例如某个节点的服务挂了以后,Controller Manager组件就会立马感知到,然后通知Scheduler组件去调度选择Worker Node来重新部署服务。Controller Manager是由多个Controller组成:`Node Controller`、`Service Controller`、`Volume Controller`等
- `**etcd**`:K8s默认的数据信息存储服务,是一个基于Raft算法的分布式KV服务器,类似于ZK功能。etcd存储了K8s的关心配置和用户配置数据。
2.2 K8s Worker Node核心组件
- `Kubelet`:工作节点的监视器,并且负责和Master Node进行通信,定时的向Master Node上报工作节点的服务状态,并且负责接收Master Node发来的各种命令。
- `Kube Proxy`:工作节点的网络代理组件,负责基础通信能力。
- `Container Runtime`:工作节点的运行时环境。
3.K8s核心概念
3.1 Deployment
Deployment负责创建和更新应用程序的实例,创建Deployment后,K8s的Master节点会将应用程序实例调度到集群中各个Worker节点上。Pod是K8s最小的编排单位,K8s要支持弹性扩容、负载均衡就得需要一个Controller来管理,Deployment就是来控制和编排应用程序。 在Deployment的配置文件里面可以指定需要部署的Pod标签、Pod个数等。
3.2 Pod
Pod是K8s编排容器的最小逻辑单元,Pod也相当于是一个逻辑主机的概念负责管理具体的应用实例,包括1个或多个Docker容器,一般是一对一关系。 Pod同样也有yaml配置文件,在配置文件里面可以配置暴露的端口、服务标签、镜像信息等。
3.3 Service
Service是K8s里面的一个抽象的概念,Service是一组Pod的逻辑集合,给这些Pod提供服务发现、负载的能力。 虽然每一个Pod都有自己的IP和端口,但是Pod的IP并不会暴露给外部;访问Pod必须通过Service,Service提供流量的接收。Service可以通过配置Type来对外暴露访问入口,默认是ClusterIP模式(在几群的内部IP上公开Servcie),除了这个默认模式外,还提供NodePort、LoadBalancer等。 Service同样提供了yaml文件配置,可以配置例如暴露端口、Pod的选择等。
4.K8s高级特性
4.1 Volume
Volume是K8s提供的存储卷服务,包含Pod中容器访问的数据目录。容器中文件在磁盘上是临时存放的,当容器崩溃时文件就会丢失,那么就需要Volume存储卷来处理。常用的存储卷有:
- ConfigMap
- emptyDir:用于存储缓存数据。
- hostPath:主机节点文件挂载到Pod中。
- local、nfs等
4.2 ConfigMap
K8s提供的配置中心服务,使用时可以作为Pod容器的环境变量、配置信息数据,例如可以将应用程序服务所需要的yml、jvm等参数放到configMap中,等应用程序启动的时候通过K8s的API来解析获取。
4.3 Ingress
K8s的Ingress可以实现对外提供网络、路由负载等功能,类似于Nginx。
5.其它零散概念
5.1 探针
5.1.1 Pod存活探针
Pod的存活探针的目的是检查Pod里面的容器服务是否正常的工作,这个正常是由应用程序自定定义什么叫正常,K8s提供了3种存活探针技术:
1. `HTTP探针`:通过HTTP GET的方式来调用应用程序暴露的接口API,来检测HTTP code状态码判断服务是否正常,比如我们SpringBoot应用,可以提供一个免签的/health接口。
1. `TCP探针`:基于TCP Socket套接字来和容器服务建立TCP连接来判断。
1. `Exec命令式探针`:通过在Pod中容器中执行相关命令,看命令的状态码等。
Pod存活探针是可以配置一些额外参数的,例如延迟多久探测、timeout探测超时时间、探测周期频率间隔等。
5.1.2 Pod就绪探针
Pod创建、启动过程会需要一定的时间来加载配置和准备工作,此时Pod不会立即对外提供接受连接的服务,直到Pod完成了就绪。那么K8s就需要知道Pod啥时候就绪完成,就可以利用就绪探针技术来做。 Pod就绪探针从种类上来说和存活探针一模一样,也是通过应用程序暴露一个接口的方式来实现。但是和存活探针不同的是,存活探针一旦知道了容器发生了故障就会关闭当前容器然后重启Pod,而就绪探针的目的是检测应用程序是否可以开始提供服务的一个状态检查。
更多推荐
所有评论(0)