知序
返回
保存草稿
发布
H1
H2
H3
1
2
3
Excalidraw 图
AI 写作
AI 优化
目录
输入内容后显示目录
Markdown
# 00 - 课程总览与学习路线 > 这门课解决什么问题:你大概会写 Dockerfile、能看懂 YAML,但一打开 K8s 文档就被 Pod / ReplicaSet / Deployment / Service / Ingress 这一堆名词劝退。 > 本文不铺概念全景,只带你走一条**能跑通的路线**:把镜像部署进 K8s → 内部能互访 → 外网能访问 → 能改配置 → 能滚动升级和回滚。 > 走完一遍,那些名词会各就各位,再看官方文档就不迷路了。 --- ## 1. 为什么需要 Kubernetes 不用 K8s 时,部署一个服务的日常大概是这样:  *图:有无 K8s 的对比:从「手动维护一台台机器」到「声明期望、由集群自动拉平」* ```text ┌─────────────────────────────────────────────────┐ │ 没有 K8s 的世界 │ ├─────────────────────────────────────────────────┤ │ 买/开一台机器 │ │ → 手动装 JDK、上传 jar │ │ → nohup java -jar & 或写 systemd │ │ → 挂了没人知道,要自己起早贪黑重启 │ │ → 要扩容?再开一台,手动改 Nginx 配置,重载 │ │ → 要上线新版本?停服务,有停机时间 │ │ → 要回滚?把旧 jar 找出来再传一遍 │ └─────────────────────────────────────────────────┘ ``` 有了 K8s 之后,你不再对"机器"下命令,而是对**集群**声明"我要 3 个副本、每个用这个镜像、健康检查走这个路径",剩下的调度、拉起、重启、扩缩、流量分发都由集群自己完成。 ```text ┌─────────────────────────────────────────────────────────────┐ │ 有 K8s 的世界 │ ├─────────────────────────────────────────────────────────────┤ │ 你只需要提交一份 YAML(声明我要什么) │ │ │ │ │ v │ │ 集群持续比对「现状」与「期望」,不一致就自动修正 ← 核心机制 │ │ │ │ │ ├─ 容器挂了 → 自动重启 │ │ ├─ 节点宕机 → 把 Pod 调度到别的节点 │ │ ├─ 流量变大 → HPA 自动加副本 │ │ ├─ 发新版本 → 滚动更新,零停机 │ │ └─ 出问题 → 一条命令回滚 │ └─────────────────────────────────────────────────────────────┘ ``` > 一句话:**K8s 是一个"让现状不断逼近你声明"的系统**。你不再关心"怎么操作",只关心"要什么结果"。 --- ## 2. 这门课的路线 每一篇都是"先讲为什么需要它,再动手用它",不孤立地罗列 API。 | 篇 | 标题 | 讲什么 | 学完能做什么 | |---|---|---|---| | 00 | 课程总览与学习路线 | 本文 | 知道路怎么走、环境怎么搭 | | 01 | 核心对象:从 Pod 到 Deployment | 心智模型、集群架构、Pod、Deployment | 把一个镜像跑起来,并让它自愈、扩容、滚动升级、回滚 | | 02 | 网络与暴露:Service 与 Ingress | 为什么不能直接用 Pod IP、Service 四种类型、Ingress | 让集群内的服务互访,并让外网能访问 | | 03 | 配置与数据:ConfigMap / Secret / Volume | 配置与镜像分离、Secret 的真相、存储三层次 | 同一镜像跑多环境,持久化数据 | | 04 | 完整实战:一套 Spring Boot + MySQL 服务上线 | 串起前四篇 | 从零把真实应用部署到外网可访问 | | 05 | 排障速查:状态、命令、异常对照 | 排障链路、常见异常、生产清单 | 出问题时知道先看什么 | | 06 | 交付与发布:把新版本安全送到集群 | 触发更新的三种方式、滚动参数、回滚演练、三种发布策略 | 会发布、会判成败、能在几十秒内回滚 | **刻意的取舍**:这门课**不讲** Helm、Operator、Service Mesh、CNI 插件原理、StatefulSet 深度运维。这些属于"玩熟了无状态之后"的话题,一上来讲只会劝退。第五篇会告诉你它们各自解决什么问题、什么时候该学。 --- ## 3. 环境准备(三种选一种) YAML 完全通用,选哪个都行: ```text 方案 A:单机 kind(推荐本地练习) ┌──────────────────────────────────────────┐ │ 在一台机器上用 Docker 容器模拟多节点集群 │ │ 优点:资源占用小、秒级创建、可随时推倒重来 │ │ 缺点:不是真多节点,网络/存储行为有简化 │ └──────────────────────────────────────────┘ 方案 B:单机 minikube ┌──────────────────────────────────────────┐ │ 一条命令拉起单节点集群 │ │ 优点:最简单,自带常用插件(dashboard 等) │ │ 缺点:只适合学习,别上生产 │ └──────────────────────────────────────────┘ 方案 C:云厂商托管集群(TKE / ACK / EKS) ┌──────────────────────────────────────────┐ │ 控制面由云托管,你只拿到 kubeconfig │ │ 优点:最接近真实生产,LoadBalancer 能用 │ │ 缺点:要花钱,按小时计费,练完记得删 │ └──────────────────────────────────────────┘ ``` 以 **kind** 为例(本课演示都用它): ```bash # 前置:已装 Docker # macOS / Linux brew install kind kubectl # 或按官网下载二进制 # Windows(PowerShell + chocolatey) choco install kind kubernetes-cli # 创建一个 3 节点的本地集群(1 控制面 + 2 工作节点) cat > kind-cluster.yaml <<'EOF' kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker EOF kind create cluster --name k8s-lab --config kind-cluster.yaml # 验证 kubectl cluster-info kubectl get nodes ``` 期望输出(节点全部 `Ready`): ```text NAME STATUS ROLES AGE VERSION k8s-lab-control-plane Ready control-plane 60s v1.3x.x k8s-lab-worker Ready <none> 40s v1.3x.x k8s-lab-worker2 Ready <none> 40s v1.3x.x ``` > 本课的 YAML 一律使用**稳定 API 版本**(`v1`、`apps/v1`、`networking.k8s.io/v1`),不绑定具体 K8s 版本,1.3x 全系列通用。 ### 用完记得推倒 ```bash kind delete cluster --name k8s-lab ``` --- ## 4. 阅读方式建议 ```text 第一遍:只读,不要跳 ──→ 建立"为什么"的认知 │ 第二遍:跟着敲 ──────→ 每篇最后的命令都复制执行一遍 │ (K8s 的坑基本都在"少写一行字段"里) v 第三遍:回到第 05 篇 ──→ 把它当排障手册,出问题就查 ``` **一个提醒**:K8s 的坑大多不在"怎么用",而在"以为它会自动做"。它只保证你**声明过**的东西,没声明的部分(备份、容量规划、成本、安全)它一概不管。带着这个预期学,会少很多"为什么它没帮我处理"的困惑。 --- 下一篇:[01 - 核心对象:从 Pod 到 Deployment]
预览
发布文章
添加摘要让读者更快了解文章内容
取消
确认发布
AI 写作助手
输入一个主题,AI 将为你生成一篇 Markdown 博客文章
AI 正在写作中...
取消
开始生成
AI 优化助手
描述你的修改需求,AI 将在原文基础上进行补充或微调
AI 正在优化中...
取消
开始优化
画布
从已有图里选
✕
图名
保存后生成 /images/excalidraw/<图名>.svg(只能用字母、数字、短横线、下划线、点)
取消
保存并插入