CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kubernetes 入门/课时/Kubernetes 是什么
RawBlame
课时目录12 节

Kubernetes 入门

  1. 01Kubernetes 是什么
  2. 02核心概念与架构
  3. 03本地集群与 kubectl
  4. 04Pod
  5. 05Deployment 与滚动更新
  6. 06Service 与网络
  7. 07ConfigMap 与 Secret
  8. 08存储卷
  9. 09Ingress 入口
  10. 10资源配额与 HPA
  11. 11RBAC 与安全基础
  12. 12综合练习:部署 backend

Kubernetes 是什么

容器编排动机、与 Docker Compose 对比。

30 分钟

Kubernetes 是什么

这一课你将能做到

  1. 用自己的话说清 Docker Compose(单机编排)与 Kubernetes(集群编排)各自解决什么问题,以及「K8s 不替代 Docker」的原因
  2. 列出 K8s 的自愈、扩缩容、滚动发布、服务发现、资源调度五类核心能力,并各配一个本站(Spring Boot backend + MySQL + Nginx 前端)场景
  3. 解释「声明式 API / 期望状态」是什么,能向同事讲明白为什么 apply 一份 YAML 比逐台 SSH 改服务器可靠

为什么要学

你已经在 docker-essentials 里用 Compose 把本站跑起来了:Nginx 前端、Spring Boot backend、MySQL、Redis,一条 docker compose up 全起。单机演示完全够用。但只要换一个问法,Compose 就开始吃力:

  • backend 流量翻倍,要跑 4 个副本,谁来负载均衡?
  • 某台服务器半夜挂了,谁来把上面的容器拉起来?
  • 发新版本,能不能做到用户无感知,出问题一键回滚?

这三个问题的答案就是容器编排(Orchestration),而 Kubernetes(常缩写 K8s,因为 K 和 s 之间有 8 个字母)是这一领域事实上的标准。人话:Docker 解决「一个应用怎么打包、在哪都能跑」,K8s 解决「几十上百个应用在一堆机器上怎么跑得好、挂了怎么办、怎么无感升级」。会开车不等于会调度整个车队。

面试视角:Java 后端岗位问到 K8s 的频率越来越高,开场题基本就是「K8s 是什么、解决什么问题」——这一课就是把答案打磨到能脱口而出。

先建立图像

单机 Docker:        一台机器上的若干容器,挂了要人管

Compose(单机编排):你写 compose.yaml → docker compose up → 本机多个容器按依赖启动

K8s(集群编排):     你写 YAML「我要 3 个 backend」
                        ↓
                   API Server 记下期望状态
                        ↓
                   控制器发现实际只有 2 个 → 自动补 1 个
                        ↓
                   某个 Pod 挂了 → 自动重建,IP 变了也有 Service 兜住
Docker ComposeKubernetes
规模一台机器多节点集群
扩缩容手工改文件重启一行命令或自动(HPA)
自愈只有重启策略控制器自动重建到健康节点
发布整组重建,常停机滚动更新、可回滚
服务发现Compose 网络内服务名全集群 DNS
本站对应本地开发/联调生产部署的演进方向

关键认知:K8s 不构建镜像、不替代 Docker。你的 Spring Boot backend 镜像仍然由 Dockerfile 打出来、推到镜像仓库;K8s 只负责「跑几份、跑在哪、挂了怎么办、怎么对外服务」。

跟着做

步骤 1:安装 kubectl 客户端并验证

kubectl 是以后和集群对话的唯一日常工具,先装好客户端(本课还没有集群,装完即止)。

Windows(PowerShell):

winget install -e --id Kubernetes.kubectl

或用 Chocolatey:

choco install kubernetes-cli -y

重开终端后验证:

kubectl version --client

应看到 Client Version: v1.3x.x 之类的输出。

步骤 2:盘点本站现有部署方式

如果本站 Compose 还在跑,先看一眼现状:

docker compose ps

在笔记里写三行:backend 怎么起的(jar 直接跑 / Docker)、MySQL 在哪、对外是 Nginx 还是裸端口。重点找「痛点」:哪一处是「挂了要人手动拉」「扩副本要人操作」——这些就是编排要接管的事。

步骤 3:读懂「声明式」最小样例

新建 intro-deploy.yaml(本课只读不跑):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 3            # 期望状态:永远保持 3 个副本
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: api
          image: your-registry/backend:1.0.0

命令式思维:docker run ...、docker stop ...,你下指令系统执行,错了要人修。 声明式思维:你只说「我要 3 个」,系统持续对比「实际有几个」,少了自动补。这是 K8s 一切能力的根基。

步骤 4:把本站四段映射到 K8s 对象

纸面映射(细节后面每课展开):

Nginx 前端 platform:3000 → Deployment + Service
Spring backend:8080      → Deployment + Service + ConfigMap/Secret
MySQL / Redis            → 集群外托管,或 StatefulSet + PVC(进阶)
对外入口 Nginx 反代       → Ingress

顺手建立一个 Namespace 直觉:本站业务对象将来放进一个叫 coderoadmap 的命名空间,与系统组件隔离。

步骤 5:跑第一条「会失败」的命令,确认学习起点

kubectl get nodes

现在应报 The connection to the server localhost:8080 was refused——这是正常现象:客户端装好了,集群还没有。下一课就把它修掉。把它当作里程碑:你现在与目标之间,只差「一个本地集群」。

