K8s 核心三组件:kubelet、kubeadm、kubectl 知识点梳理

在 Kubernetes(简称 K8s)生态中,kubeletkubeadmkubectl 是三个最基础且核心的组件 ------ 它们分工明确又协同工作,支撑起 K8s 集群的部署、运行与管理。本文将系统梳理这三个组件的核心知识点,帮你快速掌握其定位与用法。​

一、先搞懂:三者的核心定位与关系​

在开始细分前,先建立一个整体认知:​

  • kubeadm:「集群搭建工具」------ 负责初始化 K8s 集群、添加节点、升级集群等 "搭建层面" 的操作;
  • kubelet:「节点管家」------ 运行在每个 K8s 节点(Master/Worker)上,负责管理 Pod、容器的生命周期,确保容器按预期运行;
  • kubectl:「命令行客户端」------ 用户与 K8s 集群交互的 "入口",通过命令向集群发送指令,实现资源查询、创建、删除等操作。

简单说:用 kubeadm 搭好集群,用 kubelet 维持节点 / 容器运行,用 kubectl 管理集群资源。​

二、组件详解:从功能到实操​

  1. kubeadm:K8s 集群的 "搭建助手"​

(1)核心定位​

kubeadm 是官方提供的集群部署工具,旨在简化 K8s 集群的初始化与节点管理流程(替代手动部署 etcd、API Server 等组件的复杂操作)。它遵循 K8s 最佳实践,确保集群组件的版本兼容与配置规范。​

(2)核心功能​

  • 初始化 Master 节点:生成集群证书、启动 API Server、etcd、Controller Manager 等核心组件;
  • 添加 Worker 节点:生成节点加入集群的令牌(Token),实现节点快速接入;
  • 集群升级:一键升级 K8s 版本(如从 1.27 升级到 1.28),自动处理组件依赖;
  • 证书管理:生成、续约集群所需的 TLS 证书(如 API Server 与 kubelet 的通信证书)。

(3)常用实操命令​

|---------------------------------------------------------------------------------------|--------------------------------------------------------------|
| 命令​ | 作用​ |
| kubeadm init​ | 初始化 Master 节点(需指定 Pod 网段,如--pod-network-cidr=10.244.0.0/16)​ |
| kubeadm join <MasterIP:6443> --token <令牌> --discovery-token-ca-cert-hash <哈希值>​ | 将 Worker 节点加入集群(命令由kubeadm init执行后输出)​ |
| kubeadm token create --print-join-command​ | 重新生成节点加入命令(旧令牌过期时使用)​ |
| kubeadm upgrade plan​ | 检查可升级的 K8s 版本​ |
| kubeadm upgrade apply <版本号>​ | 执行集群升级​ |
| kubeadm reset​ | 重置节点(从集群移除时使用,会清理证书、配置文件等)​ |

(4)注意事项​

  • kubeadm 仅负责 "搭建集群",不包含网络插件(需手动部署 Calico、Flannel 等);
  • 初始化前需确保节点满足基础条件(如关闭 Swap、配置内核参数、安装容器运行时)。
  1. kubelet:节点上的 "容器管家"​

(1)核心定位​

kubelet 是运行在每个 K8s 节点上的代理程序 ,是节点与集群控制平面(API Server)的 "桥梁"。它的核心目标是:确保 Pod 中定义的容器都正常运行。​

(2)核心功能​

  • 接收 API Server 指令:从 K8s API Server 获取节点上的 Pod 配置(Pod Spec),并按配置启动 / 停止容器;
  • 容器生命周期管理:通过容器运行时(如 containerd、CRI-O)创建容器、监控容器状态(如健康检查、存活探针),若容器异常则重启;
  • 节点状态上报:定期向 API Server 汇报节点的资源使用情况(CPU、内存)、节点健康状态(Ready/NotReady);
  • 资源约束:确保容器不超出 Pod Spec 中定义的资源限制(如resources.limits.cpu)。

(3)工作原理​

  1. kubelet 启动后,会持续向 API Server "监听"(Watch)当前节点的 Pod 资源;
  1. 当收到新的 Pod 调度指令时,通过CRI(容器运行时接口) 调用容器运行时(如 containerd)创建容器;
  1. 定期检查容器状态,若容器退出且符合重启策略(如restartPolicy: Always),则重新启动容器;
  1. 将容器 / 节点的状态通过 API Server 上报到 etcd(K8s 的数据库)。

(4)常用实操命令​

|----------------------------|--------------------------|
| 命令​ | 作用​ |
| systemctl status kubelet​ | 查看 kubelet 服务状态​ |
| systemctl restart kubelet​ | 重启 kubelet 服务(配置修改后需执行)​ |
| journalctl -u kubelet -f​ | 实时查看 kubelet 日志(排查问题常用)​ |
| kubelet --version​ | 查看 kubelet 版本​ |

(5)关键配置​

kubelet 的配置文件通常位于 /var/lib/kubelet/config.yaml,核心配置项包括:​

  • clusterDNS:Pod 的 DNS 服务器地址(如 K8s 的 coredns 服务地址);
  • clusterDomain:K8s 集群的域名(默认cluster.local);
  • cgroupDriver:与容器运行时一致的 cgroup 驱动(如systemd,需与 containerd 配置匹配)。
  1. kubectl:用户与集群的 "交互入口"​

(1)核心定位​

kubectl 是 K8s 的命令行客户端工具,用户通过 kubectl 向 K8s API Server 发送请求,实现对集群中资源(Pod、Service、Deployment 等)的查询、创建、更新、删除等操作。​

(2)核心原理​

