认识kubenetes的核心组件之一kubelet

2023-11-02

kubelet是在每个 Node 节点(包括master节点)上运行的主要 “节点代理”,默认监听10250端口,kubelet主要完成如下一些任务。

  • 接收并执行master发送来的指令
  • 管理pod以及pod中的容器
  • 管理节点和更新节点状态信息

每个kubelet进程会在API server上注册节点信息,定期向master节点汇报节点资源使用情况,并通过cAdvisor监控节点和容器的资源。其中pod管理中主要包含获取Pod清单信息,kubelet获取pod清单信息主要通过三种方式
1.文件(File):kubelet周期性地监视此路径下的文件是否有更新。 监视周期默认为 20s,且可通过参数进行配置。启动参数--config指定配置目录下的文件(默认是/etc/Kubernetes/manifests/),该文件每隔20s检查一次。
2.HTTP 端点(HTTP endpoint):利用命令行参数指定 HTTP 端点。 此端点的监视周期默认为 20 秒,也可以使用参数进行配置。
3.HTTP 服务器(HTTP server):kubelet 还可以侦听 HTTP 并响应简单的 API (目前没有完整规范)来提交新的清单。
4.API Server:通过API Server监听etcd目录,同步pod清单。

接下来看看静态文件方式,通过命令ps -ef | grep kubelet 查看进程的配置文件地址

查看该配置文件,可以看到有staticPodPath目录,查看该目录可以看到一些pod的yaml文件,这些pod都是运行在集群上pod,kubelet可以通过获取该目录下文件达到控制pod的目的。

节点管理主要包括节点自注册和节点状态更新,有三种方式管理节点
1.kubelet可以通过设置启动参数--register-node来确定是否向API Server注册自己
2.如果kubelet没有选择自注册模式,则需要用户配置Node资源信息,同时告知kubelet集群上API Server的位置
3.kubelet启动时通过API Server注册节点信息,并定时向API Server发送节点新信息,API Server在接收到信息后,将信息写入etcd。

 Kubelet是核心组件之一,那么在pod启动过程中,kubelet是如何协助完成pod创建的呢?具体如下图所示(备注下图来源于训练营课程课件)

1.APIServer接收到创建pod的请求,将该请求写入etcd

2.Scheduler通过watch(new pod)的方式监听APIServer的请求,当发现有new pod请求时,给pod寻找合适的node,并将这些信息与pod绑定,即bindpod。

3.APIServer收到bindpod信息后,写入etcd

4.Kubelet通过watch(bound pod)方式监听APIServer的请求,当发现有bound pod请求时,调用Containerd(Container Runtime Interface)启动Sandbox pod,然后拉取pod的image,创建和启动container,在启动Sandbox容器进程时,Containerd调用网络插件为pod添加网络配置。

通过上图可以发现在启动pod过程中还启动了一个sandbox容器进程,那么该容器进程在哪里启动的,为什么要启动该进程呢?通过命令查看pod启动的容器进程信息 docker ps|grep podname,如下图所示,查看nginx pod的容器进程,nginx pod的状态是1/1,说明pod中定义的container个数是1,但是查看容器进程,可以看到是2个,上面这个就是sandbox容器进程 

为什么要启动sandbox容器进程呢?如其名称一样,sandbox的作用是为应用提供隔离稳定的环境,这里的sandbox也是起到这个作用。例如如下场景

场景一:pod启动后,会调用系统命令cgroup相关实现Resource limit的属性设置,如果pod启动后,container发生了重启,如果不保存这些信息,那么container重启后又需要调用系统命令完成资源限制控制,这些都是对系统资源的消耗,故有了sandbox可以减少调用系统命令频率

场景二:pod在启动过程中需要设置网络信息如果有sandbox那么可以提前设置网络配置进行保存,在pod启动过程中,就可以更快的启动pod。

以上就是启动sandbox容器进程的原因,为了更好的理解pod启动流程,下图是一个pod启动过程中涉及的task list(备注:下图来源于训练营课程课件),通过下图可以更好的理解pod启动过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

