K8S面试题总结

1、kubenetes针对pod资源对象的健康监测机制?

        答:提供了三类probe(探针)来执行对pod的健康监测:
1)livenessProbe(存活探针):可以根据用户自定义规则来判定pod是否健康,用于判断容器是否处于Running状态,如果不是,kubelet就会杀掉该容器,并根据重启策略做相应的处理。如果容器不包含该探针,那么kubelet就会默认返回值都是success;
2)ReadinessProbe(就绪探针):同样是可以根据用户自定义规则来判断pod是否健康,容器服务是否可用(Ready),如果探测失败,控制器会将此pod从对应service的endpoint列表中移除,从此不再将任何请求调度到此Pod上,直到下次探测成功;
3)startupProbe(启动探针):启动检查机制,应用一些启动缓慢的业务,避免业务长时间启动而被上面两类探针kill掉,这个问题也可以换另一种方式解决,就是定义上面两类探针机制时,初始化时间定义的长一些即可;
备注:每种探测方法能支持以下几个相同的检查参数,用于设置控制检查时间:initialDelaySeconds:初始第一次探测间隔,用于应用启动的时间,防止应用还没启动而健康检查失败;periodSeconds:检查间隔,多久执行probe检查,默认为10s;timeoutSeconds:检查超时时长,探测应用timeout后为失败;successThreshold:成功探测阈值,表示探测多少次为健康正常,默认探测1次。

2、pod的重启策略是什么?

        答:pod的spec包含restartPolicy字段是查看pod的重启策略;Always:但凡pod对象终止就重启,此为默认策略;OnFailure:仅在pod对象出现错误时才重启;Never:不论容器运行状态如何,kubelet都不会重启该容器;

3、DaemonSet资源对象的特性?

         答:DaemonSet这种资源对象会在每个k8s集群中的节点上运行,并且每个节点只能运行一个pod,这是它和deployment资源对象的最大也是唯一的区别。所以,在yaml文件中,不支持定义replicas(副本),除此之外,与Deployment、RS等资源对象的写法相同,一般使用的场景有在去做每个节点的日志收集工作;监控每个节点的的运行状态;

4、删除一个Pod会发生什么事情?

         答:Kube-apiserver会接收到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,此时Pod的状态Terminating(终止),kubelet看到pod标记为Terminating(终止)就开始了关闭Pod的工作;关闭流程如下:1)pod从service的endpoint列表中被移除;2)如果该pod定义了一个停止前的钩子,其会在pod内部被调用,停止钩子一般定义了如何优雅的结束进程;3)进程被发送TERM信号(kill -14);4)当超过优雅退出的时间后,Pod中的所有进程都会被发送SIGKILL信号(kill -9);
5、请详述kube-proxy原理?      

        答:集群中每个Node上都会运行一个kube-proxy服务进程,他是Service的透明代理兼均衡负载器,其核心功能是将某个Service的访问转发到后端的多个Pod上。kube-proxy通过监听集群状态变更,并对本机iptables做修改,从而实现网络路由。 而其中的负载均衡,也是通过iptables的特性实现的。从V1.8版本开始,用IPVS(IP Virtual Server)模式,用于路由规则的配置,主要优势是:1)为大型集群提供了更好的扩展性和性能。采用哈希表的数据结构,更高效;2)支持更复杂的负载均衡算法;3)支持服务器健康检查和连接重试;4)可以动态修改ipset的集合;

6、flannel 和 ovs 网络的区别?

        答:1)配置是否自动化:OpenvSwitch(ovs)作为开源的交换机软件,相对比较成熟和稳定,支持各种网络隧道和协议,经历了大型项目 OpenStack 的考验,而 flannel 除了支持建立覆盖网络来实现 Pod 到 Pod 之间的无缝通信之外,还跟 docker、k8s 的架构体系紧密结合,flannel 能感知 k8s 中的 service 对象,然后动态维护自己的路由表,并通过 etcd 来协助 docker 对整个 k8s 集群的 docker0 网段进行规范,而 ovs ,这些操作则需要手动完成,假如集群中有 N 个节点,则需要建立 N(N-1)/2 个 Vxlan 或者 gre 连接,这取决于集群的规模,如果集群的规模很大,则必须通过自动化脚本来初始化,避免出错。2)是否支持隔离:flannel 虽然很方便实现 Pod 到 Pod 之间的通信,但不能实现多租户隔离,也不能很好地限制 Pod 的网络流量,而 ovs 网络有两种模式:单租户模式和多租户模式,单租户模式直接使用 openvswitch + vxlan 将 k8s 的 pod 网络组成一个大二层,所有的 pod 可以互相通信访问,多租户模式以 Namespace 为维度分配虚拟网络,从而形成一个网络独立用户,一个 Namespace 中的 pod 无法访问其他 Namespace 中的 pod 和 svc 对象;

