K8s 从入门到上手:核心概念+常用工具全解析

一、K8s 核心概念(逐个拆解,从基础到核心)

先明确一个前提:K8s的核心目标是「自动化管理容器化应用」,所有概念都是围绕这个目标设计的。我们从最基础的"集群"开始,逐个讲解。

1. 集群(Cluster)

这是K8s的"根基",也是最基础的概念。集群是由一组节点(Node)组成的集合,用于统一运行容器化应用,可以把它理解为一个"大机房",里面有很多台服务器(节点),所有容器化应用都运行在这个"大机房"里。

一个完整的K8s集群分为两个核心部分,缺一不可:

  • 控制平面(Control Plane):相当于"大机房的中控室",负责管理和调度整个集群,决定哪个容器跑在哪个节点上、监控容器状态、处理故障等,是集群的"大脑"。
  • 工作节点(Worker Node):相当于"大机房里的服务器",是实际运行容器的地方,接收中控室的指令,执行容器的创建、启动、停止等操作。

补充:K8s集群不支持单点运行(生产环境),控制平面通常会部署多个节点,避免单点故障;工作节点可以根据业务需求横向扩展,节点越多,能运行的容器就越多。

2. 节点(Node)

节点是集群的"最小硬件单元",本质上是一台物理机(服务器)或虚拟机,是容器运行的载体。无论是控制平面节点还是工作节点,都需要安装K8s的核心组件,才能加入集群。

工作节点上必须安装的3个核心组件(重点):

  • Kubelet:节点的"代理人",负责和控制平面通信,接收控制平面的指令(比如"启动一个容器"),同时监控容器和节点的状态,把状态上报给控制平面,确保容器按照要求运行。
  • 容器运行时(Container Runtime):用于运行容器的软件,相当于"容器的发动机",K8s支持多种容器运行时,比如Docker、containerd等(目前主流是containerd,Docker已逐步被淘汰)。
  • Kube-proxy:节点的"网络代理",负责处理节点上的网络通信,实现Pod之间、Pod与外部的网络互通,同时提供简单的负载均衡功能。

简单说:节点是"容器的宿主",没有节点,容器就没有运行的地方;而Kubelet、容器运行时、Kube-proxy,是节点能"干活"的必备工具。

3. Pod

这是K8s中「最小的可部署、可管理单元」,也是新手最容易混淆的概念------Pod不是容器,而是容器的"包装器",一个Pod可以包含一个或多个紧密相关的容器

举个例子:一个Web应用,需要一个运行Web服务的容器,还需要一个运行日志收集的容器,这两个容器必须紧密配合(日志收集容器要收集Web容器的日志),就可以把它们打包在同一个Pod里。

Pod的核心特点(必记):

  • 共享资源:同一个Pod里的所有容器,共享同一个网络命名空间(即同一个IP地址)和存储卷,容器之间可以通过localhost直接通信,无需额外配置网络。
  • 生命周期短暂:Pod是"一次性"的,一旦被删除、故障或节点宕机,Pod会直接消失,不会自动恢复(需要借助控制器管理)。
  • 不可直接扩容:不能直接给一个Pod增加副本,要扩容只能通过控制器创建多个相同的Pod。

补充:K8s中,所有容器都必须运行在Pod里,没有"脱离Pod的容器"------这是K8s的核心设计原则之一。

4. 控制器(Controller)

前面说过,Pod的生命周期很短暂,一旦故障就会消失,而控制器的作用就是「保障Pod的运行状态符合预期」,相当于Pod的"管家",自动处理Pod的创建、删除、扩容、故障恢复等操作。

K8s有多种控制器,重点掌握4种最常用的(新手必懂),逐个说明:

(1)Deployment:最常用的无状态控制器

用于管理「无状态应用」(比如Web服务、API接口),是新手最常使用的控制器,核心功能是:

  • 确保指定数量的Pod副本运行(比如指定3个副本,控制器会自动维持3个Pod,少了就补,多了就删);
  • 支持滚动更新(比如升级应用版本时,先启动新Pod,再删除旧Pod,不中断服务);
  • 支持回滚(如果升级失败,能快速回滚到上一个稳定版本)。

示例:通过Deployment创建3个Web服务Pod,即使其中1个Pod故障,控制器会自动再创建1个,确保始终有3个Pod在运行。

