🚀 DevOps基础

开发运维一体化 - 从代码到生产环境

⚙️ CI/CD 🐳 Docker ☸️ Kubernetes 📊 监控告警

什么是DevOps?

DevOps(Development + Operations)是一种软件开发方法论, 强调开发团队与运维团队的紧密协作,通过自动化工具和流程,实现快速、频繁、可靠的软件交付。

在AI时代,DevOps尤为重要:模型训练自动化快速迭代部署弹性资源调度实时监控反馈是AI应用成功的关键。

快速交付

Rapid Delivery

从开发到上线的周期缩短

🔄

持续集成

Continuous Integration

频繁合并代码并自动测试

🤝

协作文化

Collaboration Culture

打破开发与运维的壁垒

🗺️ DevOps完整知识体系

🏗️ DevOps技术栈全景图

mindmap root((🚀 DevOps
技术体系)) 版本控制 Git 分支策略 Git Flow GitHub Flow 代码托管 GitHub GitLab Gitee 代码审查 Pull Request Code Review Merge Request CI/CD持续集成交付 CI工具 Jenkins GitHub Actions GitLab CI CircleCI 构建工具 Maven Gradle npm/yarn Docker Build 测试自动化 单元测试 集成测试 E2E测试 性能测试 部署策略 蓝绿部署 金丝雀发布 滚动更新 A/B测试 容器化技术 Docker 镜像构建 容器运行 数据卷 网络配置 容器编排 Kubernetes Docker Swarm Docker Compose 镜像仓库 Docker Hub Harbor 阿里云ACR 基础设施即代码 IaC工具 Terraform Ansible Puppet Chef 配置管理 环境变量 配置中心 密钥管理 云平台 AWS 阿里云 腾讯云 Azure 监控与可观测性 指标监控 Prometheus Grafana Zabbix 日志管理 ELK Stack Loki Fluentd 链路追踪 Jaeger Zipkin SkyWalking 告警通知 AlertManager PagerDuty 钉钉/企微 安全DevSecOps 代码扫描 SonarQube ESLint 安全审计 容器安全 镜像扫描 运行时防护 网络隔离 密钥管理 Vault KMS Secrets AI应用DevOps 模型管理 MLflow DVC 模型仓库 训练流程 训练脚本 超参调优 分布式训练 模型部署 模型服务化 A/B测试 在线学习 资源调度 GPU调度 弹性伸缩 成本优化

⚙️ CI/CD流水线完整流程

