第50篇 k8s之系列总结 + 项目演示与后续扩展
2026/6/8 6:41:18 网站建设 项目流程

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 rundocker psdocker logsdocker exec,掌握了与容器交互的基本命令。

  • 镜像原理(第 3 篇):理解了分层结构、联合文件系统(Overlay2)和写时复制(CoW)——这是 Docker 高效、灵活、可复用的根基。

  • Dockerfile 编写(第 4–5 篇):从FROMRUNCOPYCMD等核心指令,到多阶段构建、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_on+healthcheck解决竞态条件。

  • 实战案例(第 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 Loki,Loki + 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--from=builder /wheels /wheels0.2s=>[runtime5/9]COPY requirements.txt.0.1s=>[runtime6/9]RUN pipinstall--no-index...3.8s=>[runtime7/9]RUNmkdir-p/app/logs&&chown...0.3s=>[runtime8/9]COPY--chown=appuser:appuser..0.1s=>[runtime9/9]USERappuser0.0s=>exporting to image2.1s=>=>naming to docker.io/library/flask-redis-counter:3.00.0s
# 查看镜像体积dockerimages|grepflask-redis-counter# flask-redis-counter 3.0 a1b2c3d4e5f6 138MB

138MB 的镜像包含 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,hpa
NAME 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-H"Host: counter.local"http://$(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-lapp=flask-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 0

HPA 检测到 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-deploymentflask=flask-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-lapp=flask-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 查询,使用{app="flask-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/CD:GitOps + ArgoCD 自动部署 ├── 网络治理:NetworkPolicy → Istio 服务网格 ├── 高可用:多节点 HA、etcd 备份恢复、版本升级 └── 贯穿案例:Git Push → 自动部署 → 自动伸缩 → 零停机更新

四、后续扩展:进阶学习方向

完成这 50 篇文章,你已经具备了独立部署和运维中小规模 K8s 集群的能力。但云原生技术栈远比这庞大。以下是你可以继续深入的八个方向:

  1. Service Mesh 深度实践(Istio):深入掌握流量管理(金丝雀发布、AB 测试)、故障注入(混沌工程)、mTLS 无感加密、多集群网格联邦。从“会用 Istio”到“能定制网格策略”。

  2. Serverless 与 Knative:学习事件驱动的 Serverless 架构,使用 Knative 实现请求驱动的自动扩缩容(Scale-to-Zero)、基于事件源的函数触发。适合处理波峰波谷明显的业务场景。

  3. 边缘计算(KubeEdge):将 Kubernetes 延伸到边缘节点,支持 IoT、5G、CDN 等场景下的离线自治、边缘设备管理和云边协同。

  4. 多云与混合云管理:通过 Cluster API、Karmada 等工具实现跨云厂商、跨数据中心的统一集群管理和应用调度,避免云厂商锁定。

  5. GitOps 工作流深化:使用 ArgoCD + Helm + Image Updater 构建全自动化的 GitOps 流水线,实现从代码 Push 到镜像构建(GitHub Actions)再到自动部署(ArgoCD)的完整 CI/CD 闭环。

  6. FinOps 成本优化:使用 Kubecost、Karpenter 等工具分析集群成本构成,实施资源推荐、闲置资源回收、Spot 实例调度等优化手段。

  7. 安全合规加固:使用 OPA/Gatekeeper 实现策略即代码(Policy as Code),集成镜像签名(Cosign)、漏洞扫描(Trivy)、运行时安全(Falco),构建完整的 K8s 安全防线。

  8. Operator 开发:使用 Operator Framework(Operator SDK / Kubebuilder)编写自定义控制器,将运维知识编码为自动化 Operator,管理复杂有状态应用(如数据库集群、消息队列)的全生命周期。

五、结束语

这 50 篇文章的写作,每一篇都力求“内容充实、逻辑严谨、实例丰富”——初衷始终未变:为容器和 K8s 的学习者提供一条清晰、可动手、从零到生产级的完整路径

如果你从头到尾跟下来,现在你的工具箱里已经装了 Docker、Compose、Kubernetes、Helm、Prometheus、Grafana、Loki、ArgoCD、Istio,以及排错方法论和生产级运维经验。你不再是一个“听说过 K8s”的人,而是一个能独立部署、监控、排错、优化 K8s 集群的实践者。

但技术的世界永远是学不完的。完成了这套系列,并不代表你已经掌握了所有细节,而是说明你已经有能力在实践中继续成长。任何技术都是在实践中迭代出来的,不要害怕在生产环境中试验今天所学到的工具和理念。

纸上得来终觉浅,绝知此事要躬行。

愿我们在云原生的道路上越走越远。


想了解更多还可以去各个平台搜索「IT策士」,一起升级 IT 思维 !

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询