7、k8s集群外流量怎么访问Pod?

        答:可以通过Service的NodePort方式访问,会在所有节点监听同一个端口,比如:30000,访问节点的流量会被重定向到对应的Service上面;

8、K8S 资源限制 QoS?

        答:Quality of Service(Qos) 主要有三种类别:1)BestEffort:什么都不设置(CPU or Memory),佛系申请资源;2)Burstable:Pod 中的容器至少一个设置了CPU 或者 Memory 的请求;3)Guaranteed:Pod 中的所有容器必须设置 CPU 和 Memory,并且 request 和 limit 值相等;

9、k8s数据持久化的方式有哪些?

        答:1)EmptyDir(空目录):没有指定要挂载宿主机上的某个目录,直接由Pod内保部映射到宿主机上。类似于docker中的manager volume;场景有:a.只需要临时将数据保存在磁盘上,比如在合并/排序算法中;b.作为两个容器的共享存储,使得第一个内容管理的容器可以将生成的数据存入其中,同时由同一个webserver容器对外提供这些页面;emptyDir的特性:同个pod里面的不同容器,共享同一个持久化目录,当pod节点删除时,volume的数据也会被删除。如果仅仅是容器被销毁,pod还在,则不会影响volume中的数据。总结来说:emptyDir的数据持久化的生命周期和使用的pod一致。一般是作为临时存储使用。2)Hostpath:将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式;3)PersistentVolume(简称PV):基于NFS服务的PV,也可以基于GFS的PV。它的作用是统一数据持久化目录,方便管理,PVC是向PV申请应用所需的容量大小,K8s集群中可能会有多个PV,PVC和PV若要关联,其定义的访问模式必须一致。定义的storageClassName也必须一致,若群集中存在相同的(名字、访问模式都一致)两个PV,那么PVC会选择向它所需容量接近的PV去申请,或者随机申请;

10、K8S的基本组成部分?

        答:Master节点主要有五个组件,分别是kubectl、api-server、controller-manager、kube-scheduler 和 etcd;node节点主要有三个组件,分别是 kubelet、kube-proxy 和 容器运行时 docker 或者 rkt;

kubectl:客户端命令行工具,作为整个系统的操作入口。
apiserver:以REST API服务形式提供接口,作为整个系统的控制入口。
controller-manager:执行整个系统的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。
kube-scheduler:负责节点资源管理,接收来自kube-apiserver创建Pods任务,并分配到某个节点。
etcd:负责节点间的服务发现和配置共享。
kube-proxy:运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。
kubelet:运行在每个计算节点上,作为agent,接收分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。
DNS:一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。

11、K8s中镜像的下载策略是什么?

        答:可通过命令“kubectl explain pod.spec.containers”来查看imagePullPolicy这行的解释,K8s的镜像下载策略有三种:Always:镜像标签为latest时,总是从指定的仓库中获取镜像;Never:禁止从仓库中下载镜像,也就是说只能使用本地镜像;IfNotPresent:仅当本地没有对应镜像时,才从目标仓库中下载;

12、标签与标签选择器的作用是什么?

        答:标签:是当相同类型的资源对象越来越多的时候,为了更好的管理,可以按照标签将其分为一个组,为的是提升资源对象的管理效率;标签选择器:就是标签的查询过滤条件。

13、K8s的负载均衡器?

        答:负载均衡器是暴露服务的最常见和标准方式之一。根据工作环境使用两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器,而外部负载均衡器将流量从外部负载引导至后端容器;

14、kubelet 监控 Node 节点资源使用是通过什么组件来实现的?

        答:用Metrics Server提供核心指标,包括Node、Pod的CPU和内存的使用。而Metrics Server需要采集node上的cAdvisor提供的数据资源,当 kubelet 服务启动时,它会自动启动 cAdvisor 服务,然后 cAdvisor 会实时采集所在节点的性能指标及在节点上运行的容器的性能指标。kubelet 的启动参数 --cadvisor-port 可自定义 cAdvisor 对外提供服务的端口号,默认是 4194;

15、Pod的状态?

        答:1)Pending:已经创建了Pod,但是其内部还有容器没有创建;2)Running:Pod内部的所有容器都已经创建,只有由一个容器还处于运行状态或者重启状态;3)Succeeed:Pod内所有容器均已经成功执行并且退出,不会再重启;4)Failed:Pod内所有容器都退出,但至少有一个为退出失败状态;5)Unknown:由于某种原因不能获取该Pod的状态,可能是网络问题;

16、deployment/rs的区别?

        答:deployment是rs的超集,提供更多的部署功能,如:回滚、暂停和重启、 版本记录、事件和状态查看、滚动升级和替换升级。如果能使用deployment,则不应再使用rc和rs;

17、rc/rs实现原理?

        答:Replication Controller 可以保证Pod始终处于规定的副本数,而当前推荐的做法是使用Deployment+ReplicaSet,ReplicaSet 号称下一代的 Replicat

  • 10
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值