Kubernetes(K8s) 零基础终极详解【纯小白专属·非计算机专业友好】

✅ 完整版内容:集群组件超详讲 + kubectl命令全解 + YAML全字段释义 + 标签/存储/持久化/外部访问/容器弹性 全套配置
✅ 注释/代码关键字/配置值/数字 分色显示 | 无专业黑话 | 掰开揉碎讲解 | 零基础轻松看懂

💡 前置小白必懂:3个基础概念(看不懂这个,后面全白学)

这3个概念是K8s的入门基石,纯大白话解释,没有任何专业术语,必须先记住:

💡 通俗比喻:K8s集群 = 一个工厂;Master节点 = 工厂的厂长办公室;Worker节点 = 工厂的生产车间;Pod = 车间里的生产线;容器 = 生产线上的机器;K8s = 工厂的总调度员。

一、K8s集群核心组件 【超详细介绍·纯小白版】⭐重中之重⭐

K8s的集群,是由两类完全不同的「服务器节点」组成的,这两类节点分工明确,缺一不可,就像「厂长」和「工人」,一个负责指挥,一个负责干活。
所有组件讲解都包含:【大白话名称】+【核心作用】+【通俗比喻】+【详细解释】,保证看懂。

▷ 第一类:Master 节点(控制平面 / 主控节点)- 集群的「大脑/厂长」

一句话总结:Master节点是整个集群的「总指挥、总管家、总决策人」,只负责发号施令,不运行任何业务软件(容器),所有的管理、调度、配置、存储,都由Master节点完成。

运行要求:集群里至少要有1台Master节点,生产环境为了防止故障,一般会有3台/5台做备份。

✅ Master节点的5个核心组件(全部必懂,逐一说清)

▷ 第二类:Worker 节点(工作节点 / 数据平面)- 集群的「手脚/工人/生产车间」

一句话总结:Worker节点是整个集群的「执行单元、干活的主力」,不做任何决策,只负责执行Master节点下达的命令,所有的业务软件(容器、Pod),最终都运行在Worker节点上。

运行要求:集群里可以有1台、多台甚至几十台Worker节点,节点越多,能运行的软件就越多,集群的能力就越强。

✅ Worker节点的4个核心组件(全部必懂,逐一说清)

💡 小白必懂的组件协同流程(一句话看懂):你执行命令 → 命令传给Master的kube-apiserver → etcd记录指令 → kube-scheduler分配到Worker节点 → kubelet接收指令并启动Pod → 容器运行时运行容器 → kube-proxy配置网络 → kube-controller-manager全程监控状态。

二、K8s 核心命令 【超详细讲解·纯小白版】⭐最全最细⭐

这部分是小白实操的核心,所有对K8s集群的操作,都只能通过一个命令工具完成:kubectl(读音:k8s-ctl)。
所有内容都是纯小白视角:命令格式+大白话用途+执行效果+完整示例+结果解读,没有任何省略,学完就能直接用!

▷ 前置必懂:kubectl命令的【通用格式】(万能公式,必须记住)

kubectl [操作指令] [资源类型] [资源名称] [可选参数]
⚠️ 小白重点:命令里的单词大小写敏感!比如 get Pods 可以,get pods 也可以,但 Get Pods 就报错!所有命令都用小写即可。

▷ 第一类:集群/节点状态查看命令(最常用,占30%,必学)

大白话用途:查看集群的健康状态、有多少台服务器、服务器是否正常运行,是你操作集群的「第一步」,每次操作前都要先看这个。

# 命令1:查看集群里所有的节点(Master+Worker),最常用!
kubectl get nodes
# 执行效果:显示节点名称、状态、角色、版本、启动时间
# 小白必看结果:STATUS列显示【Ready】就是正常,显示其他都是故障!

# 命令2:查看节点的【详细信息】,节点故障时必用
kubectl describe node 节点名称

# 命令3:查看Master节点的核心组件状态,验证集群是否健康
kubectl get cs

▷ 第二类:Pod相关命令(重中之重,占60%,必须背会!)

大白话用途:Pod是运行容器的载体,所有业务软件都在Pod里,所以这部分命令是你最常用的命令,学会这些,就能应对90%的实操需求!

# 命令1:查看集群里所有运行的Pod,最最最常用!
kubectl get pods

# 命令2:查看指定Pod的【详细信息】,Pod启动失败/报错 必用!救命命令!
kubectl describe pod Pod的名称

# 命令3:查看Pod的【运行日志】,容器运行报错 必用!核心排错命令!
kubectl logs Pod的名称 -c 容器名

# 命令4:进入Pod里的容器【交互式操作】,调试/修改配置 必用!
kubectl exec -it Pod的名称 -c 容器名 /bin/bash

