目 录CONTENT

文章目录

k8s | 深入理解组件 kubelet

RobKing
2023-07-13 / 0 评论 / 0 点赞 / 100 阅读 / 931 字

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 就绪探针

​ 用于判断容器是否启动完成且准备接收请求,如果探测失败则会改变 pod 的状态

cAdvisor 监控节点和容器的资源

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

Eviction 驱逐

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

容器运行时CRI

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

参考链接

0

评论区