(2)StatefulSet:有状态应用控制器

用于管理「有状态应用」(比如数据库、Redis集群、ZooKeeper),这类应用的特点是:需要固定的网络标识(IP、主机名)、固定的存储(数据不能丢失)、有序的启动/停止。

StatefulSet的核心优势:给每个Pod分配固定的名称和网络标识,即使Pod重建,名称和IP也不会变;同时绑定固定的存储卷,确保数据不丢失。

注意:无状态应用和有状态应用的核心区别------无状态应用不需要保存数据,多个Pod完全一致,可以随意替换;有状态应用需要保存数据,每个Pod有自己的独特标识,不能随意替换。

(3)DaemonSet:全局守护控制器

核心功能:确保集群中的每个节点(或符合条件的节点)上,都运行一个相同的Pod副本,常用于部署"集群级别的公共服务"。

常用场景:日志收集(比如Fluentd、Logstash)、监控代理(比如Prometheus Node Exporter)、网络插件(比如Calico)------这些服务需要在每个节点上都运行,才能覆盖整个集群。

(4)Job/CronJob:任务类控制器

用于运行「一次性任务」或「定时任务」,区别于前面的"长期运行服务":

  • Job:一次性任务,比如数据备份、批量处理(比如批量导入数据),任务执行完成后,Pod会自动终止,不会继续运行;
  • CronJob:定时任务,类似Linux的crontab,比如每天凌晨3点执行数据备份,按照指定的时间周期重复执行任务。

5. 服务(Service)

前面说过,Pod的生命周期短暂,一旦重建,IP地址会发生变化------如果其他Pod需要访问这个Pod,IP变了就无法通信,Service就是为了解决这个问题而设计的。

简单说:Service是Pod的"固定访问入口",它定义了一组Pod的逻辑集合,为这组Pod提供一个固定的IP地址和访问端口,无论Pod如何重建、IP如何变化,其他Pod或外部服务,都可以通过Service的固定地址访问到目标Pod。

Service的核心原理:通过"标签选择器"(Label Selector)匹配Pod,只要Pod的标签和Service的标签一致,就会被纳入Service的管理范围;当Pod的IP变化时,Service会自动更新内部的Pod列表,确保访问不中断。

新手必懂的4种Service类型:

  • ClusterIP(默认):只能在集群内部访问,外部无法访问,适合集群内部Pod之间的通信(比如Web Pod访问数据库Pod);
  • NodePort:在每个节点上开放一个固定端口,外部可以通过"节点IP+节点端口"访问Service,适合测试环境(比如本地调试);
  • LoadBalancer:适用于云环境(比如阿里云、腾讯云),会自动创建云厂商的负载均衡器,外部通过负载均衡器的IP访问Service,适合生产环境;
  • ExternalName:将Service映射到外部域名(比如映射到www.baidu.com),适合集群内部Pod访问外部服务。

6. 标签(Label)与标签选择器(Label Selector)

这是K8s中「用于分组和筛选资源」的核心机制,相当于给资源(Pod、Service、Deployment等)贴"标签",再通过"标签选择器"筛选出需要的资源。

举个例子:给3个Web Pod贴上标签「app: web」,给2个数据库Pod贴上标签「app: db」;然后创建一个Service,通过标签选择器「app: web」,就能精准匹配到3个Web Pod,实现对Web Pod的统一访问。

核心特点:

  • 标签是键值对(比如app: web、env: test、version: v1),可以随意定义,灵活分组;
  • 一个资源可以贴多个标签,一个标签选择器可以匹配多个标签;
  • K8s的很多核心功能都依赖标签选择器(比如Service匹配Pod、Deployment管理Pod)。

7. 存储卷(Volume)

容器的存储是"临时的"------如果容器被删除,容器内的数据会丢失(比如数据库容器,删除后数据就没了),Volume就是为了解决「容器数据持久化」而设计的。

简单说:Volume是一个"共享存储目录",可以挂载到Pod的容器中,容器可以读写这个目录里的数据,即使容器被删除,Volume里的数据也不会丢失(Volume的生命周期和Pod无关,由K8s统一管理)。

