一、核心定义

云原生(Cloud Native) 是一种构建和运行应用的方法论,充分利用云计算优势,实现快速交付和弹性伸缩。

CNCF 官方定义

云原生技术使组织能够在公有云、私有云和混合云等现代动态环境中,构建和运行可弹性扩展的应用。

四大核心特征

  1. 容器化(Containerization):应用打包为容器镜像
  2. 微服务(Microservices):松耦合的服务架构
  3. 动态编排(Orchestration):K8s 自动化管理
  4. DevOps:CI/CD 快速迭代

二、云原生 vs 传统架构

对比项 传统架构 云原生
部署方式 物理机/虚拟机 容器 + K8s
扩展性 手动加机器 自动弹性伸缩
发布周期 月/季度 周/天(持续交付)
故障恢复 人工介入 自愈(Pod 重启)
资源利用 30-40% 60-80%
多云支持 绑定厂商 跨云迁移

三、云原生技术栈

CNCF Landscape 核心组件

容器运行时: Docker / containerd
编排调度: Kubernetes
服务网格: Istio / Linkerd
可观测性: Prometheus + Grafana + Jaeger
CI/CD: GitLab CI / ArgoCD / Tekton
镜像仓库: Harbor
配置管理: Helm / Kustomize
安全: Falco / OPA

典型架构

┌──────────────────────────────────┐
│      CI/CD Pipeline              │
│  (GitLab CI → ArgoCD → K8s)      │
└───────────┬──────────────────────┘
            ↓
┌──────────────────────────────────┐
│    Kubernetes Cluster            │
│  ┌────────────────────────────┐  │
│  │  Istio (Service Mesh)      │  │
│  └─────────┬──────────────────┘  │
│            ↓                     │
│  ┌─────────────┐ ┌────────────┐ │
│  │ Microservice│ │Microservice│ │
│  │     A       │ │     B      │ │
│  └─────────────┘ └────────────┘ │
└──────────────────────────────────┘
            ↓
┌──────────────────────────────────┐
│   Observability Stack            │
│  Prometheus + Grafana + Jaeger   │
└──────────────────────────────────┘

四、12 要素应用(The Twelve-Factor App)

云原生应用设计原则:

要素 说明 示例
代码库 版本控制,一份代码多环境部署 Git + 分支策略
依赖 显式声明依赖 pom.xmlrequirements.txt
配置 配置与代码分离 ConfigMap、环境变量
后端服务 服务即资源 数据库、MQ 可替换
构建发布运行 严格分离 CI 构建 → CD 发布
无状态进程 应用无状态 Session 存 Redis
端口绑定 自包含服务 Spring Boot 内嵌 Tomcat
并发 水平扩展 kubectl scale
快速启动 秒级启动关闭 容器化
开发环境一致 Dev 与 Prod 相同 Docker 镜像
日志 日志流处理 stdout → ELK
管理进程 一次性任务 K8s Job

五、Kubernetes 核心能力

1. 声明式 API

# 声明期望状态,K8s 自动调谐
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3  # 期望 3 个副本
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.21

2. 自动化运维

能力 说明
自愈 Pod 挂掉自动重启
弹性伸缩 HPA 根据 CPU/内存自动扩容
滚动更新 零停机发布
服务发现 Service 自动负载均衡

3. HPA 自动扩缩容示例

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70  # CPU > 70% 扩容

六、DevOps 与 GitOps

CI/CD 流程

开发提交代码 → Git Push
    ↓
CI 自动触发 (GitLab CI)
    ↓
编译 → 单元测试 → 构建镜像 → 推送到 Harbor
    ↓
CD 自动部署 (ArgoCD)
    ↓
K8s 滚动更新 → 健康检查
    ↓
Prometheus 监控告警

GitOps 示例

# Git 仓库存储 K8s YAML
# ArgoCD 监听 Git 变化自动同步
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
spec:
  source:
    repoURL: https://github.com/myrepo/k8s-manifests
    path: production
  destination:
    server: https://kubernetes.default.svc

七、可观测性(Observability)

三大支柱

  1. 指标(Metrics):Prometheus 采集 QPS、延迟
  2. 日志(Logs):ELK Stack 集中管理
  3. 链路追踪(Tracing):Jaeger 分布式追踪

Prometheus 监控示例

// Spring Boot Actuator 暴露指标
@RestController
public class OrderController {
    
    @Timed(value = "order.create")  // 自动采集耗时
    @PostMapping("/order")
    public Order create(@RequestBody OrderDTO dto) {
        return orderService.create(dto);
    }
}

八、云原生的挑战

挑战 解决方案
学习曲线陡 分阶段引入(容器化 → K8s → 服务网格)
运维复杂 使用托管 K8s(阿里云 ACK、AWS EKS)
成本问题 资源配额管理、Spot 实例降成本
安全风险 OPA 策略控制、镜像扫描(Trivy)

九、落地路径

阶段 1:容器化(3-6 个月)

  • Docker 化现有应用
  • 镜像仓库搭建(Harbor)
  • CI/CD 集成

阶段 2:K8s 编排(6-12 个月)

  • 部署 K8s 集群
  • 应用迁移到 K8s
  • 配置 HPA、健康检查

阶段 3:服务网格(12-18 个月)

  • 引入 Istio
  • 灰度发布、流量治理
  • 可观测性完善

十、答题总结

2 分钟框架

  1. 定义:云原生是一套方法论,利用容器、微服务、K8s 实现弹性高效的应用
  2. 核心技术
    • 容器化(Docker)
    • 编排(Kubernetes)
    • 服务网格(Istio)
    • DevOps(GitOps)
  3. 关键价值
    • 快速交付(CI/CD 自动化)
    • 弹性伸缩(HPA 自动扩容)
    • 高可用(自愈、滚动更新)
  4. 12 要素:无状态、配置分离、日志流等
  5. 挑战:学习曲线、运维复杂度(可用托管 K8s)

加分点:提及 CNCF、12 要素、GitOps、可观测性三大支柱