从 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 将成为必然选择。

相关推荐
仙柒41512 小时前
Docker存储原理
运维·docker·容器
快乐的哈士奇14 小时前
LangFuse 自托管实战:选型理由、Docker 部署与常用配置全解析
运维·人工智能·docker·容器
weixin_4492900116 小时前
Docker + MySQL 在 Windows 11 上的本地安装部署文档
mysql·docker·容器
Ysn071916 小时前
中文乱码:在 Docker 容器中设置中文语言环境
运维·python·docker·容器
米高梅狮子16 小时前
01.CentOS-Stream-8-packstack安装OpenStack
linux·云原生·容器·kubernetes·centos·自动化·openstack
zxd02031117 小时前
EFK(Elasticsearch + Fluentd + Kibana) 日志收集系统
运维·docker·jenkins
终端行者17 小时前
Jenkins Pipeline 企业级用法 参数化构建+Ansible发布---上
docker·ansible·jenkins·cicd
亚空间仓鼠18 小时前
Docker容器化高可用架构部署方案(十三)
docker·容器·架构
米高梅狮子19 小时前
01.mysql的备份与恢复
运维·数据库·mysql·docker·容器·kubernetes·github
console.log('npc')19 小时前
Windows 11 → WSL2 → Ubuntu → Docker → Codex → Sub2API
windows·ubuntu·docker