新手常用的2种Volume类型:

  • EmptyDir:临时存储,和Pod的生命周期一致,Pod删除,EmptyDir里的数据也会删除,适合临时缓存数据(比如容器之间共享临时文件);
  • PersistentVolume(PV)+ PersistentVolumeClaim(PVC):持久化存储,PV是集群级别的存储资源(比如云盘、本地磁盘),PVC是Pod对存储资源的"申请"------Pod通过PVC申请存储,PVC绑定PV,实现数据持久化(适合数据库、Redis等需要保存数据的应用)。

8. 命名空间(Namespace)

用于「隔离集群资源」,相当于给集群划分"不同的房间",每个房间里有自己的Pod、Service、Deployment等资源,房间之间的资源相互隔离,不会相互影响。

核心作用:解决多团队、多环境的资源隔离问题------比如开发环境、测试环境、生产环境,分别创建不同的命名空间(dev、test、prod),每个环境的资源放在对应的命名空间里,避免开发环境的Pod影响生产环境。

补充:K8s默认有3个命名空间:default(默认命名空间,未指定命名空间的资源都会放在这里)、kube-system(K8s核心组件所在的命名空间)、kube-public(公共资源命名空间)。

9. 配置与密钥(ConfigMap、Secret)

用于管理Pod的配置信息,避免把配置硬编码到容器镜像中(比如数据库地址、端口、密钥等),方便配置的修改和管理。

两者的区别(重点):

  • ConfigMap:用于存储「非敏感配置」,比如数据库地址、端口、应用的配置参数(比如日志级别),数据以明文形式存储;
  • Secret:用于存储「敏感配置」,比如数据库密码、API密钥、证书等,数据会进行Base64编码(注意:Base64是编码,不是加密,生产环境需要配合加密插件使用)。

使用方式:将ConfigMap/Secret挂载到Pod的容器中,容器可以直接读取里面的配置,修改ConfigMap/Secret后,Pod无需重启(部分场景需要重启)就能加载新配置。

二、K8s 常用工具(新手必备,提升效率)

掌握了核心概念后,光靠命令行操作K8s会很繁琐,下面介绍几款新手必备的常用工具,覆盖"集群部署、日常操作、可视化、监控"等场景,帮你快速上手K8s。

1. kubectl:K8s 命令行工具(必备)

这是K8s的官方命令行工具,是操作K8s集群的"万能工具",所有集群操作都可以通过kubectl命令完成(比如创建Pod、查看Pod状态、删除Service等)。

新手必记的常用命令(高频):

  • kubectl get pods:查看当前命名空间的所有Pod状态;
  • kubectl get services:查看当前命名空间的所有Service;
  • kubectl get deployment:查看当前命名空间的所有Deployment;
  • kubectl create -f xxx.yaml:通过yaml文件创建资源(Pod、Service等);
  • kubectl apply -f xxx.yaml:创建或更新资源(推荐使用,比create更灵活);
  • kubectl delete pod <pod名称>:删除指定Pod;
  • kubectl logs <pod名称>:查看Pod的日志(排查故障常用);
  • kubectl exec -it <pod名称> -- /bin/bash:进入Pod的容器内部(调试常用)。

补充:kubectl的配置文件默认在~/.kube/config,里面存储了集群的访问地址、证书等信息,只要配置好这个文件,就能通过kubectl操作远程集群。

2. Minikube:本地K8s集群工具(新手入门首选)

对于新手而言,搭建一个真实的K8s集群(多节点)比较复杂,而Minikube可以在本地快速搭建一个「单节点的K8s集群」,用于学习、测试K8s功能,无需复杂配置。

核心特点:

  • 轻量:占用资源少,支持Windows、Mac、Linux系统;
  • 便捷:一键启动、停止、删除集群,比如minikube start就能启动集群;
  • 功能完整:支持K8s的所有核心功能,能模拟真实集群的大部分场景。

使用场景:新手学习K8s概念、测试yaml配置文件、调试简单的容器化应用。

3. Helm:K8s 包管理工具(简化部署)

K8s中,部署一个应用往往需要创建多个资源(Pod、Service、Deployment、ConfigMap等),每个资源都需要写yaml文件,操作繁琐。Helm的作用就是「将多个资源打包成一个"包"(Chart)」,一键部署、升级、回滚应用,相当于K8s的"yum"或"npm"。

核心优势:

  • 简化部署:一个Chart包含所有应用所需的资源,一键部署(helm install);
  • 版本管理:支持Chart的版本控制,升级、回滚应用只需指定版本;
  • 共享复用:社区有大量现成的Chart(比如MySQL、Redis、Nginx),可以直接下载使用,无需自己写yaml。