讲清楚要点

  1. 容器解决「打包一致」,编排解决「规模与故障」:镜像让应用在哪都能跑;跑得多、机器多之后「谁来管」成为新瓶颈,K8s 回答这个问题。
  2. K8s 的核心是「期望状态 + 调谐循环」:你提交 YAML(期望),控制平面持续把实际状态调齐(reconcile)。删掉一个受管的 Pod 会立刻被重建——不是 Bug,是特性。
  3. K8s 消费镜像、不生产镜像:Dockerfile、镜像仓库的知识全部保留;本站 backend 镜像进 K8s 只是「运行环境升级」,不是推倒重来。
  4. 能力五件套挂在同一个模型上:自愈(控制器重建)、扩缩(改 replicas/HPA)、滚动发布(Deployment 策略)、服务发现(Service DNS)、调度(Scheduler 选节点)。
  5. 不是所有项目第一天都需要 K8s:单机小站 Compose 足够;出现多机、高频发布、多副本需求时再迁。学本 track 就是为那一天做准备。
  6. 面试标准答案先背住:「K8s 是容器编排平台,负责容器的自动化部署、扩缩容、自愈与服务发现」——一句话带出四个关键词,比长篇介绍更专业。

你可能会懵的地方

  • 有 Docker 了,为什么还要 K8s? Docker 管单机容器生命周期;K8s 管跨机器的调度、副本、故障迁移。本地开发继续用 Compose 很正常,两者是递进而非替代。

  • K8s 是一个「迷你操作系统」吗? 不是。它是集群的控制系统(API + 存储 + 调谐循环),你跑的还是普通容器进程。它像「数据中心级的服务管家」,不管你的 Java 代码怎么写。

  • 本站现在必须迁移到 K8s 吗? 不必须。单机 Compose 可以一直撑到流量打满一台机器之前。本课价值在建立判断标准:出现哪几个信号(多副本、高频发布、自愈需求)时该上编排。

  • 「编排」和 CI/CD 是一回事吗? 不是。CI/CD 负责「把镜像构建出来、决定何时发布」;K8s 负责「镜像进集群后怎么跑」。两者通过镜像 tag 衔接:CI 推新 tag → K8s 滚动更新消费新 tag。

  • 为什么叫 K8s? Kubernetes(希腊语「舵手」)首字母 K 与尾字母 s 之间恰好 8 个字母,社区简称 K8s。

错法对照

错法问题正解
没容器基础直接背 K8s YAML排错时连镜像、端口都分不清先打牢 docker-essentials
把 K8s 理解成「更好用的虚拟机」模型错位,架构设计跑偏它管容器工作负载,不管整机克隆
认为「上了 K8s 就不用运维」网络、证书、备份照样要管编排消除手工,不消除责任
一上来就上生产多租户集群爆炸半径太大先 minikube 本地练熟对象模型
「Docker 就是 K8s,差不多」面试直接扣分分清运行时与编排两层

卡点急救

  1. kubectl 提示不是内部或外部命令:安装后未生效,重开终端;仍不行则把 kubectl 所在目录加入 PATH(winget 安装通常在 %LOCALAPPDATA%\Microsoft\WinGet\Links)。
  2. kubectl version --client 报错或版本过老:卸载重装最新版;注意别与 Docker Desktop 或 Minikube 自带的 kubectl 混淆冲突。
  3. winget/choco 安装缓慢或失败:改从官方文档提供的直链下载 exe,放入 PATH 目录即可,安装方式不影响后续学习。

面试常问

  • Kubernetes 是什么?解决什么问题? 容器编排平台。容器解决了应用的打包与隔离,但多机场景下「跑几份、跑在哪、挂了谁管、怎么无感升级」是新问题。K8s 用声明式 API + 控制循环回答:你声明期望状态(3 副本、端口 8080),它持续把实际状态调谐到期望——自动调度、自愈、扩缩容、滚动发布、服务发现。

  • Docker Compose 和 Kubernetes 的区别? Compose 是单机编排工具,适合本地开发与小规模部署;K8s 是跨节点集群编排,提供调度、自愈、水平扩缩、滚动更新与统一服务发现。一句话:Compose 管「一台机器上的一组容器」,K8s 管「一组机器上的一群容器」。

  • 什么是声明式 API?为什么它重要? 你只描述期望状态(YAML),不写执行步骤;系统通过控制循环(reconcile loop)持续把实际状态向期望对齐。好处:可重复(同份 YAML 幂等 apply)、可自愈(偏差自动修复)、可版本化(YAML 进 Git 成为环境真相源)。

自测三问

  1. 举一个 Compose 完全够用的场景和一个必须上编排的场景。
  2. 「期望状态」四个字怎么理解?用 backend 三副本举例说明。
  3. K8s 会帮你构建镜像吗?你的 backend 镜像从哪来?

小结一句话

K8s 是集群级容器编排平台:在 Docker 镜像能力之上,用声明式 API 管理副本、自愈、扩缩与发布——本站从 Compose 走向生产,第一步就是吃透「期望状态 + 自动调谐」这个模型。

延伸

  • What is Kubernetes?
  • Kubernetes Components
  • 下一课预告:拆开 K8s 的引擎盖——控制平面四大组件、Node 上的守护者,以及 Pod、Deployment、Service 等核心对象的关系链。
加载本节练习…
下一课 →核心概念与架构