认识kubenetes的核心组件之一kubelet 的相关文章

  • k8s中Endpoint是什么

    在Kubernetes K8s 中 Endpoint是一种资源对象 用于表示一个Service所依赖的真实后端节点的Pod信息 它存储了一组IP地址和端口号的列表 这些IP地址和端口号对应着提供相同服务的Pod实例 主要作用 Endpoin
  • 在k8s集群内搭建Prometheus监控平台

    基本架构 Prometheus由SoundCloud发布 是一套由go语言开发的开源的监控 报警 时间序列数据库的组合 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态 任意组件只要提供对应的HTTP接口就可以接入
  • 【云原生之Docker实战】使用docker部署PicUploader图床工具

    云原生之Docker实战 使用docker部署PicUploader图床工具 一 PicUploader介绍 1 PicUploader介绍 2 PicUploader特点 二 检查本地系统环境 1 检查系统版本 2 检查系统内核版本 三
  • 家庭实验室系列文章-电脑如何配置网络唤醒 (WOL)?

    前言 其实这个专题很久很久之前就想写了 但是一直因为各种原因拖着没动笔 因为没有资格 也没有钱在一线城市买房 但是在要结婚之前 婚房又是刚需 我和太太最终一起在一线城市周边的某二线城市买了房 再之后 一起装修 她负责非电相关 我负责电 网相
  • DockerFile构建过程解析

    DockerFile构建过程解析 1 DockerFile内容基础知识 每条保留字指令都必须为大写字母且后面要至少跟随一个参数 指令按照从上到下 顺序执行 表示注释 每条指令都会创建一个新的镜像层并对镜像进行提交 2 Docker执行Doc
  • 【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生

    前言 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的Linux或Windows操作系统的机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任何接口 云原生
  • 云原生服务更换二进制调测方法

    当前我们开发的服务基本都是云原生的服务 都跑在容器中 在开发过程中 想更换二进制文件调测就相当麻烦了 今天写了一个脚本 供大家参考 bin bash set ex appName testApp appPath home appName c
  • 【Docker 基础教程】Centos7.5安装Docker并配置阿里云镜像

    文章目录 前言 安装docker 前置条件 测试并运行一个实例 安装命令 安装结果 建立一个容器 配置阿里云镜像 第一步 第二步 第三步 第四步 第五步 以下方式二选一 直接复制黏贴 分步创建 前言 前面一篇文章介绍到了Docker的基本概
  • DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

    2023年8月16日 18日 第14届中国数据库技术大会 DTCC 2023 于北京隆重召开 拓数派受邀参与本次大会 PieCloudDB 技术专家邱培峰在大会做了 云原生虚拟数仓 PieCloudDB ETL 方案设计与实现 的主题演讲
  • 云原生热门话题|什么是可观测性-Observability

    code杂坛 关注一线大厂 互联网时讯 各技术栈 产品 开源社区 等最新讯息 1 可观测性引入 可观测性 术语源于几十年前的控制理论 在许多实际问题中 控制系统的状态变量不是由直接测量得到的 而是通过某种观测方法得到的 由某种观测系统所得到
  • 【云原生】Docker 详解(三):Docker 镜像管理基础

    Docker 详解 三 Docker 镜像管理基础 1 镜像的概念 镜像可以理解为应用程序的集装箱 而 Docker 用来装卸集装箱 Docker 镜像含有启动容器所需要的文件系统及其内容 因此 其用于创建并启动容器 Docker 镜像采用
  • Serverless 的前世今生

    作者 阿里云用户组 从云计算到 Serverless 架构 大家好 我是阿里云 Serverless 产品经理刘宇 很高兴可以和大家一起探索 Serverless 架构的前世今生 从云计算到云原生再到 Serverless 架构 技术飞速发
  • 利用云原生数仓 Databend 构建 MySQL 的归档分析服务

    MySQL 常用 OLTP 业务环境 一般会使用比较好的硬件资源来提供对外服务 现在 MySQL 数据对外提供的数据动不动好几个 T 也是正常的 在很多业务中 数据有较强的生命周期 在线一段时间后 可能就是失去业务意义 如 某个业务下线 业
  • 云原生之深入解析Kubernetes策略引擎对比:OPA/Gatekeeper与Kyverno

    一 前言 Kubernetes 策略 Kubernetes 的 Pod Security Policy 正如其名字所暗示的 仅是针对 Pod 工作的 是一种用来验证和控制 Pod 及其属性的机制 另外 PSP 只能屏蔽非法 Pod 的创建
  • k8s集群内部署nexus

    一 前言 在k8s集群中部署nexus服务需要使用到pv pvc服务来存储nexus的数据 需要使用service服务来提供对外访问nexus服务的端口 需要使用deployment服务来管理nexus服务 接下来就是用这些服务来在k8s集
  • 如何利用 Kubernetes 的新 CronJob API 进行高效的任务调度

    Kubernetes 的 CronJob API 是在云原生环境中自动执行常规任务的关键功能 本指南不仅引导您完成使用此 API 的步骤 还说明了它非常有用的实际用例 先决条件 正在运行的 Kubernetes 集群 版本 1 21 或更高
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • 拓数派加入 OpenCloudOS 操作系统开源社区,作为成员单位参与社区共建

    近日 拓数派签署 CLA Contributor License Agreement 贡献者许可协议 正式加入 OpenCloudOS 操作系统开源社区 拓数派 英文名称 OpenPie 是国内基础数据计算领域的高科技创新企业 作为国内云上
  • Kubernetes (十三) 存储——持久卷-动静态分配

    一 简介 二 NFS持久化存储步骤 静态分配 1 集群外主机用上次nfsdata共享目录中创建用来测试的pv 1 3 目录 用来对三个静态pv 2 创建pv的应用文件 vim pv yaml apiVersion v1 kind Persi
  • Kubelet - x509:证书对 10.233.0.1 有效,不适用于

    我已经安装了我的 kubernetes 集群 两个节点 库贝喷雾 https github com kubernetes sigs kubespray 现在我添加了第三个节点 我从新节点上的 kubelet 服务器收到错误 无法列出 v1

随机推荐