常用命令:helm install(部署应用)、helm upgrade(升级应用)、helm rollback(回滚应用)、helm repo add(添加Chart仓库)。

4. Dashboard:K8s 可视化管理工具(直观)

kubectl命令行操作不够直观,而Dashboard是K8s的官方可视化工具,通过Web界面可以直观地查看集群资源(Pod、Service、Deployment等)的状态,还能通过界面创建、删除、编辑资源,适合新手快速了解集群状态。

核心功能:

  • 查看集群所有资源的状态(运行状态、资源占用等);
  • 通过界面创建Pod、Service、Deployment等资源;
  • 查看Pod日志、进入容器内部、执行命令;
  • 管理命名空间、配置、密钥等资源。

补充:Dashboard默认不对外暴露,需要通过kubectl port-forward命令转发端口,才能访问Web界面。

5. 其他常用工具(按需选择)

  • kube-ps1:K8s命令行提示符工具,能在终端显示当前所在的K8s集群和命名空间,避免操作错集群;
  • k9s:终端版的K8s可视化工具,比kubectl更直观,操作更便捷,适合习惯终端操作的开发者;
  • Prometheus + Grafana:K8s监控工具,Prometheus收集集群和应用的监控数据,Grafana可视化监控指标(比如CPU、内存占用、Pod运行状态),生产环境必备;
  • Kompose:Docker Compose转K8s工具,如果你习惯用Docker Compose部署应用,可以通过Kompose将docker-compose.yml文件转换成K8s的yaml文件,快速迁移到K8s集群。

三、新手避坑指南(重点提醒)

  1. 不要混淆Pod和容器:Pod是容器的包装器,一个Pod可以有多个容器,容器不能脱离Pod运行;
  2. 不要直接操作Pod:生产环境中,不要直接创建、删除Pod,要通过Deployment、StatefulSet等控制器管理Pod,否则Pod故障后无法自动恢复;
  3. 标签和标签选择器要对应:Service要通过标签选择器匹配Pod,如果标签不匹配,Service无法访问到Pod;
  4. 区分无状态和有状态应用:无状态应用用Deployment,有状态应用用StatefulSet,不要用错控制器;
  5. 新手先从Minikube入手:不要一开始就搭建多节点集群,先用Minikube熟悉概念和操作,再逐步过渡到真实集群。

四、总结

K8s的核心概念看似繁杂,但只要抓住"自动化管理容器"这个核心目标,逐个拆解、理解每个概念的作用和配合关系,就能快速建立知识框架------从集群、节点,到Pod、控制器、Service,再到标签、存储、配置,每个概念都有其明确的用途,环环相扣。

而常用工具则是提升效率的关键:kubectl是基础,Minikube适合入门,Helm简化部署,Dashboard直观可视化,按需选择工具,能让你的K8s操作更高效。

对于新手而言,建议先通过Minikube搭建本地集群,结合kubectl命令,亲手操作每个概念(比如创建Pod、部署Deployment、配置Service),再尝试用Helm部署一个简单的应用,逐步积累实战经验。

最后,觉得本文对你有帮助的话,欢迎点赞、收藏、转发,你的支持是我更新的动力!

相关推荐
随风,奔跑1 小时前
Nginx
服务器·后端·nginx·web
小村儿4 小时前
给 AI Agent 装上"长期记忆":Karpathy 的 LLM Wiki 思想,我做成了工具
前端·后端·ai编程
何陋轩4 小时前
Spring AI实战指南:在Java项目中集成大语言模型
人工智能·后端·机器学习
用户8356290780515 小时前
Python 操作 PowerPoint 表格的创建与格式化
后端·python
forestqq5 小时前
基于openeuler2403sp3的容器,打包django运行环境镜像
后端·python·django
塔克拉玛攻城狮5 小时前
详解cni插件cilium篇一:它为什么这么快?它还有哪些高级功能?
kubernetes·cilium
站着5 小时前
TRAE SOLO 移动端正式上线:手机也是随身工位,随时随地进入「Vibe Working」
后端
盖世英雄酱581365 小时前
6000条数据执行时间9s??
数据库·后端
用户8356290780515 小时前
使用 Python 处理 Word 文档书签
后端·python