【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

Kubelet 的终极指南:管理 Kubernetes 节点的关键组件 (kubelet的作用)

用户投稿2024-04-09热门资讯20

简介

Kubelet是 Kubernetes 集群中一个关键组件,负责在节点上管理容器。它是 node 代理,负责与 Kubernetes API 服务器通信并确保节点上的 Pod 以预期的方式运行。本文将深入探讨 Kubelet 的作用、架构以及配置选项,并提供最佳实践,帮助您有效管理您的 Kubernetes 节点。

Kubelet 的作用

Kubelet 在 Kubernetes 集群中扮演着以下重要角色:管理容器生命周期: Kubelet 创建、启动、停止和销毁 Pod 中的容器。它通过与 Docker 或 CRI-O 等容器运行时进行交互来完成此操作。执行 Pod 规范: Kubelet 负责确保 Pod 符合其规范。这意味着它将应用资源限制、配置网络并挂载卷。收集和报告节点状态: Kubelet 不断收集和报告有关节点健康、资源使用情况和事件的信息。此信息由 Kubernetes API 服务器用于决策和集群管理。与 API 服务器通信: Kubelet 与 Kubernetes API 服务器持续通信以接收 Pod 规范、更新节点状态并报告事件。

Kubelet 的架构

Kubelet 组件包括:Kubelet 二进制文件: 这是 Kubelet 的主可执行文件,它加载并运行其他组件。容器运行时: 容器运行时(例如 Docker 或 CRI-O)负责创建和管理容器。kubelet API: 此 API 允许组件(例如 kubectl)与 Kubelet 交互。Pod 管理器: Pod 管理器负责 Pod 的生命周期管理。

Kubelet 配置

Kubelet 可以通过以下方式进行配置:命令行标志: Kubelet 可以使用各种命令行标志进行配置,例如`--address,--pod-infra-container-image`和`--cgroup-driver`。配置文件: Kubelet 配置也可以存储在配置文件中,通常位于`/etc/kubernetes/kubelet.conf`。Kubernetes API 服务器: Kubelet 可以从 Kubernetes API 服务器加载一些配置,例如 Pod 规范和节点标签。

最佳实践

以下是有效管理 Kubernetes 节点的 Kubelet 最佳实践:保持 Kubelet 更新: 始终确保运行最新版本的 Kubelet 以获得错误修复和新功能。优化资源分配: 使用资源限制和限制功能来优化节点上的资源分配。启用日志记录和监控: 为 Kubelet 事件和错误启用日志记录和监控以进行故障排除和性能分析。启用安全功能: 启用安全功能,例如沙盒和网络策略,以保护节点免受恶意活动的影响。定期检查节点健康状况: 定期检查节点健康状况以识别潜在问题并防止中断。

高级主题

污点和容忍: 污点和容忍允许您根据节点属性对 Pod 进行调度和反亲和性。插件: 插件允许您扩展 Kubelet的功能,例如卷管理和网络配置。自定义容器运行时: 您可以通过实现 CRI(容器运行时接口)来创建自己的容器运行时。

结论

Kubelet 是 Kubernetes 集群中一个必不可少的组件,负责管理节点上的容器和确保 Pod 以预期的方式运行。通过了解其作用、架构和配置选项,您可以有效地管理您的 Kubernetes 节点并确保您的集群的顺利运行。通过遵循最佳实践并探索高级主题,您可以充分利用 Kubelet 的强大功能。

kubernetes常见组件不包括

kubernetes常见组件不包括Openstack。

kubernetes常见组件有以下几种:

etcd:保存整个集群的状态。

apiserver:提供了资源的唯一入口,并提供认证、授权、访问控制、API注册和发现等功能。

controller manager:负责维护集群的状态,例如故障检测、自动扩展、滚动更新等。

scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。

kubelet:每个Node节点上都会有一个Kubelet,负责Master下发到该节点的具体任务,管理该节点上的Pod和容器。

kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡。

Container runtime:负责镜像的管理以及Pod和容器的真正运行(CRI)。

kube-dns:负责为整个集群提供DNS服务。

Ingress Controller:为服务提供外网入口。

Heapster:提供资源监控。

Dashboard:提供GUI。

Federation:提供跨可用区的集群。

Fluentd-elasticsearch:提供集群日志采集、存储与查询。

