当前位置: 首页 > news >正文

kubectlkubeletrancherhelmkubeadm这几个命令行工具是什么关系?

背景

在最近学习k8s的过程中,发现kubectl&kubelet&rancher&helm&kubeadm这几个命令怎么在交错使用,他们究竟是什么关系?他们分别应该在什么情况下使用呢?这里我进行了简单的总结,做个区分。

各工具说明

Kubectl是一款用于管理和操作 Kubernetes 集群的命令行工具,是Kubernetes 的一个标准 CLI,具备可扩展性,可以通过插件增加新功能和命令。它通过与 Kubernetes 控制平面(通常称为 apiserver)交互来实现对集群内资源的增删改查。

Rancher是一套容器管理平台,提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。所以Rancher不仅可以管理k8s,还可以管理Docker集群。

Kubelet 是 kubernetes 工作节点上的一个代理组件,运行在每个节点上。定期从kube-apiserver组件接收新的或修改的Pod规范,并确保Pod及其容器在期望规范下运行。同时该组件作为工作节点的监控组件,向kube-apiserver汇报主机的运行状况。

Kubeadm 是一个用于在 Kubernetes 中快速部署集群的命令行工具,它主要负责引导和初始化 Kubernetes 主控节点(Master Node)以及创建必需的证书、配置文件和其他资源。

Helm 是 Kubernetes 的包管理器,类似于python的pip,Ubuntu中的apt、CentOS中的yum等,它用于自动创建、打包、配置和部署应用程序和服务到Kubernetes 集群。

关系示意图

图1.1  常用工具关系示意图

关系说明

首先得说明一个内容,那就是Kube-apiserver,对于集群的所有操作都需要通过该API服务,由该服务进行解析识别,才能转换成真正的操作,也就是说Kube-apiserver是kubernetes集群的对外标准API,要操作集群,就需要先对接该Kube-apiserver。

kubectl的执行链路

kubectl是Kubernetes 的一个标准 CLI,用于Kubernetes 集群管理工作,也就是说当通过命令行的方式发出命令,例如执行:

kubectl get pods 

该命令首先被kube-apiserver服务解析到,然后转换成kubernetes集群可以理解的内容进行执行,所有我们日常在命令框窗口中执行最多的也就是kubectl命令。

kubelet的执行链路

接着上面的内容,当kubectl发出命令之后,kube-apiserver进行了解析,然后将命令拆解到了集群的各个节点上,然后由Kubelet在特定节点上真正执行相关任务,例如返回该节点上pods的信息,删除或者创建pod等。

严格来说,kubelet不应该被开放给用户,他是在每个节点上用来保障当前节点的操作满足集群整体要求的组件。

所以一般也不直接使用kubelet,最常用的一个命令也就是

kubelet --version

kubeadm的执行链路

kubeadm是一个用于在 Kubernetes 中快速部署集群的命令行工具。在初始化过程中会通过调用 kubelet来创建容器运行时,并设置各种配置项。在创建集群期间,它会生成相关的证书和配置文件,这些文件将由 kube-apiserver 使用。kubeadm 还会调用 kube-apiserver 提供的集群 API 接口来创建证书、认证配置和集群对象,但它不会直接调用 kube-apiserver 来搭建整个集群。

简单来说,就是通过kubeadm创建了kubernetes集群,然后才有后续的kube-apiserver服务等一系列内容。

helm的执行链路

Helm是一个用于Kubernetes应用程序部署和管理的包管理器,他会生成Kubernetes的配置文件(YAML文件),然后使用kube-apiserver来完成配置文件的部署和管理。可以说Helm是通过调用kube-apiserver来实现Kubernetes资源的部署和管理,但不是直接实现包管理。

Rancher的执行链路

Rancher的命令行工具完全可以和Rancher界面化操作等同理解。

Rancher通过使用自己构建的Rancher Server组件与kube-apiserver进行通信,并以此来管理集群。Rancher Server会提供一个UI界面和API来管理集群的各个方面,它通过与kube-apiserver进行交互,来创建、修改和删除Kubernetes集群中的资源,例如节点的添加和删除、应用的部署和监控等。

其中界面就是我们见到的这个页面。

而命令行就是前文介绍的这个工具:

相关文章:

  • vue项目心得(复盘)
  • 使用群晖docker将小爱音箱接入chatgpt
  • 玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 编译构建及此过程中的踩坑填坑(3)
  • Python用法:if __name__ == “__main__“的作用
  • 【漏洞复现】锐捷RG-UAC统一上网行为管理系统信息泄露漏洞
  • 【数据库系统概念】第三章 SQL语句(下)~重要!!!
  • oracle重启数据库lsnrctl重启监听
  • TDengine 签约西电电力
  • DevExpress历史安装文件包集合
  • 使用Nonebot编写QQ机器人
  • 【以题代复习】计算机网络 第二章
  • C++自制小游戏《屠夫躲猫猫》
  • 软件测试|Django 入门:构建Python Web应用的全面指南
  • Spring Data JPA入门到放弃
  • 游戏、设计选什么内存条?光威龙武系列DDR5量大管饱
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • iOS 颜色设置看我就够了
  • IP路由与转发
  • java多线程
  • JS题目及答案整理
  • mysql innodb 索引使用指南
  • tweak 支持第三方库
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 赢得Docker挑战最佳实践
  • 正则表达式小结
  • scrapy中间件源码分析及常用中间件大全
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #大学#套接字
  • (NSDate) 时间 (time )比较
  • (动态规划)5. 最长回文子串 java解决
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)大型网站的系统架构
  • (转)四层和七层负载均衡的区别
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ NOI 2001 ] 食物链
  • [Android] Implementation vs API dependency
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [C++] 统计程序耗时
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [C语言]——分支和循环(4)
  • [Lua实战]整理Lua中忽略的问题
  • [MySQL]基础的增删改查
  • [osgearth]通过API创建一个earth模型
  • [PyQt] 使用.qrc 生成资源文件供程序中使用
  • [python 邮件处理]
  • [RISC-V]verilog
  • [ROS2] --- ROS diff ROS2
  • [SCOI2010]传送带
  • [Spring] Spring注解简化开发
  • [Unity3d]安卓无法加载assetbundle的问题
  • [Valkyrie网络测试仪-软件使用技巧] - Scheduler动作录制,定制打流过程(中途启停/调整带宽/使能部分流量)