删除|23 个必知必会的 Kubernetes 高频面试题

删除|23 个必知必会的 Kubernetes 高频面试题


1、 k8s是什么?请说出你的了解?答:Kubenetes是一个针对容器应用 , 进行自动部署 , 弹性伸缩和管理的开源系统 。 主要功能是生产环境中的容器编排 。
K8S是Google公司推出的 , 它来源于由Google公司内部使用了15年的Borg系统 , 集结了Borg的精华 。
2、 K8s架构的组成是什么?答:和大多数分布式系统一样 , K8S集群至少需要一个主节点(Master)和多个计算节点(Node) 。

  • 主节点主要用于暴露API , 调度部署和节点的管理;
  • 计算节点运行一个容器运行环境 , 一般是docker环境(类似docker环境的还有rkt) , 同时运行一个K8s的代理(kubelet)用于和master通信 。 计算节点也会运行一些额外的组件 , 像记录日志 , 节点监控 , 服务发现等等 。 计算节点是k8s集群中真正工作的节点 。
K8S架构细分:1、Master节点(默认不参加实际工作):
  • Kubectl:客户端命令行工具 , 作为整个K8s集群的操作入口;
  • Api Server:在K8s架构中承担的是“桥梁”的角色 , 作为资源操作的唯一入口 , 它提供了认证、授权、访问控制、API注册和发现等机制 。 客户端与k8s群集及K8s内部组件的通信 , 都要通过Api Server这个组件;
  • Controller-manager:负责维护群集的状态 , 比如故障检测、自动扩展、滚动更新等;
  • Scheduler:负责资源的调度 , 按照预定的调度策略将pod调度到相应的node节点上;
  • Etcd:担任数据中心的角色 , 保存了整个群集的状态;
2、Node节点:
  • Kubelet:负责维护容器的生命周期 , 同时也负责Volume和网络的管理 , 一般运行在所有的节点 , 是Node节点的代理 , 当Scheduler确定某个node上运行pod之后 , 会将pod的具体信息(image , volume)等发送给该节点的kubelet , kubelet根据这些信息创建和运行容器 , 并向master返回运行状态 。 (自动修复功能:如果某个节点中的容器宕机 , 它会尝试重启该容器 , 若重启无效 , 则会将该pod杀死 , 然后重新创建一个容器);
  • Kube-proxy:Service在逻辑上代表了后端的多个pod 。 负责为Service提供cluster内部的服务发现和负载均衡(外界通过Service访问pod提供的服务时 , Service接收到的请求后就是通过kube-proxy来转发到pod上的);
  • container-runtime:是负责管理运行容器的软件 , 比如docker
  • Pod:是k8s集群里面最小的单位 。 每个pod里边可以运行一个或多个container(容器) , 如果一个pod中有两个container , 那么container的USR(用户)、MNT(挂载点)、PID(进程号)是相互隔离的 , UTS(主机名和域名)、IPC(消息队列)、NET(网络栈)是相互共享的 。 我比较喜欢把pod来当做豌豆夹 , 而豌豆就是pod中的container;
3、 容器和主机部署应用的区别是什么?答:容器的中心思想就是秒级启动;一次封装、到处运行;这是主机部署应用无法达到的效果 , 但同时也更应该注重容器的数据持久化问题 。
另外 , 容器部署可以将各个服务进行隔离 , 互不影响 , 这也是容器的另一个核心概念 。
4、请你说一下kubenetes针对pod资源对象的健康监测机制?答:K8s中对于pod资源对象的健康状态检测 , 提供了三类probe(探针)来执行对pod的健康监测:
1) livenessProbe探针
可以根据用户自定义规则来判定pod是否健康 , 如果livenessProbe探针探测到容器不健康 , 则kubelet会根据其重启策略来决定是否重启 , 如果一个容器不包含livenessProbe探针 , 则kubelet会认为容器的livenessProbe探针的返回值永远成功 。
2) ReadinessProbe探针
同样是可以根据用户自定义规则来判断pod是否健康 , 如果探测失败 , 控制器会将此pod从对应service的endpoint列表中移除 , 从此不再将任何请求调度到此Pod上 , 直到下次探测成功 。
3) startupProbe探针
启动检查机制 , 应用一些启动缓慢的业务 , 避免业务长时间启动而被上面两类探针kill掉 , 这个问题也可以换另一种方式解决 , 就是定义上面两类探针机制时 , 初始化时间定义的长一些即可 。
每种探测方法能支持以下几个相同的检查参数 , 用于设置控制检查时间: