从 Docker 到 Kubernetes:容器编排的工程化实践指南

一、什么是 Kubernetes(K8S)

Kubernetes(简称K8S)是一个容器编排平台,用于管理大量容器的部署、扩缩容、调度与生命周期。

如果用一句话概括:

Docker 解决"如何运行一个容器",而 Kubernetes

解决"如何在多台机器上稳定运行大量容器"。


二、为什么需要 K8S?

当系统规模扩大时,例如:

  • React 前端
  • Django 后端
  • MySQL 数据库
  • Redis 缓存
  • AI 服务
  • n8n 自动化服务

会出现以下问题:

  • 容器挂掉如何自动恢复?
  • 流量高峰如何自动扩容?
  • 如何进行滚动更新?
  • 如何在多台服务器之间调度?

K8S 提供:

  • 自动重启
  • 自动扩容(HPA)
  • 滚动更新
  • 自动回滚
  • 服务发现
  • 负载均衡

三、K8S 架构组成

K8S 是一个集群系统,由:

1. 控制平面(Control Plane)

负责整个集群的管理,包括:

  • API Server
  • Scheduler(调度器)
  • Controller Manager
  • etcd(存储集群状态)

2. Worker 节点

负责运行实际业务容器(Pod)。


四、核心概念详解

1. Pod

K8S 的最小运行单位。

通常一个 Pod 运行一个容器。


2. Deployment

用于定义:

  • 副本数量
  • 镜像版本
  • 更新策略

示例:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: django-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: django
  template:
    metadata:
      labels:
        app: django
    spec:
      containers:
      - name: django
        image: my-django:v1

3. Service

用于为 Pod 提供稳定访问地址。

类型包括:

  • ClusterIP(内部访问)
  • NodePort(节点端口)
  • LoadBalancer(云负载均衡)

4. Ingress

用于管理域名访问和路由规则,相当于高级反向代理。


5. ConfigMap 与 Secret

用于管理配置文件和敏感信息(如数据库密码)。


五、K8S 使用流程

1. 编写 Dockerfile

dockerfile 复制代码
FROM python:3.11
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["gunicorn", "app.wsgi"]

2. 构建镜像

bash 复制代码
docker build -t my-django:v1 .

3. 推送镜像

bash 复制代码
docker push my-django:v1

4. 编写 K8S YAML 文件

  • deployment.yaml
  • service.yaml
  • ingress.yaml

5. 部署应用

bash 复制代码
kubectl apply -f deployment.yaml

6. 查看运行状态

bash 复制代码
kubectl get pods
kubectl get services
kubectl logs pod-name

六、K8S 与 Docker Compose 对比

功能 Docker Compose Kubernetes
单机部署
多机调度
自动扩容
灰度发布
生产级推荐 一般 标准

七、适用场景

适合使用 K8S 的场景:

  • 微服务架构
  • 多服务器部署
  • 高并发系统
  • 需要灰度发布
  • 需要平台化管理

不适合的场景:

  • 单机小项目
  • 个人练习项目
  • 简单部署需求

八、学习路径建议

第一阶段

  • 熟练 Docker
  • 理解容器网络
  • 掌握 Linux 基础

第二阶段

  • 理解 CI/CD
  • 熟悉镜像仓库
  • 理解灰度发布概念

第三阶段

  • 本地 Minikube 练习
  • 理解 Helm
  • 搭建单节点 K8S

九、总结

Kubernetes 是现代云原生架构的核心基础设施。

它的价值在于:

  • 自动化
  • 可扩展
  • 高可用
  • 平台化能力

但在系统规模较小时,Docker + Nginx + CI/CD 通常已足够。

当系统复杂度提升后,K8S 将成为必然选择。

相关推荐
曹天骄2 小时前
在 Docker 容器中控制宿主机 Docker:DoD 与 DinD 的技术原理解析
docker·容器·eureka
萝卜特福2 小时前
Spring Boot 项目 Docker 部署全流程实操笔记
docker
认真的薛薛2 小时前
13.k8s中Prometheus监控集群及其服务,endpoint暴露服务,es采集k8s日志
elasticsearch·kubernetes·prometheus
国思RDIF框架3 小时前
Docker Compose多后端+多前端部署:日志集中管理实操指南(基础版+进阶版,亲测可用)
docker·容器·自动化运维
what丶k3 小时前
Docker 进阶指南:从入门能用,到生产环境稳、快、安全的核心实践与底层原理
后端·docker·容器
Bruce_Liuxiaowei3 小时前
在 macOS 上通过 Docker 本地安装 OpenClaw 完整教程
macos·docker·容器·openclaw
果壳~4 小时前
Docker镜像离线迁移:从下载到本地部署完整实战指南
运维·docker·容器
肖祥4 小时前
安装Sealos(新版k8s v1.33.6)
kubernetes
sunshinebo4 小时前
一次 GitLab 无法启动的排查:Docker 日志把 500G 磁盘打满
docker·eureka·gitlab