当前位置: 首页 > 科技观察

面试问到了K8S原理,花5分钟来总结下,以后再也不怕了

时间:2023-03-21 23:04:19 科技观察

面试问了K8S的原理,用了5分钟总结了一下,以后不会再怕了之间的界限让我们更容易开发、管理和维护一个大型的分布式系统和项目,而且会每次采访都或多或少被问到,作者也被问过很多次。本文将用最短的篇幅介绍一下K8S的工作过程。K8S架构组成Kubernetes最初起源于谷歌内部的Borg,提供面向应用的容器集群部署和管理系统。Kubernetes借鉴了Borg的Pod、Service、Labels、单Pod单IP等设计理念。K8S架构图Kubernetes主要由以下几个核心组件组成:etcd保存了整个集群的状态;apiserver提供资源操作的唯一入口,提供认证、授权、访问控制、API注册和发现机制;controllermanager负责维护集群的状态,如故障检测、自动扩容、滚动更新等;调度器负责资源调度,根据预定的调度策略将Pod调度到相应的机器上;kubelet负责维护容器的生命周期,同时负责Volume(CVI)和网络(CNI)管理;Containerruntime负责镜像管理以及Pod和容器的实际运行(CRI);kube-proxy负责为Service提供集群内的服务发现和负载均衡;除了核心组件,还有一些推荐的Add-ons:kube-dns负责为整个集群提供DNS服务。IngressController为服务提供外部网络入口。Heapster提供资源监控。Dashboard提供GUIFederation以提供跨可用性区域的集群。Fluentd-elasticsearch提供集群日志收集、存储、k8s组件间查询。WorkflowK8S工作流程①运维人员向kube-apiserver发送指令(我要做什么,我希望事情处于什么状态)(以下kube-apiserver简称apiserver,kube-controller-manager是简称controller,kube-scheduler简称scheduler)②api响应命令,通过一系列的认证授权,将pod数据存储到etcd中,创建并初始化部署资源。(预期状态)③controller通过list-watch机制监控发现一个新的deployment,将资源添加到内部工作队列,发现该资源没有关联的pod和replicaset,让deploymentcontroller创建replicaset资源,并然后启用replicasetcontroller来创建一个pod。④所有controller创建完成后,将deployment、replicaset、pod资源更新存储到etcd中。⑤调度器通过list-watch机制监控和发现新的pod,通过主机过滤和主机评分规则将pod绑定到合适的主机上。⑥将绑定结果存储到etcd。⑦kubelet每隔20s通过NodeName从apiserver获取自己Node上要运行的pod列表(可自定义)。通过与自己的内部缓存进行比较,添加了一个新的pod。⑧kubelet创建pod。⑨kube-proxy为新创建的pod注册动态DNS到CoreOS。将iptables/ipvs规则添加到pod的服务中,用于服务发现和负载均衡。⑩控制器通过控制回路(controlloop)将当前的pod状态与用户的预期状态进行比较。如果当前状态与用户期望的状态不同,控制器会将pod修改为用户期望的状态。如果不可能,pod将被删除。然后重新创建pod。总结一下K8SKubernetes的架构设计,理清之后,其实很简单。面试的时候被问到K8S的原理,能回答这几个问题的人基本差不多。Kubernetes的深入实现原理还是需要单独分析的。本文只是介绍。如有错误,欢迎大家批评指正。让我们一起进步!