在kubernetes集群中,每个Node节点上都运行一个Kubelet服务进程,默认监听10250端口,接收并执行Master发来的指令,管理Pod及Pod中的容器。每个Kubelet进程会在API Server上注册所在Node节点的信息,定期向Master节点汇报该节点的资源使用情况,并通过cAdvisor监控节点和容器的资源。

一、Kubelet内部结构

如下kubelet内部组件结构图所示,Kubelet由许多内部组件构成:

图1:kubelet内部结构

1)Kubelet API:包括 10250 端口的认证 API、4194 端口的 cAdvisor API、10255端口的只读API以及10248端口的健康检查 API。

2)syncLoop:从API或者manifest 目录接收 Pod 更新,发送到podWorkers处理,大量使用channel处理来处理异步请求。

3)辅助的manager:如cAdvisor、PLEG、Volume Manager等,处理syncLoop以外的其他工作。

4)CRI:容器执行引擎接口,负责与container runtime shim通信。

5)容器执行引擎:如dockershim、rkt 等(注:rkt 暂未完成CRI的迁移)。

6)网络插件:目前支持CNI和kubenet。

二、了解Kubelet

1、节点管理

节点管理主要是节点自注册和节点状态更新:

  • Kubelet可以通过设置启动参数 --register-node来确定是否向API Server注册自己;
  • 如果Kubelet没有选择自注册模式,则需要用户自己配置Node资源信息,同时需要告知Kubelet集群上的API Server的位置;
  • Kubelet在启动时通过 API Server 注册节点信息,并定时向 API Server 发送节点新消息,API Server在接收到新消息后,将信息写入Etcd中。

2、Pod管理

Kubelet以PodSpec的方式工作。PodSpec 是描述一个 Pod 的YAML或JSON对象。kubelet采用一组通过各种机制提供的PodSpecs(主要通过apiserver),并确保这些PodSpecs中描述的Pod正常健康运行。

向Kubelet提供节点上需要运行的Pod清单的方法:

文件:启动参数--config指定的配置目录下的文件 (默认/ etc/kubernetes/manifests/)。该文件每 20 秒重新检查一次(可配置)。

HTTP endpoint (URL):启动参数--manifest-url设置。每20秒检查一次这个端点(可配置)。

API Server:通过API Server监听Etcd目录,同步Pod清单。

HTTP server:kubelet 侦听 HTTP请求,并响应简单的API以提交新的Pod清单。

本章主要学习通过API Server监听Etcd目录,同步Pod列表的方式。

Kubelet 通过API Server Client(Kubelet启动时创建)使用Watch加List的方式监听"/registry/nodes/$当前节点名"和“/registry/pods”目录,将获取的信息同步到本地缓存中。

Kubelet监听Etcd,所有针对Pod的操作都将会被Kubelet监听到。如果发现有新的绑定到本节点的Pod,则按照Pod清单的要求创建该Pod。

如果发现本地的Pod被修改,则Kubelet会做出相应的修改,比如删除Pod中某个容器时,则通过Docker Client删除该容器。 如果发现删除本节点的Pod,则删除相应的Pod,并通过Docker Client删除Pod中的容器。

Pod 启动流程

图2:Pod 启动流程图

启动流程如下:

1)、用户通过Kubectl或其他API客户端提交Pod spec给API Server;

2)、API Server尝试着将Pod对象的相关信息存入Etcd中,待写入操作执行完成,API Server即会返回确认信息至客户端;

3)、API Server开始反映Etcd中的状态变化;

4)、所有的Kubernetes组件均使用Watch机制来跟踪检查API Server上的相关变动;

5)、Kube-scheduler通过其Watch觉察到API Server创建了新的Pod对象但尚未绑定至任何工作节点

6)、Kube-scheduler为Pod对象挑选一个工作节点并将结果信息更新至API Server;

7)、调度结果信息由API Server更新至Etcd,而且API Server也开始反映此Pod对象的调度结果;

8)、Pod被调度到目标工作节点上的kubelet尝试在当前节点上调用Docker启动容器,并将容器的结果状态回送至API Server;

​9)、API Server将Pod状态信息存入Etcd中;

10)、在Etcd确认写入操作成功完成后,API Server将确认信息发送至相关的Kubelet,时间将通过它被接受。

3、容器健康检查

Pod通过两类探针检查容器的健康状态:

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

(2)ReadinessProbe(就绪探针)探针:用于判断容器是否启动完成且准备接收请求。如果ReadinessProbe探针探测到失败,则Pod的状态将被修改。

