k8s | 深入理解组件 kubelet

k8s | 深入理解组件 kubelet

​ 每个Node节点上都运行一个 Kubelet 服务进程,默认监听 10250 端口,接收并执行 Master 发来的指令,管理 Pod 及 Pod 中的容器

kubelet 架构

img

  • Kubelet API,包括 10250 端口的认证 API、4194 端口的 cAdvisor API、10255 端口的只读 API 以及 10248 端口的健康检查 API
  • syncLoop:从 API 或者 manifest 目录接收 Pod 更新,发送到 podWorkers 处理,大量使用 channel 处理来处理异步请求
  • 辅助的 manager,如 cAdvisor、PLEG、Volume Manager 等,处理 syncLoop 以外的其他工作
  • CRI:容器执行引擎接口,负责与 container runtime shim 通信
  • 容器执行引擎,如 dockershim、rkt 等(注:rkt 暂未完成 CRI 的迁移)
  • 网络插件,目前支持 CNI 和 kubenet

具体来说,有以下的功能

监听apiserver,管理节点和pod

​ 每个 Kubelet 进程会在 API Server 上注册所在Node节点的信息,定期向 Master 节点汇报该节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源。

节点管理

Kubelet 可以通过设置启动参数 --register-node 来确定是否向 API Server 注册自己。kubeletAPI Server发送注册消息,API Server 在接收到新消息后,将信息写入 etcd

pod管理

KubeletPodSpec 的方式工作。PodSpec 是描述一个 PodYAMLJSON 对象。

kubelet 可以通过API Server监听etcd目录来获取 pod 清单(配置文件)

Kubelet 监听 etcd,所有针对 Pod 的操作(创建,修改,删除)都将会被 Kubelet 监听到

  • 为该 Pod 创建一个数据目录;
  • 从 API Server 读取该 Pod 清单;
  • 为该 Pod 挂载外部卷;
  • 下载 Pod 用到的 Secret;
  • 检查已经在节点上运行的 Pod

健康检查

kubelet 会调用容器的 livenessProde 来检测容器的健康状况,包含三种实现方式

  • ExeAction:在容器中执行命令,返回0则健康
  • TCPSocketAction:通过ip+port访问,如果可以被访问则健康
  • HTTPGetAction:调用HTTP GET 方法,返回200-400则健康

LivenessProbe 存活探针

用于判断容器是否健康,告诉 Kubelet 一个容器什么时候处于不健康的状态。如果 LivenessProbe 探针探测到容器不健康,则 Kubelet 将删除该容器,并根据容器的重启策略做相应的处理

何时使用?

  • 如果容器中的进程能够在遇到问题或不健康的情况下自行崩溃,则不一定需要存活态探针
  • 如果希望容器在探测失败时被杀死并重新启动,那么请指定一个存活态探针

ReadinessProbe 就绪探针

用于判断容器是否启动完成且准备接收请求,如果探测失败,endpoint 将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址

何时使用?

  • 如果你希望容器在探测失败时被杀死并重新启动,那么请指定一个存活态探针。这种情况和存活探针相同,就绪态探针的存在意味着 Pod 将在启动阶段不接收任何数据,并且只有在探针探测成功后才开始接收数据
  • 如果你希望容器能够自行进入维护状态,也可以指定一个就绪态探针, 检查某个特定于就绪态的因此不同于存活态探测的端点
  • 如果你的应用程序对后端服务有严格的依赖性,你可以同时实现存活态和就绪态探针。存活态探针检测通过后,就绪态探针会额外检查每个所需的后端服务是否可用

startupProbe

指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被 禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器

何时使用?

  • 对于所包含的容器需要较长时间才能启动就绪的 Pod 而言,启动探针是有用的
  • 如果你的容器启动时间通常超出 initialDelaySeconds + failureThreshold × periodSeconds 总值,你应该设置一个启动探测

cAdvisor 监控节点和容器的资源

cAdvisor 是一个开源的分析容器资源使用率和性能特性的代理工具,集成到 Kubelet中,当Kubelet启动时会同时启动cAdvisor,且一个cAdvisor只监控一个Node节点的信息。cAdvisor 自动查找所有在其所在节点上的容器,自动采集 CPU、内存、文件系统和网络使用的统计信息

Eviction 驱逐

Kubelet 会监控资源的使用情况,并使用驱逐机制防止计算和存储资源耗尽。在驱逐时,Kubelet 将 Pod 的所有容器停止,并将 PodPhase 设置为 Failed。

容器运行时CRI

​ 容器运行时(Container Runtime)是 Kubernetes 最重要的组件之一,负责真正管理镜像和容器的生命周期。Kubelet 通过 容器运行时接口 与容器运行时交互,以管理镜像和容器。

参考链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值