为什么需要 Kubernetes

为什么需要 Kubernetes

传统部署的困境

让我们从一个实际场景开始。

场景:部署一个在线商城

假设你正在运营一个在线商城,随着业务发展,你会遇到这些问题:

问题 1:流量波动

  • 平时访问量 1000 人/小时
  • 促销活动时 10000 人/小时
  • 晚上 2 点只有 100 人/小时

传统方案:按峰值配置服务器 → 大部分时间资源浪费

问题 2:系统可靠性

  • 服务器硬件故障
  • 应用程序崩溃
  • 网络问题

传统方案:人工监控,手动重启 → 响应慢,可能导致长时间服务中断

问题 3:快速迭代

  • 每周发布新功能
  • 需要无停机更新
  • 出问题要快速回滚

传统方案:制定复杂的发布流程,深夜维护窗口 → 效率低,风险高

Docker 解决了什么问题?

Docker 的出现解决了"环境一致性"问题:

# 本地开发
docker run myapp

# 测试环境
docker run myapp

# 生产环境
docker run myapp

但是 Docker 只是容器运行时,还有很多问题没解决:

  • ❌ 如何管理 100 个容器?
  • ❌ 容器崩溃了谁来重启?
  • ❌ 如何在多台机器上分配容器?
  • ❌ 如何实现负载均衡?
  • ❌ 如何实现自动扩缩容?

Kubernetes 的价值

Kubernetes 提供了完整的容器编排解决方案。

1. 自动化运维

自我修复(Self-Healing)

# 定义期望状态:始终运行 3 个副本
replicas: 3

Kubernetes 会自动:

  • 监控容器健康状态
  • 容器崩溃时自动重启
  • 节点故障时在其他节点重新创建容器

2. 弹性伸缩

水平扩展(Horizontal Scaling)

# 手动扩展
kubectl scale deployment myapp --replicas=10

# 自动扩展
kubectl autoscale deployment myapp --min=3 --max=10 --cpu-percent=80

根据 CPU 使用率自动调整副本数量:

  • CPU > 80%:增加副本
  • CPU < 50%:减少副本

3. 滚动更新和回滚

零停机部署

# 更新应用到新版本
kubectl set image deployment/myapp myapp=myapp:v2

# 发现问题,立即回滚
kubectl rollout undo deployment/myapp

Kubernetes 会:

  • 逐步用新版本替换旧版本
  • 确保始终有可用的容器
  • 出问题时可以一键回滚

4. 服务发现和负载均衡

自动负载均衡

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080

Kubernetes 会:

  • 自动发现所有 myapp 容器
  • 在容器之间分配流量
  • 容器增减时自动更新路由

5. 配置和密钥管理

# 配置文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_host: db.example.com
  
# 敏感信息
apiVersion: v1
kind: Secret
metadata:
  name: app-secret
data:
  database_password: cGFzc3dvcmQxMjM=  # base64 编码

配置与代码分离,统一管理。

实际收益

采用 Kubernetes 后,企业通常会获得:

成本节约

  • 资源利用率提升:从 30% 提升到 70%
  • 人力成本降低:减少运维人员 50%
  • 基础设施成本:通过自动伸缩节省 30-40%

效率提升

  • 部署时间:从 2 小时降到 5 分钟
  • 故障恢复:从 30 分钟降到 30 秒
  • 开发效率:提升 3-5 倍

可靠性提升

  • 服务可用性:从 99% 提升到 99.99%
  • 故障影响:局部故障不影响整体服务
  • 灾难恢复:快速切换到备用集群

什么时候需要 Kubernetes?

适合使用 Kubernetes 的场景

✅ 微服务架构应用
✅ 需要高可用性的系统
✅ 需要频繁部署更新
✅ 流量波动较大的应用
✅ 多环境部署(开发/测试/生产)
✅ 需要跨云/混合云部署

可能不需要 Kubernetes 的场景

❌ 简单的单体应用
❌ 流量很小且稳定
❌ 团队规模小(1-2 人)
❌ 对运维技术栈没有要求
❌ 短期项目或原型验证

学习曲线

Kubernetes 功能强大,但确实有学习曲线:

难度等级:⭐⭐⭐⭐☆

学习时间估算:
- 基础入门:1-2 周
- 日常使用:1-2 个月
- 精通掌握:6-12 个月

但请记住:投入是值得的!Kubernetes 已成为云原生时代的必备技能。

小结

Kubernetes 解决了容器化应用的编排问题,提供了:

  • 🔄 自动化运维
  • 📈 弹性伸缩
  • 🚀 快速部署
  • 🛡️ 高可用性
  • 💰 成本优化

接下来,让我们了解 Kubernetes 的架构。