Kubelet定期调用容器中的LivenessProbe探针来诊断容器的健康状况。LivenessProbe包含如下三种实现方式:

ExecAction:在容器内部执行一个命令,如果该命令的退出状态码为 0,则表明容器健康;

TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,如果端口能被访问,则表明容器健康;

HTTPGetAction:通过容器的IP地址和端口号及路径调用HTTP GET方法,如果响应的状态码大于等于200且小于400,则认为容器状态健康。

LivenessProbe和ReadinessProbe探针包含在Pod定义的某个主容器中。

4、Kubelet驱逐

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

5、cAdvisor资源监控

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

6、Container Runtime

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

基于CRI容器引擎包括:

1)Docker

2)RKT

3)Virtlet

kubelet启动失败_《蹲坑学kubernetes》之10-1:kubelet原理详解相关推荐

  1. 【小白学PyTorch】10.pytorch常见运算详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 <<小白学PyTorch>> 参考目录: ...

  2. openwrt dhcp不分配_【装维技巧】DHCP工作原理详解(上)

    各位小伙伴们,又是元寒气满满的一天,最近在后台听到不少人对静态配置IP地址的种种抱怨: 以上问题,各位兄弟们有遇到过吗 莫急,小维来为各位小伙伴们支招 其实吧,有了动态主机配置协议DHCP(Dynam ...

  3. kubelet启动失败-报错解决

    kubelet 启动失败 配置完daemon.json,重启docker后kubelet起不来 [root@node1/etc/docker]# vim daemon.json{"regis ...

  4. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

  5. kubernetes运行应用2之DaemonSet详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  6. kubernetes系列11—PV和PVC详解

    kubernetes系列11-PV和PVC详解 原文:kubernetes系列11-PV和PVC详解 本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 ...

  7. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  8. 容器编排技术 -- Kubernetes kubectl create secret docker-registry 命令详解

    容器编排技术 -- Kubernetes kubectl create secret docker-registry 命令详解 1 kubectl create secret docker-regis ...

  9. 容器编排技术 -- Kubernetes kubectl create secret generic 命令详解

    容器编排技术 -- Kubernetes kubectl create secret generic 命令详解 1 kubectl create secret generic 2 语法 3 示例 4  ...

最新文章

  1. 动手动脑课后实验性的问题
  2. 无头虚拟化服务器,VBoxHeadless - 使用VirtualBox 4.0在无头Ubuntu 10.10服务器上运行虚拟机...
  3. 软件设计师中级 百度知道_设计师应该知道什么
  4. 【CodeForces - 472A】Design Tutorial: Learn from Math (tricks,思维,数论,打表)
  5. 熊猫多模式站群系统 开发日志 第二天
  6. html5制作心路历程,一个真正0基础小白学习前端开发的心路历程
  7. 拓端tecdat|用R语言模拟随机服务排队系统
  8. 002-JavaScript基本应用
  9. 中科院分区发布2021年期刊重大调整(生信期刊调整为生物学大类)
  10. 湘潭大学计算机网络试卷答案,湘潭大学计算机网络试卷
  11. 安装Rational Rose所踩得坑
  12. 直通车的计算机设备跟移动设备的区别,电脑端直通车和手淘直通车的有什么不同?...
  13. 视觉SLAM⑧----视觉里程计Ⅱ(光流法与直接法)
  14. [视频教程]macOS运行MAME
  15. 手机卫星定位系统_北斗卫星已覆盖130国上空,那手机上能搜到吗?北斗女神这样比喻...
  16. 万马股份旗下万马爱充遭通报下架:违规收集个人信息,未及时整改
  17. Dojo 1.6 官方教程:Dojo中的事件
  18. Bugku_隐写 [Study notes][MISC]
  19. 什么是RGB-D图像
  20. 第一年19元月租100g

热门文章

  1. centos7中每天定时备份mysql数据库
  2. 第一行代码学习笔记第七章——探究内容提供器
  3. 1.2.1 计算机系统的组成(硬件+软件)
  4. 贴片电阻代号对照表图_贴片二极管的检测技巧
  5. signal(SIGCHLD, SIG_IGN) 和 signal(SIGPIPE, SIG_IGN) 使用场景
  6. 数据结构与算法 / 概念
  7. 51单片机系列命名规则
  8. 小明分享:Esp32下softAP+tcp_server的简单实现
  9. 公办低分二本_山东的5所专科院校,属于本省公办,适合低分学生报考
  10. 专用计算机例子,计算机基础综合题案例.doc