Linux运维工程师 50个常见面试题( 六 )

  • pod管理 。kubelet负责维护node节点上pod的生命周期 , 当kubelet监听到master的下发到自己节点的任务时 , 比如要创建、更新、删除一个pod , kubelet 就会通过CRI(容器运行时接口)插件来调用不同的容器运行时来创建、更新、删除容器;常见的容器运行时有docker、containerd、rkt等等这些容器运行时 , 我们最熟悉的就是docker了 , 但在新版本的k8s已经弃用docker了 , k8s1.24版本中已经使用containerd作为容器运行时了 。
  • 容器健康检查 。pod中可以定义启动探针、存活探针、就绪探针等3种 , 我们最常用的就是存活探针、就绪探针 , kubelet 会定期调用容器中的探针来检测容器是否存活 , 是否就绪 , 如果是存活探针 , 则会根据探测结果对检查失败的容器进行相应的重启策略;
  • Metrics Server资源监控 。在node节点上部署Metrics Server用于监控node节点、pod的CPU、内存、文件系统、网络使用等资源使用情况 , 而kubelet则通过Metrics Server获取所在节点及容器的上的数据 。
  • 21、kube-api-server的端口是多少?各个pod是如何访问kube-api-server的?kube-api-server的端口是8080和6443 , 前者是http的端口 , 后者是https的端口 , 以我本机使用kubeadm安装的k8s为例:
    在命名空间的kube-system命名空间里 , 有一个名称为kube-api-master的pod , 这个pod就是运行着kube-api-server进程 , 它绑定了master主机的ip地址和6443端口 , 但是在default命名空间下 , 存在一个叫kubernetes的服务 , 该服务对外暴露端口为443 , 目标端口6443 , 这个服务的ip地址是clusterip地址池里面的第一个地址 , 同时这个服务的yaml定义里面并没有指定标签选择器 , 也就是说这个kubernetes服务所对应的endpoint是手动创建的 , 该endpoint也是名称叫做kubernetes , 该endpoint的yaml定义里面代理到master节点的6443端口 , 也就是kube-api-server的IP和端口 。这样一来 , 其他pod访问kube-api-server的整个流程就是:pod创建后嵌入了环境变量 , pod获取到了kubernetes这个服务的ip和443端口 , 请求到kubernetes这个服务其实就是转发到了master节点上的6443端口的kube-api-server这个pod里面 。
    22、k8s中命名空间的作用是什么?amespace是kubernetes系统中的一种非常重要的资源 , namespace的主要作用是用来实现多套环境的资源隔离 , 或者说是多租户的资源隔离 。
    k8s通过将集群内部的资源分配到不同的namespace中 , 可以形成逻辑上的隔离 , 以方便不同的资源进行隔离使用和管理 。不同的命名空间可以存在同名的资源 , 命名空间为资源提供了一个作用域 。
    可以通过k8s的授权机制 , 将不同的namespace交给不同的租户进行管理 , 这样就实现了多租户的资源隔离 , 还可以结合k8s的资源配额机制 , 限定不同的租户能占用的资源 , 例如CPU使用量、内存使用量等等来实现租户可用资源的管理 。
    23、pod资源控制器类型有哪些?