这些组件共同构成了Kubernetes系统,并为其提供各种功能和服务,其中不包括Openstack。

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。其产品特点有:

可移植:支持公有云,私有云,混合云,多重云(multi-cloud)。

可扩展:模块化,插件化,可挂载,可组合。

自动化:自动部署,自动重启,自动复制,自动伸缩/扩展。

2021-10-这一篇 K8S(Kubernetes)我觉得可以了解一下!!!28

Kubernetes是Google开源的分布式容器管理平台,是为了更方便的在服务器中管理我们的容器化应用。

Kubernetes简称 K8S,为什么会有这个称号?因为K和S是 Kubernetes首字母和尾字母,而K和S中间有八个字母,所以简称 K8S,加上 Kubernetes 比较绕口,所以一般使用简称 K8S。

Kubernetes即是一款容器编排工具,也是一个全新的基于容器技术的分布式架构方案,在基于Docker的基础上,可以提供从创建应用>应用部署>提供服务>动态伸缩>应用更新 一系列服务,提高了容器集群管理的便捷性。

大家可以先看一下,下面一张图,里面有我们的 mysql,redis,tomcat,nginx 等配置信息,如果我们想要安装里面的数据,我们需要一个一个手动安装,好像也可以,反正也就一个,虽然麻烦了一点,但也不耽误。

但是随着技术的发展和业务的需要,单台服务器已经不能满足我们日常的需要了,越来越多的公司,更多需要的是集群环境和多容器部署,那么如果还是一个一个去部署,运维恐怕要疯掉了,一天啥也不干就去部署机器了,有时候,可能因为某一个环节出错,要重新,那真的是吐血。。。。。,如下图所示:

如果我想要部署,以下几台机器:

如果要一个一个去部署,人都要傻掉了,这什么时候是个头,如果是某里巴的两万台机器,是不是要当场提交辞职信,所以 K8S 就是帮助我们来做这些事情的,方便我们对容器的管理和应用的自动化部署,减少重复劳动,并且能够自动化部署应用和故障自愈。

并且如果 K8S 对于微服务有很好的支持,并且一个微服务的副本可以跟着系统的负荷变化进行调整,K8S 内在的服务弹性扩容机制也能够很好的应对突发流量。

Docker-Compose是用来管理容器的,类似用户容器管家,我们有N多台容器或者应用需要启动的时候,如果手动去操作,是非常耗费时间的,如果有了 Docker-Compose只需要一个配置文件就可以帮我们搞定,但是 Docker-Compose只能管理当前主机上的 Docker,不能去管理其他服务器上的服务。意思就是单机环境。

Docker Swarm是由Docker 公司研发的一款用来管理集群上的Docker容器工具,弥补了 Docker-Compose单节点的缺陷, Docker Swarm可以帮助我们启动容器,监控容器的状态,如果容器服务挂掉会重新启动一个新的容器,保证正常的对外提供服务,也支持服务之间的负载均衡。而且这些东西 Docker-Compose 是不支持的,

Kubernetes它本身的角色定位是和 Docker Swarm是一样的,也就是说他们负责的工作在容器领域来说是相同的部分,当然也要一些不一样的特点, Kubernetes 是谷歌自己的产品,经过大量的实践和宿主机的实验,非常的成熟,所以 Kubernetes正在成为容器编排领域的领导者,其 可配置性、可靠性和社区的广大支持,从而超越了 Docker Swarm ,作为谷歌的开源项目,它和整个谷歌的云平台协调工作。

在下图中,是K8S的一个集群,在这个集群中包含三台宿主机,这里的每一个方块都是我们的物理虚拟机,通过这三个物理机,我们形成了一个完整的集群,从角色划分,可以分为两种

打一个比较形象的比喻,我们可以把Pod理解成一个豆荚,容器就是里面的豆子,是一个共生体。

Pod里面到底装的是什么?

具体怎么部署Pod里面的容器,是按照我们项目的特性和资源的分配进行合理选择的。

pause容器:

Pause容器 全称infrastucture container(又叫infra)基础容器,作为init pod存在,其他pod都会从pause 容器中fork出来,这个容器对于Pod来说是必备的 一个Pod中的应用容器共享同一个资源:

在上图中如果没有 pause容器 ,我们的Nginx和Ghost,Pod内的容器想要彼此通信的话,都需要使用自己的IP地址和端口,才可以彼此进行访问,如果有 pause容器 ,对于整个Pod来说,我们可以看做一个整体,也就是我们的Nginx和Ghost直接使用localhost就可以进行访问了,他们唯一不同的就只是端口,这里面可能看着觉得比较简单,但其实是使用了很多网络底层的东西才实现的,感兴趣的小伙伴可以自行了解一下。

在 Kubernetes中,每个Pod都会被分配一个单独的IP地址,但是Pod和Pod之间,是无法直接进行交互的,如果想要进行网络通信,必须要通过另外一个组件才能交流,也就是我们的 Service

Service是服务的意思,在K8S中 Service 主要工作就是将多个不同主机上的Pod,通过 Service 进行连通,让Pod和Pod之间可以正常的通信

我们可以把 Service 看做一个域名,而相同服务的Pod集群就是不同的ip地址, Service是通过 Label Selector来进行定义的。

使用NodePort提供外部访问,只需要在每个Node上打开一个主机的真实端口,这样就可以通过Node的客户端访问到内部的Service。

Label 一般以 kv的方式附件在各种对象上,Label 是一个说明性的标签,它有着很重要的作用,我们在部署容器的时候,在哪些Pod进行操作,都需要根据Label进行查找和筛选,我们可以理解Label是每一个Pod的别名,只有取了名称,作为K8S的Master主节点才能找到对应的Pod进行操作。

Kubelet 的终极指南:管理 Kubernetes 节点的关键组件 (kubelet的作用) 第1张

用户通过Kubectl 提交一个创建Replication Controller 请求,这个请求通过 API Server写入 etcd中,这个时候 Controller Manager 通过 API Server 的监听到了创建的命名,经过它认真仔细的分析以后,发现当前集群里面居然还没有对应的Pod实例,赶紧根据 Replication Controller 模板定义造一个Pod对象,再通 过Api Server写到我们 etcd里面

到下面,如果被 Scheduler 发现了,好家伙不告诉我???,无业游民,这家伙一看就不是一个好人啊,它就会立即运行一个复杂的调度流程,为这个新的Pod选一个可以落户的Node,总算有个身份了,真是让人操心,然后通过 API Server将这个结果也写到etcd中,随后,我们的Node 上运行的小管家 Kubelet 进程通过 API Server检测到这个 新生的小宝宝——“Pod”,就会按照它,就会按照这个小宝宝的特性,启动这个Pod并任劳任怨的负责它的下半生,直到Pod的生命结束。

然后我们通过 Kubectl 提交一个新的映射到这个Pod的Service的创建请求, Controller Manager 会通过Label标签查询到相关联的Pod实例,生成Service的Endpoints的信息,并通过 API Server写入到etcd中,接下来,所有 Node 上运行的Proxy进程通过 Api Server查询并监听 Service对象 与其对应的 Endpoints 信息,建立一个软件方式的负载均衡器来实现 Service 访问到后端Pod的流量转发功能。

kube-proxy:是一个代理,充当这多主机通信的代理人,前面我们讲过Service实现了跨主机、跨容器之间的网络通信,在技术上就是通过 kube-proxy 来实现的,service是在逻辑上对Pod进行了分组,底层是通过 kube-proxy 进行通信的

kubelet:用于执行K8S的命令,也是K8S的核心命令,用于执行K8S的相关指令,负责当前Node节点上的Pod的创建、修改、监控、删除等生命周期管理,同时Kubelet定时“上报”本Node的状态信息到API Server里

etcd:用于持久化存储集群中所有的资源对象,API Server提供了操作 etcd的封装接口API,这些API基本上都是对资源对象的操作和监听资源变化的接口

API Server :提供资源对象的操作入口,其他组件都需要通过它提供操作的API来操作资源数据,通过对相关的资源数据“全量查询”+ “变化监听”,可以实时的完成相关的业务功能。

Scheduler :调度器,负责Pod在集群节点中的调度分配。

Controller Manager:集群内部管理控制中心,主要是实现Kubernetes 集群的故障检测和恢复的自动化工作。比如Pod的复制和移除,Endpoints对象的创建和更新,Node的发现、管理和状态监控等等都是由Controller Manager 完成。

到这里K8S的基本情况我们就讲解完毕了,有喜欢的小伙伴记得 点赞关注 ,相比如Docker来说K8S有着更成熟的功能,经过谷歌大量实践的产物,是一个比较成熟和完善的系统。