# 命令5:删除指定的Pod,不用了就删掉
kubectl delete pod Pod的名称

# 命令6:通过YAML文件创建/更新Pod(最核心的创建方式)
kubectl apply -f YAML文件的路径

▷ 第三类:服务/存储/弹性伸缩 相关命令(新增,必备)

# 查看集群所有的服务(外部访问用),新增重点
kubectl get svc

# 查看持久化存储卷和存储申请单,新增重点
kubectl get pv
kubectl get pvc

# 查看弹性伸缩控制器Deployment,新增重点
kubectl get deploy

# 扩容/缩容容器数量,一行命令实现弹性伸缩
kubectl scale deploy 控制器名称 --replicas=5

▷ 第四类:万能辅助命令(小白必备)

# 查看指定资源的完整YAML配置,学习必备
kubectl get 资源类型 资源名称 -o yaml

# 万能帮助命令,忘记任何命令都能用它救急
kubectl --help

三、K8s YAML文件 【全字段超详细释义】⭐小白核心重点⭐

这部分是本次讲解的核心,最全最细,包含你要求的:标签配置、存储配置、数据持久化、外部访问配置、容器弹性伸缩配置,全部补充完整!
✅ 每一个字段:大白话含义+写法规则+作用+不写后果+示例
✅ 样式升级:注释(灰色)、关键字(青色)、字符串值(黄色)、数字(粉色) 颜色区分,一眼看清
✅ 纯小白视角,无专业黑话,所有内容掰开揉碎讲解!

⚠️ 小白致命重点:YAML文件有【严格的语法规则】,写错一个符号、一个空格,都会导致创建失败!所有规则我都会讲清楚,必须严格遵守!

▷ 前置必懂:YAML文件【4条铁律语法规则】(写错必报错!)

  1. ✅ 规则1:缩进敏感,只能用【空格】,绝对不能用【Tab键】!
  2. ✅ 规则2:键值对格式 key: value ,冒号【后面必须加一个空格】!
  3. ✅ 规则3:数组/列表用【-】开头,代表一个元素,-后也要加空格!
  4. ✅ 规则4:注释用【#】开头,注释单独灰色显示,不执行!

▷ 基础篇:YAML【四大顶层核心字段】(所有资源必写,缺一不可)

# 所有K8s YAML文件的必写4大字段,固定骨架
apiVersion: v1        # 字段1:K8s的API版本,Pod固定写v1
kind: Pod             # 字段2:要创建的资源类型,Pod/Service/Deployment
metadata: {}          # 字段3:资源的基础信息(名称、标签)
spec: {}              # 字段4:资源的核心详细配置

▷ 新增重点1:YAML中的【标签配置 labels / selector】完整版详解

💡 大白话理解标签:标签就是给资源「贴的标签贴纸」,比如给所有Nginx的Pod贴「app:nginx」,给MySQL贴「app:mysql」,作用是筛选、分组、绑定资源,是K8s最核心的特性之一,必须掌握!

✅ ① metadata 下的 labels 标签 - 给资源「打标签」

metadata:
  name: nginx-pod
  labels:          # 核心:给当前Pod打标签,键值对格式,可写多个
    app: nginx    # 标签1:应用名称是nginx
    env: test    # 标签2:运行环境是测试环境
    type: web     # 标签3:类型是网站服务

✅ ② selector 标签选择器 - 「根据标签找资源」

spec:
  selector:        # 核心:标签选择器,根据标签匹配对应的Pod
    matchLabels:
      app: nginx # 只匹配 带有app:nginx标签的Pod

▷ 新增重点2:YAML中的【存储配置】完整版详解(临时+本地存储)

💡 大白话理解存储:容器本身是「临时的」,容器删除后里面的数据就没了!存储配置就是给容器「挂载一个文件夹」,数据写到这个文件夹里,就不会丢失了,分为【临时存储】和【本地存储】两种,小白必学!

✅ ① emptyDir 临时存储 - 同Pod内容器共享数据,Pod删除则数据丢失

spec:
  volumes:                # 第一步:定义存储卷,数组格式,可写多个
  - name: nginx-data    # 存储卷名称,自定义
    emptyDir: {}        # 类型:临时存储卷
  containers:
  - name: nginx-container
    image: nginx:latest
    volumeMounts:         # 第二步:给容器挂载存储卷
    - name: nginx-data  # 要挂载的存储卷名称(和上面一致)
      mountPath: /usr/share/nginx/html # 容器内的挂载目录

✅ ② hostPath 本地存储 - 挂载宿主机的文件夹,Pod删除数据不丢失

spec:
  volumes:
  - name: mysql-data
    hostPath:            # 类型:挂载宿主机本地文件夹
      path: /data/mysql # 宿主机的文件夹路径
  containers:
  - name: mysql-container
    image: mysql:8.0
    volumeMounts:
    - name: mysql-data
      mountPath: /var/lib/mysql # MySQL的数据存储目录

▷ 新增重点3:YAML中的【数据持久化 PV/PVC】完整版详解(重中之重)

⚠️ 小白必懂:hostPath是「单机存储」,如果Pod被调度到其他节点,就访问不到原来的数据了!PV/PVC是K8s的持久化存储标准方案,数据和节点解耦,Pod调度到任何节点都能访问到数据,生产环境必用!
💡 通俗比喻:
▶ PV (PersistentVolume) = 集群的「共享仓库」,管理员创建的固定大小的存储资源;
▶ PVC (PersistentVolumeClaim) = 「仓库申请单」,你向集群申请多大的仓库、什么类型的仓库;
▶ 逻辑:你提交PVC申请单 → K8s自动匹配合适的PV → 绑定成功 → 容器挂载PVC使用存储。

✅ ① PV 持久化存储卷 配置

apiVersion: v1
kind: PersistentVolume # 资源类型:持久化存储卷
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 10Gi    # 存储大小:10G
  accessModes:
  - ReadWriteOnce # 访问模式:单节点读写
  hostPath:
    path: /data/pv/mysql # 存储的实际路径

✅ ② PVC 存储申请单 配置

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi     # 申请5G存储,K8s自动匹配≥5G的PV

✅ ③ Pod挂载PVC使用存储

spec:
  volumes:
  - name: mysql-pvc-volume
    persistentVolumeClaim:
      claimName: mysql-pvc # 绑定上面创建的PVC
  containers:
  - name: mysql-container
    image: mysql:8.0
    volumeMounts:
    - name: mysql-pvc-volume
      mountPath: /var/lib/mysql

▷ 新增重点4:YAML中的【外部访问 Service】完整版详解(必学)

⚠️ 小白必懂的痛点:Pod的IP地址是「临时的」,Pod重启后IP就变了,而且Pod的IP只能在集群内部访问,你的电脑(外部)根本访问不到!Service就是解决这个问题的「永久访问入口」,给Pod分配一个固定的访问地址+端口,外部可以直接访问!
💡 大白话理解Service:Service就是Pod的「永久访问域名+端口」,不管Pod重启多少次、IP怎么变,只要通过Service访问,就能精准找到对应的Pod,还能实现负载均衡(多Pod时自动分发请求)。

✅ 最常用的 NodePort 类型 Service - 外部电脑可直接访问

apiVersion: v1
kind: Service # 资源类型:服务
metadata:
  name: nginx-service
spec:
  selector:          # 核心:通过标签找到要访问的Pod
    app: nginx
  type: NodePort  # 访问类型:外部可访问
  ports:
  - port: 80        # Service的端口
    targetPort: 80 # Pod的端口
    nodePort: 30080 # 集群节点的外部端口(30000-32767)

▷ 新增重点5:YAML中的【容器弹性伸缩 Deployment】完整版详解(终极核心)

⚠️ 小白必懂:我们之前写的「裸Pod」有致命缺陷!Pod挂了之后,K8s只会重启它,但如果Pod所在的节点宕机了,Pod就彻底没了!而且裸Pod无法实现「多副本、扩容缩容」!Deployment是生产环境唯一推荐的控制器,解决所有问题,实现容器的「自愈、弹性伸缩、滚动更新」,是小白必须掌握的终极配置!
💡 大白话理解Deployment:Deployment是Pod的「大管家」,你告诉它「我要运行3个Nginx Pod」,它就会帮你创建3个Pod,并且时时刻刻盯着:
▶ 如果Pod挂了,自动补一个;
▶ 如果节点宕机,自动在其他节点重建Pod;
▶ 想扩容到5个,一行命令搞定;
▶ 想缩容到2个,一行命令搞定;
这就是「容器弹性伸缩」,也是K8s的核心价值!
apiVersion: apps/v1 # Deployment的固定版本
kind: Deployment # 资源类型:弹性伸缩控制器
metadata:
  name: nginx-deploy
spec:
  replicas: 3    # 核心:运行的Pod副本数,弹性伸缩的核心配置
  selector:          # 通过标签匹配要管理的Pod
    matchLabels:
      app: nginx
  template:          # Pod的模板,里面就是之前写的Pod配置
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-container
        image: nginx:latest
        ports:
        - containerPort: 80

✅ 实现容器弹性伸缩的2种方式(小白必会)

▷ 补充:原有基础容器配置(完整版,无删减)

spec:
  containers:
  - name: mysql-container
    image: mysql:8.0
    ports:
    - containerPort: 3306
    env:                # 环境变量,配置容器运行参数
    - name: MYSQL_ROOT_PASSWORD
      value: "123456"