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



15、 DaemonSet资源对象的特性?DaemonSet这种资源对象会在每个k8s集群中的节点上运行 , 并且每个节点只能运行一个pod , 这是它和deployment资源对象的最大也是唯一的区别 。 所以 , 在其yaml文件中 , 不支持定义replicas , 除此之外 , 与Deployment、RS等资源对象的写法相同 。
它的一般使用场景如下:

  • 在去做每个节点的日志收集工作;
  • 监控每个节点的的运行状态;
16、 说说你对Job这种资源对象的了解?答:Job与其他服务类容器不同 , Job是一种工作类容器(一般用于做一次性任务) 。 使用常见不多 , 可以忽略这个问题 。
#提高Job执行效率的方法:
spec:  
  parallelism: 2           #一次运行2个  
  completions: 8           #最多运行8个  
  template:  
metadata:  

17、描述一下pod的生命周期有哪些状态?
  • Pending:表示pod已经被同意创建 , 正在等待kube-scheduler选择合适的节点创建 , 一般是在准备镜像;
  • Running:表示pod中所有的容器已经被创建 , 并且至少有一个容器正在运行或者是正在启动或者是正在重启;
  • Succeeded:表示所有容器已经成功终止 , 并且不会再启动;
  • Failed:表示pod中所有容器都是非0(不正常)状态退出;
  • Unknown:表示无法读取Pod状态 , 通常是kube-controller-manager无法与Pod通信 。
18、 创建一个pod的流程是什么?
  • 客户端提交Pod的配置信息(可以是yaml文件定义好的信息)到kube-apiserver;
  • Apiserver收到指令后 , 通知给controller-manager创建一个资源对象;
  • Controller-manager通过api-server将pod的配置信息存储到ETCD数据中心中;
  • Kube-scheduler检测到pod信息会开始调度预选 , 会先过滤掉不符合Pod资源配置要求的节点 , 然后开始调度调优 , 主要是挑选出更适合运行pod的节点 , 然后将pod的资源配置单发送到node节点上的kubelet组件上 。
  • Kubelet根据scheduler发来的资源配置单运行pod , 运行成功后 , 将pod的运行信息返回给scheduler , scheduler将返回的pod运行状况的信息存储到etcd数据中心 。
19、 删除一个Pod会发生什么事情?答:Kube-apiserver会接受到用户的删除指令 , 默认有30秒时间等待优雅退出 , 超过30秒会被标记为死亡状态 , 此时Pod的状态Terminating , kubelet看到pod标记为Terminating就开始了关闭Pod的工作;
关闭流程如下:
  • pod从service的endpoint列表中被移除;
  • 如果该pod定义了一个停止前的钩子 , 其会在pod内部被调用 , 停止钩子一般定义了如何优雅的结束进程;
  • 进程被发送TERM信号(kill -14)
  • 当超过优雅退出的时间后 , Pod中的所有进程都会被发送SIGKILL信号(kill -9) 。
20、 K8s的Service是什么?答:Pod每次重启或者重新部署 , 其IP地址都会产生变化 , 这使得pod间通信和pod与外部通信变得困难 , 这时候 , 就需要Service为pod提供一个固定的入口 。
Service的Endpoint列表通常绑定了一组相同配置的pod , 通过负载均衡的方式把外界请求分配到多个pod上
21、 k8s是怎么进行服务注册的?答:Pod启动后会加载当前环境所有Service信息 , 以便不同Pod根据Service名进行通信 。
22、 k8s集群外流量怎么访问Pod?答:可以通过Service的NodePort方式访问 , 会在所有节点监听同一个端口 , 比如:30000 , 访问节点的流量会被重定向到对应的Service上面 。

相关经验推荐