关于K8S大家有什么想要了解或者疑问的地方欢迎大家留言告诉我。

我是牧小农,一个卑微的打工人,如果觉得文中的内容对你有帮助,记得一键三连,你们的三连是小农最大的动力。

kubelet 的工作流程

kubernetes 是一个分布式的集群管理系统,在每个节点(node)上都要运行一个 worker 对容器进行生命周期的管理,这个 worker 程序就是kubelet。 简单地说,kubelet的主要功能就是定时从某个地方获取节点上 pod/container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态。 kubelet 除了这个最核心的功能之外,还有很多其他特性: * 定时汇报当前节点的状态给 apiserver,以供调度的时候使用 *镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源 * 运行 HTTP Server,对外提供节点和 pod 信息,如果在 debug 模式下,还包括调试信息 * 等等…… 集群状态下,kubelet 会从 master 上读取信息,但其实 kubelet 还可以从其他地方获取节点的 pod 信息。 目前 kubelet 支持三种数据源: *本地文件 *通过 url 从网络上某个地址来获取信息 *API Server:从 kubernetes master 节点获取信息 从管理的对象来说,kubelet 目前支持 docker 和 rkt ,默认情况下使用的 docker。 Pod 管理 在 kubernetes 的设计中,最基本的管理单位是 pod,而不是 container。 pod 是 kubernetes 在容器上的一层封装,由一组运行在同一主机的一个或者多个容器组成。 如果把容器比喻成传统机器上的一个进程(它可以执行任务,对外提供某种功能),那么 pod 可以类比为传统的主机:它包含了多个容器,为它们提供共享的一些资源。 之所以费功夫提供这一层封装,主要是因为容器推荐的用法是里面只运行一个进程,而一般情况下某个应用都由多个组件构成的。 pod 中所有的容器最大的特性也是最大的好处就是共享了很多资源,比如网络空间。 pod 下所有容器共享网络和端口空间,也就是它们之间可以通过localhost访问和通信,对外的通信方式也是一样的,省去了很多容器通信的麻烦。 除了网络之外,定义在 pod 里的 volume 也可以 mount 到多个容器里,以实现共享的目的。 最后,定义在 pod 的资源限制(比如 CPU 和 Memory) 也是所有容器共享的。 容器健康检查 创建了容器之后,kubelet 还要查看容器是否正常运行,如果容器运行出错,就要根据设置的重启策略进行处理。 检查容器是否健康主要有三种方式:执行命令,http Get,和tcp连接。 不管用什么方式,如果检测到容器不健康,kubelet 会删除该容器,并根据容器的重启策略进行处理(比如重启,或者什么都不做)。 容器监控 kubelet 还有一个重要的责任,就是监控所在节点的资源使用情况,并定时向 master 报告。 知道整个集群所有节点的资源情况,对于 pod 的调度和正常运行至关重要。 kubelet 使用 cAdvisor 进行资源使用率的监控。 cAdvisor 是 google 开源的分析容器资源使用和性能特性的工具,在 kubernetes 项目中被集成到 kubelet 里,无需额外配置。 默认情况下,你可以在localhost:4194地址看到 cAdvisor 的管理界面。 除了系统使用的 CPU,Memory,存储和网络之外,cAdvisor 还记录了每个容器使用的上述资源情况。 入口程序 cmd/kublet/ --> main 方法 1. 创建kubeletFlags数据结构(对应kubelet命令行参数); 2. 创建kubeletConfigration数据结构; 3. 创建kubeletServer数据结构,此数据结构包括kubeletFlags、kubeletConfigration; 4. 启动kubelet Configuration controller,此功能开始配置和状态的循环同步; 5. 创建kubeletDeps数据结构;启动程序 cmd/kubelet/app/--> Run 方法 1. 判断kubelet是否以standalone模式运行; 2. 创建对象kubeClient、evnetClient,用来和 apiserver 通信。 heartbeatClient、externalkubeClient、ContainerManager;并设置OOM。 3.调用RunKubelet。 运行 kubelet,这个函数会启动 goroutine 一直运行,是 kubelet 核心功能执行的地方。

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

Kubelet 的终极指南:管理 Kubernetes 节点的关键组件 (kubelet的作用) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!