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 的关键一步。后续可结合实际场景(如部署应用、排查故障)进一步深化理解,让理论落地为实操能力。​

相关推荐
m0_579146655 小时前
docker desktop创建ollama容器端口绑定失败
运维·docker·容器
愚昧之山绝望之谷开悟之坡5 小时前
docker和docker compose离线安装-2-报错
运维·docker·容器
AAA小肥杨11 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
xiaogg367815 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
2503_9301239315 小时前
Kubernetes (四)网络插件详解:Flannel 与 Calico 的原理、数据流向与实战对比
网络·容器·kubernetes
K_i13416 小时前
K8s 运维三大核心难题:DNS 故障、有状态存储、AI 赋能 SRE 解决方案
kubernetes
远向光19 小时前
k8s中的控制器
linux·容器·kubernetes
阿里云云原生19 小时前
AI 时代的数据通道:云消息队列 Kafka 的演进与实践
云原生·kafka
阿里云云原生19 小时前
单提交智能评审上线!用云效精准定位复杂 MR 代码问题
云原生