graph LR DEV["💻 开发
Developer"] subgraph VCS["📁 版本控制 Version Control"] GIT["Git仓库
GitHub/GitLab"] PR["Pull Request
代码审查"] end subgraph CI["🔧 持续集成 Continuous Integration"] TRIGGER["触发构建
Webhook"] BUILD["代码构建
Compile"] UNIT["单元测试
Unit Test"] STATIC["静态分析
SAST"] PACKAGE["打包
Package"] end subgraph CD_STAGE["🚀 CD阶段化部署"] IMG["构建镜像
Docker Build"] PUSH["推送镜像
Registry"] DEPLOY_TEST["部署测试环境
Test"] INT_TEST["集成测试
Integration Test"] DEPLOY_STAGE["部署预发布
Staging"] SMOKE["冒烟测试
Smoke Test"] end subgraph PROD["🌐 生产部署 Production"] APPROVE["人工审批
Manual Approval"] DEPLOY_PROD["部署生产
Production"] ROLLBACK["回滚机制
Rollback"] MONITOR["监控告警
Monitoring"] end DEV --> GIT GIT --> PR PR --> TRIGGER TRIGGER --> BUILD BUILD --> UNIT UNIT --> STATIC STATIC --> PACKAGE PACKAGE --> IMG IMG --> PUSH PUSH --> DEPLOY_TEST DEPLOY_TEST --> INT_TEST INT_TEST --> DEPLOY_STAGE DEPLOY_STAGE --> SMOKE SMOKE --> APPROVE APPROVE -->|"通过"| DEPLOY_PROD DEPLOY_PROD --> MONITOR MONITOR -->|"异常"| ROLLBACK ROLLBACK --> DEPLOY_PROD style VCS fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style CI fill:#d1fae5,stroke:#059669,stroke-width:2px style CD_STAGE fill:#fef3c7,stroke:#f59e0b,stroke-width:2px style PROD fill:#fce7f3,stroke:#db2777,stroke-width:2px style DEPLOY_PROD fill:#fbbf24,stroke:#d97706,stroke-width:3px

1. 版本控制

代码提交与审查

2. 持续集成

自动构建与测试

3. 阶段部署

测试环境验证

4. 生产发布

上线与监控

🐳 Docker容器化架构

graph TB subgraph HOST["🖥️ 宿主机 Host OS"] DOCKER["🐳 Docker Engine"] end subgraph CONTAINERS["📦 容器层 Containers"] C1["容器1
Nginx"] C2["容器2
Python App"] C3["容器3
MySQL"] end subgraph IMAGES["💿 镜像层 Images"] I1["nginx:latest"] I2["python:3.11"] I3["mysql:8.0"] end subgraph REGISTRY["🏛️ 镜像仓库 Registry"] DOCKERHUB["Docker Hub"] HARBOR["Harbor私有仓库"] ACR["云厂商Registry"] end subgraph NETWORK["🌐 网络"] BRIDGE["Bridge桥接"] HOST_NET["Host主机"] OVERLAY["Overlay覆盖"] end subgraph VOLUME["💾 数据卷"] VOL_DATA["数据持久化"] VOL_CONFIG["配置文件"] VOL_LOG["日志文件"] end DOCKER --> CONTAINERS IMAGES --> CONTAINERS REGISTRY --> IMAGES DOCKER --> NETWORK DOCKER --> VOLUME CONTAINERS --> NETWORK CONTAINERS --> VOLUME I1 --> C1 I2 --> C2 I3 --> C3 style DOCKER fill:#0db7ed,stroke:#0db7ed,stroke-width:3px,color:#fff style CONTAINERS fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style IMAGES fill:#d1fae5,stroke:#059669,stroke-width:2px style REGISTRY fill:#fef3c7,stroke:#f59e0b,stroke-width:2px

🎯 Docker核心概念

镜像(Image)

只读模板,包含运行时环境

容器(Container)

镜像的运行实例,可读写

仓库(Registry)

存储和分发镜像

☸️ Kubernetes集群架构

graph TB subgraph MASTER["🎯 Master节点 Control Plane"] API["API Server
集群网关"] ETCD["etcd
配置存储"] SCHEDULER["Scheduler
调度器"] CONTROLLER["Controller
控制器"] end subgraph WORKER1["💻 Worker节点1"] KUBELET1["Kubelet
节点代理"] KUBE_PROXY1["Kube-proxy
网络代理"] POD1["Pod 1
容器组"] POD2["Pod 2
容器组"] end subgraph WORKER2["💻 Worker节点2"] KUBELET2["Kubelet
节点代理"] KUBE_PROXY2["Kube-proxy
网络代理"] POD3["Pod 3
容器组"] POD4["Pod 4
容器组"] end subgraph RESOURCES["📋 K8s资源对象"] DEPLOY["Deployment
部署管理"] SVC["Service
服务发现"] INGRESS["Ingress
流量入口"] CM["ConfigMap
配置"] SECRET["Secret
密钥"] end USER["👤 用户"] --> API API --> ETCD API --> SCHEDULER API --> CONTROLLER SCHEDULER --> KUBELET1 SCHEDULER --> KUBELET2 KUBELET1 --> POD1 KUBELET1 --> POD2 KUBELET2 --> POD3 KUBELET2 --> POD4 API --> RESOURCES RESOURCES --> KUBELET1 RESOURCES --> KUBELET2 style MASTER fill:#fef3c7,stroke:#f59e0b,stroke-width:3px style WORKER1 fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style WORKER2 fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style RESOURCES fill:#d1fae5,stroke:#059669,stroke-width:2px style API fill:#fbbf24,stroke:#d97706,stroke-width:2px

🎯 Master组件

  • API Server: 集群入口,处理REST请求
  • etcd: 键值存储,保存集群状态
  • Scheduler: 决定Pod运行在哪个节点
  • Controller: 维护集群期望状态

💻 Worker组件

  • Kubelet: 管理Pod生命周期
  • Kube-proxy: 网络规则维护
  • Container Runtime: Docker/containerd
  • Pod: 最小部署单元

🔍 核心技术详解

🐳

Docker实战

容器化应用

📝 Dockerfile示例

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "app.py"]

⚡ 常用命令

docker build -t myapp:v1.0 .
docker run -p 8000:8000 myapp:v1.0
docker ps | docker logs

AI应用:将AI模型服务打包成Docker镜像,实现一致的运行环境

☸️

Kubernetes实战

容器编排

📝 Deployment YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ai-model-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ai-model
  template:
    spec:
      containers:
      - name: model
        image: mymodel:v1.0
        ports:
        - containerPort: 8000

⚡ 常用命令

kubectl apply -f deploy.yaml
kubectl get pods | logs
kubectl scale --replicas=5

AI应用:K8s自动调度GPU资源,实现模型服务的弹性伸缩

🎯 部署策略对比

graph TB subgraph BLUE_GREEN["💙💚 蓝绿部署 Blue-Green"] BLUE["蓝环境
旧版本v1.0
100%流量"] GREEN["绿环境
新版本v2.0
部署测试"] SWITCH["切换流量
一键切换"] BLUE --> SWITCH GREEN --> SWITCH end subgraph CANARY["🐤 金丝雀发布 Canary"] V1["旧版本
90%流量"] V2["新版本
10%流量"] OBSERVE["观察指标
错误率·延迟"] GRADUAL["逐步放量
30% → 50% → 100%"] V1 --> OBSERVE V2 --> OBSERVE OBSERVE --> GRADUAL end subgraph ROLLING["🔄 滚动更新 Rolling"] P1["Pod 1
v1.0 → v2.0"] P2["Pod 2
v1.0 → v2.0"] P3["Pod 3
v1.0 → v2.0"] P1 --> P2 P2 --> P3 end style BLUE_GREEN fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style CANARY fill:#fef3c7,stroke:#f59e0b,stroke-width:2px style ROLLING fill:#d1fae5,stroke:#059669,stroke-width:2px

蓝绿部署

优点:快速回滚,零停机

缺点:需要2倍资源

适合:关键业务系统

金丝雀发布

优点:风险可控,渐进式

缺点:需要流量控制能力

适合:大规模用户系统

滚动更新

优点:资源利用高

缺点:更新较慢

适合:K8s默认策略

📊 监控与可观测性

🏛️ 可观测性三大支柱

graph TB OBSERVABILITY["🔍 可观测性
Observability"] subgraph METRICS["📈 指标 Metrics"] PROM["Prometheus
时序数据库"] GRAFANA["Grafana
可视化"] ALERT["AlertManager
告警"] CPU["CPU使用率"] MEM["内存使用率"] QPS["请求QPS"] LATENCY["响应延迟"] ERROR["错误率"] CPU --> PROM MEM --> PROM QPS --> PROM LATENCY --> PROM ERROR --> PROM PROM --> GRAFANA PROM --> ALERT end subgraph LOGS["📋 日志 Logs"] ELASTIC["Elasticsearch
搜索引擎"] LOGSTASH["Logstash
日志处理"] KIBANA["Kibana
日志分析"] FILEBEAT["Filebeat
日志采集"] FILEBEAT --> LOGSTASH LOGSTASH --> ELASTIC ELASTIC --> KIBANA end subgraph TRACES["🔗 链路追踪 Traces"] JAEGER["Jaeger
分布式追踪"] ZIPKIN["Zipkin
追踪系统"] OTEL["OpenTelemetry
标准协议"] REQ["请求A"] --> SVC1["服务1
50ms"] SVC1 --> SVC2["服务2
100ms"] SVC2 --> DB["数据库
30ms"] SVC1 --> JAEGER SVC2 --> JAEGER DB --> JAEGER end OBSERVABILITY --> METRICS OBSERVABILITY --> LOGS OBSERVABILITY --> TRACES style OBSERVABILITY fill:#fbbf24,stroke:#d97706,stroke-width:4px style METRICS fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style LOGS fill:#d1fae5,stroke:#059669,stroke-width:2px style TRACES fill:#fce7f3,stroke:#db2777,stroke-width:2px

📈 Metrics指标

作用:量化系统状态

如:CPU 80%、QPS 1000、延迟 50ms

📋 Logs日志

作用:详细事件记录

如:错误堆栈、用户操作、系统事件

🔗 Traces链路

作用:请求调用链

如:请求经过哪些服务,每步耗时

🎯 黄金指标(Golden Signals)

延迟 Latency

处理请求所需时间

目标:P99 < 100ms

流量 Traffic

系统接收的请求量

指标:QPS/RPS

错误 Errors

请求失败的比率

目标:错误率 < 0.1%

饱和度 Saturation

服务资源使用率

关注:CPU、内存、磁盘

⚠️ 告警策略

P0

严重告警

服务不可用、数据丢失

→ 立即处理,电话通知

P1

高优先级

性能严重下降、部分功能异常

→ 1小时内响应

P2

中优先级

资源使用率高、轻微性能问题

→ 工作时间处理

P3

低优先级

信息通知、优化建议

→ 可延后处理

🤖 AI应用DevOps实践

🔄 MLOps完整流程

graph LR DATA["📊 数据准备
Data Pipeline"] TRAIN["🏋️ 模型训练
Training"] EVAL["📈 模型评估
Evaluation"] REGISTRY["🏛️ 模型注册
Model Registry"] DEPLOY["🚀 模型部署
Deployment"] MONITOR["📊 监控反馈
Monitoring"] DATA --> TRAIN TRAIN --> EVAL EVAL -->|"通过"| REGISTRY EVAL -->|"不通过"| TRAIN REGISTRY --> DEPLOY DEPLOY --> MONITOR MONITOR -->|"性能下降"| DATA subgraph TOOLS["🛠️ MLOps工具"] DVC["DVC
数据版本"] MLFLOW["MLflow
实验跟踪"] KUBEFLOW["Kubeflow
训练编排"] SELDON["Seldon
模型服务"] end DATA --> DVC TRAIN --> MLFLOW TRAIN --> KUBEFLOW DEPLOY --> SELDON style DATA fill:#dbeafe,stroke:#3b82f6,stroke-width:2px style TRAIN fill:#d1fae5,stroke:#059669,stroke-width:2px style DEPLOY fill:#fef3c7,stroke:#f59e0b,stroke-width:2px style MONITOR fill:#fce7f3,stroke:#db2777,stroke-width:2px
📦

模型容器化

将模型打包成Docker镜像

  • • 包含模型文件和依赖
  • • FastAPI/Flask提供API
  • • 多阶段构建减小镜像大小
  • • GPU支持(NVIDIA Container Toolkit)
⚖️

自动伸缩

根据负载动态调整实例

  • • HPA水平自动扩展
  • • 基于CPU/内存/GPU
  • • 基于自定义指标(QPS)
  • • 最小/最大副本数限制
🔀

A/B测试

新旧模型版本对比

  • • 流量分割(90% vs 10%)
  • • 性能指标对比
  • • 自动切换最优版本
  • • Istio实现流量管理
📊

模型监控

实时跟踪模型性能

  • • 推理延迟监控
  • • 准确率/F1分数趋势
  • • 数据漂移检测
  • • 异常样本告警
💾

模型版本管理

管理模型迭代历史

  • • MLflow Model Registry
  • • 版本打标签(staging/prod)
  • • 快速回滚到历史版本
  • • 模型血缘追踪

GPU资源调度

高效利用昂贵的GPU

  • • K8s GPU调度器
  • • GPU共享(vGPU)
  • • Spot实例降低成本
  • • 多卡分布式训练

🏆 DevOps最佳实践

📦

基础设施即代码

  • • 使用Git管理基础设施配置
  • • Terraform定义云资源
  • • Ansible自动化配置
  • • 配置变更可追溯
🔄

GitOps工作流

  • • Git作为唯一真实来源
  • • Pull Request审查变更
  • • ArgoCD自动同步
  • • 声明式配置管理
🔒

DevSecOps安全

  • • 镜像安全扫描(Trivy)
  • • 密钥管理(Vault)
  • • RBAC权限控制
  • • 网络策略隔离
📊

全面可观测性

  • • 指标、日志、链路三位一体
  • • 分布式追踪(Jaeger)
  • • 主动监控和告警
  • • SLO/SLI服务目标
🚨

故障应急响应

  • • On-Call值班制度
  • • 故障预案Runbook
  • • 快速回滚机制
  • • 事后复盘(Postmortem)
💡

持续改进

  • • DORA指标跟踪
  • • 自动化优先
  • • 文档化知识
  • • 团队能力建设

🛠️ DevOps工具生态

🐙

GitHub Actions

CI/CD

🦊

GitLab CI

完整DevOps

🤖

Jenkins

自动化

🐳

Docker

容器化

☸️

Kubernetes

编排

📊

Prometheus

监控

📈

Grafana

可视化

🔍

ELK Stack

日志

🌐

Terraform

IaC

⚙️

Ansible

自动化

🔐

Vault

密钥管理

🚀

ArgoCD

GitOps

💡 学习建议

🏗️

从实践开始

搭建自己的CI/CD流水线,部署一个完整应用到K8s

🎯

聚焦核心工具

先掌握Docker和K8s,这是云原生的基础

🤝

理解DevOps文化

不只是工具,更是开发与运维的协作方式