IT策士 10余年一线大厂经验专注 IT 思维、架构、职场进阶。我会在各个平台持续发布最新文章助你少走弯路。这是《Docker 从 0 到 1 再到 Kubernetes 实战》系列的最后一篇。50 篇文章从一条docker run hello-world开始到在 Kubernetes 集群上用 Istio 服务网格管理流量。我们走过了容器技术从单机到集群、从手动到自动化、从“能跑”到“生产级”的完整演进之路。今天这篇我将做三件事回顾——梳理你在这 50 篇文章中构建起的知识体系演示——用一个完整的端到端流程把镜像构建、Compose 编排、K8s 部署、HPA 弹性伸缩、滚动更新、监控告警这六个关键环节串联起来每个环节都给出真实的命令和输出展望——为你指明进阶学习的方向。一、系列全景回顾从“单容器”到“服务网格”这个系列的设计逻辑是先扎实掌握单机容器再理解单机编排然后深入集群编排最后掌握生产级运维。这是一条被无数实践证明有效的学习路径。第一部分Docker 容器化基础第 1–10 篇你从零开始学会了容器化最核心的能力环境搭建第 1 篇在三类操作系统上安装 Docker跑通第一个容器。容器操作第 2 篇docker run、docker ps、docker logs、docker exec掌握了与容器交互的基本命令。镜像原理第 3 篇理解了分层结构、联合文件系统Overlay2和写时复制CoW——这是 Docker 高效、灵活、可复用的根基。Dockerfile 编写第 4–5 篇从FROM、RUN、COPY、CMD等核心指令到多阶段构建、BuildKit cache mount 等优化技巧能把任意应用打包为标准镜像。生命周期与调试第 6 篇掌握了容器状态转换、重启策略、健康检查、日志轮转。数据管理第 7 篇Volume 和 Bind Mount 实现数据持久化和多容器共享。网络基础第 8–9 篇从默认 bridge 到自定义 bridge从端口映射的 iptables 原理到容器 DNS 解析理解了 Docker 的网络模型。综合实战第 10 篇将 Flask Redis 计数器应用完整容器化用脚本一键启动。第二部分Docker Compose 编排第 11–18 篇从手动敲命令升级为声明式编排Compose 入门第 11 篇docker-compose.yml一条命令启动多服务。文件详解第 12 篇services、networks、volumes 三大核心模块拆解。环境变量与配置第 13 篇四种来源、变量替换、多环境切换。开发环境优化第 14 篇Bind Mount 热重载、调试技巧。服务依赖与启动顺序第 15 篇depends_onhealthcheck解决竞态条件。实战案例第 16 篇编排 WordPress MySQL。多文件覆盖第 17 篇按环境拆分配置基础 开发/生产覆盖。从 Compose 到 K8s第 18 篇建立概念映射为进入 K8s 做思维准备。第三部分Kubernetes 核心第 19–38 篇进入 K8s 核心对象和机制的深度学习架构解读第 19 篇控制平面API Server、etcd、Scheduler、Controller Manager与工作节点kubelet、kube-proxy的协同机制。实验环境第 20 篇Minikube 搭建本地集群。Pod第 21–23 篇从 YAML 结构、生命周期与重启策略到 Sidecar/Adapter/Ambassador 设计模式。探针第 24 篇liveness、readiness、startup 三种探针的配置与黄金法则。Deployment第 25–26 篇声明式管理、副本控制、滚动更新与回滚。控制器第 27 篇DaemonSet、Job、CronJob。Service第 28–29 篇ClusterIP/NodePort/LoadBalancer 三种类型Endpoints、kube-proxy、CoreDNS 的服务发现全链路。Ingress第 30–31 篇七层路由、TLS 终端、路径重写、Basic Auth。配置管理第 32–33 篇ConfigMap 和 Secret 的创建、注入、更新策略。存储第 34–35 篇emptyDir/hostPath → PV/PVC → StorageClass 动态供给。资源管理第 36 篇Requests/Limits 与 QoS 等级。调度策略第 37 篇节点亲和性、Pod 亲和/反亲和、污点与容忍。安全第 38 篇RBAC 与 ServiceAccount 最小权限。第四部分Kubernetes 生态与实战第 39–49 篇从“会用 K8s”迈向“能运维生产集群”Helm第 39–40 篇包管理工具从使用官方 Chart 到从零编写自定义 Chart。监控第 41 篇Metrics Server → Prometheus Grafana 监控栈。日志第 42 篇EFK vs LokiLoki LogQL 聚合日志。网络安全第 43 篇NetworkPolicy 实现 Pod 间流量隔离。应用迁移第 44–45 篇将 Flask Redis 从 Compose 完整迁移到 K8s加上 Ingress、HPA、滚动更新、监控和日志。CI/CD第 46 篇GitOps 理念 ArgoCD 实现自动部署和配置漂移自愈。生产级运维第 47 篇HA 拓扑、etcd 备份恢复、版本升级。排错第 48 篇四层排查法 五大高频故障场景。Istio第 49 篇Sidecar 代理、金丝雀发布、熔断、零侵入可观测性。二、端到端项目演示Flask Redis 计数器的完整部署流程现在让我们用一个完整的端到端演示把贯穿整个系列的六个关键环节串联起来。环节一镜像构建docker build我们从 Flask 应用的源代码开始使用第 5 篇学到的多阶段 Dockerfile 构建镜像。# 克隆项目代码假设已存在于本地cdflask-redis-counterls# app.py Dockerfile requirements.txt .dockerignore# 执行多阶段构建dockerbuild-tflask-redis-counter:3.0.[]Building35.2s(17/17)FINISHED[builder1/4]FROM python:3.12-slim0.0s[builder2/4]WORKDIR /build0.1s[builder3/4]RUNapt-getupdate...14.2s[builder4/4]RUN pip wheel --no-cache-dir...9.5s[runtime1/9]FROM python:3.12-slim0.0s[runtime2/9]RUNgroupadd-rappuser...0.4s[runtime3/9]WORKDIR /app0.0s[runtime4/9]COPY--frombuilder /wheels /wheels0.2s[runtime5/9]COPY requirements.txt.0.1s[runtime6/9]RUN pipinstall--no-index...3.8s[runtime7/9]RUNmkdir-p/app/logschown...0.3s[runtime8/9]COPY--chownappuser:appuser..0.1s[runtime9/9]USERappuser0.0sexporting to image2.1snaming to docker.io/library/flask-redis-counter:3.00.0s# 查看镜像体积dockerimages|grepflask-redis-counter# flask-redis-counter 3.0 a1b2c3d4e5f6 138MB138MB 的镜像包含 Python 运行时、Flask、Redis 客户端及所有依赖且不包含 gcc 等编译工具。环节二Compose 编排docker compose up使用第 11–13 篇学到的 Compose 文件一键启动多服务# 启动 Compose 环境dockercompose up-d[]Running3/3 ✔ Network flask-redis-counter_app-net Created0.1s ✔ Container redis Healthy5.2s ✔ Container flask-app Started5.5s# 验证健康检查dockercomposeps# NAME IMAGE STATUS PORTS# flask-app flask-redis-counter:3.0 Up 10 seconds (healthy) 0.0.0.0:5000-5000/tcp# redis redis:alpine Up 30 seconds (healthy) 6379/tcp# 测试计数器curlhttp://localhost:5000# Hello World! I have been seen 1 times.# 清理 Compose 环境dockercompose down环节三K8s 对象部署kubectl apply将第 44 篇中准备好的 YAML 文件应用到集群# 确保 Minikube 已启动minikube status# minikube: Running# 加载本地镜像到 Minikubeminikube image load flask-redis-counter:3.0# 部署全部 K8s 资源kubectl apply-fbase/deployment.apps/redis created service/redis-service created persistentvolumeclaim/redis-pvc created configmap/flask-config created secret/flask-secret created deployment.apps/flask-deployment created service/flask-service created ingress.networking.k8s.io/flask-ingress created horizontalpodautoscaler.autoscaling/flask-hpa created# 查看所有资源状态kubectl get pods,svc,deploy,ingress,hpaNAME READY STATUS RESTARTS AGE pod/flask-deployment-xxxxxxxxx-xxxxx1/1 Running030s pod/flask-deployment-xxxxxxxxx-yyyyy1/1 Running030s pod/flask-deployment-xxxxxxxxx-zzzzz1/1 Running030s pod/redis-xxxxxxxxx-xxxxx1/1 Running030s NAME TYPE CLUSTER-IP PORT(S)AGE service/flask-service ClusterIP10.96.200.805000/TCP 30s service/redis-service ClusterIP10.96.100.506379/TCP 30s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/flask-deployment3/33330s deployment.apps/redis1/11130s NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/flask-ingress nginx counter.local192.168.49.28030s NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE horizontalpodautoscaler.autoscaling/flask-hpa Deployment/flask-deployment5%/50%210330s所有资源 READY 均为期望值Deployment 3/3 全部就绪HPA 当前 CPU 使用率 5%状态健康。环节四HPA 弹性伸缩使用 ab 压力测试工具模拟流量高峰触发 HPA 自动扩容# 在终端 1 持续观察 HPA 和 Pod 变化kubectl get hpa flask-hpa-w# NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS# flask-hpa Deployment/flask-deployment 5%/50% 2 10 3# 在终端 2 发起压力测试ab-n10000-c100-HHost: counter.localhttp://$(minikubeip)/在终端 1 中观察到的 HPA 变化flask-hpa Deployment/flask-deployment5%/50%2103flask-hpa Deployment/flask-deployment120%/50%2103flask-hpa Deployment/flask-deployment120%/50%2106flask-hpa Deployment/flask-deployment65%/50%2108flask-hpa Deployment/flask-deployment40%/50%2108# 同时观察 Pod 数量变化kubectl get pods-lappflask-counter-w# flask-deployment-xxxxxxxxx-xxxxx 1/1 Running 0# flask-deployment-xxxxxxxxx-yyyyy 1/1 Running 0# flask-deployment-xxxxxxxxx-zzzzz 1/1 Running 0# flask-deployment-xxxxxxxxx-aaaaa 0/1 ContainerCreating 0# flask-deployment-xxxxxxxxx-bbbbb 0/1 ContainerCreating 0# flask-deployment-xxxxxxxxx-aaaaa 1/1 Running 0# flask-deployment-xxxxxxxxx-bbbbb 1/1 Running 0HPA 检测到 CPU 飙升至 120% 后自动将副本数从 3 逐步扩展到 8将平均 CPU 负载拉回 40%。整个过程无需人工干预。环节五滚动更新发布 v4.0 版本体验零停机更新# 构建并加载 v4.0 镜像dockerbuild-tflask-redis-counter:4.0.minikube image load flask-redis-counter:4.0# 触发滚动更新kubectlsetimage deployment/flask-deploymentflaskflask-redis-counter:4.0# 实时观察滚动更新进度kubectl rollout status deployment/flask-deployment# Waiting for deployment flask-deployment rollout to finish:# 1 out of 3 new replicas have been updated...# deployment flask-deployment successfully rolled out同时观察 Pod 的逐个替换过程kubectl get pods-lappflask-counter-w# flask-deployment-xxxxxxxxx-xxxxx 1/1 Running 0# flask-deployment-yyyyyyyy-aaaaa 0/1 ContainerCreating 0# flask-deployment-yyyyyyyy-aaaaa 1/1 Running 0# flask-deployment-xxxxxxxxx-xxxxx 1/1 Terminating 0# flask-deployment-yyyyyyyy-bbbbb 0/1 ContainerCreating 0# flask-deployment-yyyyyyyy-bbbbb 1/1 Running 0# flask-deployment-xxxxxxxxx-yyyyy 1/1 Terminating 0新旧 Pod 逐个交替——先创建新 Pod等待就绪后再删除旧 Pod。在整个更新过程中始终有足够数量的 Pod 在服务。环节六监控告警Prometheus Grafana Alertmanager 构成了完整的可观测性体系。在 Grafana 仪表板上可以看到应用的关键指标CPU 使用率从基线的 5% 在压测期间飙升至 120%触发 HPA 扩容后逐步回落至 40%内存使用量稳定在 100MiB~128MiB 之间符合设定的 Requests/Limits 范围请求速率QPS 从稳态的 10 左右飙升至 500扩容后各 Pod 分摊压力错误率保持为 0%健康检查持续通过当配置的告警规则被触发时如 Pod 5 分钟内重启超过 2 次Alertmanager 会发送告警通知告警名称PodFrequentlyRestarting告警级别warning告警内容Pod flask-deployment-xxxxxxxxx-xxxxx has restarted 5 times in the last 5 minutes.在 Grafana 中无缝切换到 Loki 查询使用{appflask-counter} | ERROR可以立即看到导致错误的具体日志行完成从“发现异常”到“定位根因”的闭环。三、技术演进路线图回顾整个系列我们走过的路正是容器技术从单机到集群、从手动到自动化、从“能跑”到“生产级”的完整演进路径单机容器化Docker ├── 将应用打包为镜像Dockerfile → 多阶段构建 ├── 管理容器生命周期run / stop / logs /exec├── 管理数据与网络Volume / Bind Mount / 自定义 Bridge └── 贯穿案例docker build dockerrun 启动 Flask Redis ↓ 从手动命令到声明式 YAML 单机编排Docker Compose ├── 声明式管理多服务docker-compose.yml ├── 环境配置分离.env 多文件覆盖 └── 贯穿案例docker compose up-d一键启动 ↓ 从单机到集群 集群编排K8s 核心对象 ├── 工作负载管理Pod → Deployment → DaemonSet / Job / CronJob ├── 网络与服务发现Service → Endpoints → CoreDNS → Ingress ├── 配置与存储ConfigMap / Secret → PVC / StorageClass ├── 调度与安全亲和性 / 污点容忍 → RBAC / ServiceAccount └── 贯穿案例kubectl apply-f部署全套应用 ↓ 从“能跑”到“可运维” 生产级运维 ├── 包管理Helm Chart 模板化、版本化 ├── 监控与日志Prometheus Grafana Loki ├── CI/CDGitOps ArgoCD 自动部署 ├── 网络治理NetworkPolicy → Istio 服务网格 ├── 高可用多节点 HA、etcd 备份恢复、版本升级 └── 贯穿案例Git Push → 自动部署 → 自动伸缩 → 零停机更新四、后续扩展进阶学习方向完成这 50 篇文章你已经具备了独立部署和运维中小规模 K8s 集群的能力。但云原生技术栈远比这庞大。以下是你可以继续深入的八个方向Service Mesh 深度实践Istio深入掌握流量管理金丝雀发布、AB 测试、故障注入混沌工程、mTLS 无感加密、多集群网格联邦。从“会用 Istio”到“能定制网格策略”。Serverless 与 Knative学习事件驱动的 Serverless 架构使用 Knative 实现请求驱动的自动扩缩容Scale-to-Zero、基于事件源的函数触发。适合处理波峰波谷明显的业务场景。边缘计算KubeEdge将 Kubernetes 延伸到边缘节点支持 IoT、5G、CDN 等场景下的离线自治、边缘设备管理和云边协同。多云与混合云管理通过 Cluster API、Karmada 等工具实现跨云厂商、跨数据中心的统一集群管理和应用调度避免云厂商锁定。GitOps 工作流深化使用 ArgoCD Helm Image Updater 构建全自动化的 GitOps 流水线实现从代码 Push 到镜像构建GitHub Actions再到自动部署ArgoCD的完整 CI/CD 闭环。FinOps 成本优化使用 Kubecost、Karpenter 等工具分析集群成本构成实施资源推荐、闲置资源回收、Spot 实例调度等优化手段。安全合规加固使用 OPA/Gatekeeper 实现策略即代码Policy as Code集成镜像签名Cosign、漏洞扫描Trivy、运行时安全Falco构建完整的 K8s 安全防线。Operator 开发使用 Operator FrameworkOperator SDK / Kubebuilder编写自定义控制器将运维知识编码为自动化 Operator管理复杂有状态应用如数据库集群、消息队列的全生命周期。五、结束语这 50 篇文章的写作每一篇都力求“内容充实、逻辑严谨、实例丰富”——初衷始终未变为容器和 K8s 的学习者提供一条清晰、可动手、从零到生产级的完整路径。如果你从头到尾跟下来现在你的工具箱里已经装了 Docker、Compose、Kubernetes、Helm、Prometheus、Grafana、Loki、ArgoCD、Istio以及排错方法论和生产级运维经验。你不再是一个“听说过 K8s”的人而是一个能独立部署、监控、排错、优化 K8s 集群的实践者。但技术的世界永远是学不完的。完成了这套系列并不代表你已经掌握了所有细节而是说明你已经有能力在实践中继续成长。任何技术都是在实践中迭代出来的不要害怕在生产环境中试验今天所学到的工具和理念。纸上得来终觉浅绝知此事要躬行。愿我们在云原生的道路上越走越远。想了解更多还可以去各个平台搜索「IT策士」一起升级 IT 思维