kubectl 的本质是 "API 请求封装器":​

  1. 用户输入 kubectl 命令(如kubectl get pods);
  1. kubectl 将命令转换为 K8s API 请求(如 GET /api/v1/namespaces/default/pods);
  1. 通过kubeconfig文件(默认~/.kube/config)中的认证信息(证书、令牌)与 API Server 建立连接;
  1. 接收 API Server 返回的结果,并以友好格式(如表格、JSON)展示给用户。

(3)常用命令分类​

① 资源查询类(最常用)​

|-------------------------------|---------------------------------------|
| 命令​ | 作用​ |
| kubectl get pods​ | 查看当前命名空间的所有 Pod​ |
| kubectl get pods -n <命名空间>​ | 查看指定命名空间的 Pod(如-n kube-system查看系统组件)​ |
| kubectl get pods -o wide​ | 查看 Pod 详情(包含节点、IP 地址)​ |
| kubectl get deployment​ | 查看 Deployment 资源​ |
| kubectl get service​ | 查看 Service 资源(暴露 Pod 的网络服务)​ |
| kubectl get nodes​ | 查看集群所有节点状态​ |

② 资源创建 / 删除类​

|--------------------------------------------------|----------------------------------------------------------------|
| 命令​ | 作用​ |
| kubectl create deployment <名称> --image=<镜像>​ | 创建 Deployment(如kubectl create deployment nginx --image=nginx)​ |
| kubectl apply -f <yaml文件>​ | 通过 YAML 文件创建 / 更新资源(推荐生产环境使用)​ |
| kubectl delete pod <Pod名称>​ | 删除指定 Pod​ |
| kubectl delete deployment <名称>​ | 删除指定 Deployment​ |

③ 资源操作类​

|----------------------------------------------------|----------------------------------------|
| 命令​ | 作用​ |
| kubectl exec -it <Pod名称> -- /bin/bash​ | 进入 Pod 的容器内部(交互式终端)​ |
| kubectl logs <Pod名称>​ | 查看 Pod 的日志​ |
| kubectl logs <Pod名称> -f​ | 实时查看 Pod 日志​ |
| kubectl describe pod <Pod名称>​ | 查看 Pod 的详细状态(排查故障常用,如启动失败原因)​ |
| kubectl scale deployment <名称> --replicas=<数量>​ | 扩缩容 Deployment(如--replicas=3表示 3 个副本)​ |

④ 集群管理类​

|---------------------------------------|--------------------------------------------|
| 命令​ | 作用​ |
| kubectl config view​ | 查看当前 kubeconfig 配置​ |
| kubectl config use-context <上下文名称>​ | 切换集群上下文(多集群管理时使用)​ |
| kubectl top pod​ | 查看 Pod 的 CPU / 内存使用情况(需部署 metrics-server)​ |

(4)实用技巧​

  • 别名简化:在~/.bashrc中添加alias k=kubectl,后续可用k get pods替代kubectl get pods;
  • YAML 模板生成:用kubectl create deployment nginx --image=nginx -o yaml --dry-run=client > nginx.yaml生成 YAML 模板,避免手动编写;
  • 格式转换:用kubectl get pods -o json或kubectl get pods -o yaml将结果转为 JSON/YAML 格式,方便后续处理。

三、三者协同:一个完整的集群操作流程​

最后用一个简单案例,看三者如何协同工作:​

  1. 用 kubeadm 搭建集群
  • 执行kubeadm init初始化 Master 节点,生成集群配置;
  • 在 Worker 节点执行kubeadm join加入集群;
  • 部署 Calico 网络插件,确保 Pod 间通信。
  1. 用 kubectl 创建资源
  • 执行kubectl create deployment nginx --image=nginx,向 API Server 发送创建 Deployment 的请求;
  • API Server 将请求存入 etcd,并通知 Controller Manager 创建 Pod。
  1. 用 kubelet 运行容器
  • Worker 节点的 kubelet 监听 API Server,发现新的 Pod 调度到本节点;
  • 通过 CRI 调用 containerd 创建 nginx 容器;
  • 定期检查容器状态,若容器异常则重启,并将状态上报给 API Server。
  1. 用 kubectl 查看结果
  • 执行kubectl get pods,kubectl 向 API Server 请求 Pod 状态;
  • API Server 从 etcd 读取数据,返回给 kubectl,用户看到 "Running" 状态的 nginx Pod。

总结​

kubelet、kubeadm、kubectl 是 K8s 的 "基石三组件":​

  • 没有kubeadm,集群部署会变得繁琐复杂;
  • 没有kubelet,节点无法运行容器,集群就是 "空壳";
  • 没有kubectl,用户无法高效管理集群资源。

掌握这三个组件的核心用法,是入门 K8s 的关键一步。后续可结合实际场景(如部署应用、排查故障)进一步深化理解,让理论落地为实操能力。​

相关推荐
kong@react17 分钟前
wsl2安装及命令(详细教程)
java·docker·容器
学Linux的语莫21 分钟前
k8s知识点整体概览
java·linux·kubernetes
VermiliEiz35 分钟前
二进制文件方式部署k8s(2)
kubernetes·云计算·etcd
古城小栈1 小时前
Spring Boot 容器化:Docker+K8s 部署最佳实践
spring boot·docker·kubernetes
学习3人组1 小时前
docker run 命令详解
运维·docker·容器
神秘面具男032 小时前
Containerd 容器管理工具
容器
阿方索3 小时前
Docker
运维·docker·容器
番茄撒旦在上3 小时前
Docker部署springboot项目
服务器·spring boot·docker·容器
rocksun3 小时前
记一次全自动的问题诊断过程
kubernetes·devops·vibecoding
不想画图3 小时前
Docker 容器核心配置实战:资源管控、数据卷与容器互联
运维·docker·容器