1. 容器化(Containerization)
本质:将应用及其依赖打包成标准化、轻量级的可执行单元
关键技术:
- Docker:提供镜像格式和运行时
- containerd:行业标准容器运行时
- 镜像分层:提高构建效率和存储利用率
实现示例:
dockerfile
# 多阶段构建示例
FROM golang:1.21 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:latest
COPY --from=builder /app/myapp .
CMD ["./myapp"]
优势:
- 环境一致性(Dev/Test/Prod)
- 资源隔离(cgroups/namespace)
- 快速启动(秒级)
2. 动态编排(Orchestration)
核心组件:
API Server Scheduler Controller Manager etcd Node Kubelet Container Runtime
关键能力:
- 自愈:自动重启故障容器
- 扩缩容:HPA根据CPU/内存或自定义指标
- 滚动更新:
kubectl rollout
实现零停机部署
典型操作:
bash
# 自动扩展示例
kubectl autoscale deployment myapp --cpu-percent=50 --min=3 --max=10
3. 微服务(Microservices)
架构对比:
维度 | 单体架构 | 微服务架构 |
---|---|---|
代码库 | 单一 | 多个独立库 |
部署 | 整体发布 | 独立部署 |
技术栈 | 统一 | 混合(多语言) |
扩展性 | 垂直扩展 | 细粒度水平扩展 |
通信模式:
- 同步:REST/gRPC
- 异步:消息队列(Kafka/RabbitMQ)
- 服务网格:Istio/Linkerd(mTLS+流量控制)
4. 声明式API(Declarative)
与命令式对比:
bash
# 命令式(如何做)
kubectl run nginx --image=nginx:latest
# 声明式(期望状态)
kubectl apply -f deployment.yaml
YAML示例:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
5. 不可变基础设施(Immutable)
实践模式:
-
镜像构建后不再修改
-
变更时整体替换(蓝绿/金丝雀发布)
-
回滚机制:
bashkubectl rollout undo deployment/myapp
优势:
- 消除配置漂移
- 确定性的部署结果
- 可重复的构建过程
6. 松耦合(Loose Coupling)
实现方式:
- 服务发现:CoreDNS+Headless Service
- 异步通信:事件驱动架构(EDA)
- 契约:OpenAPI/Schema Registry
健康检查:
yaml
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
readinessProbe:
exec:
command: ["/bin/sh", "-c", "check-db-connection"]
7. 可观测性(Observability)
三大支柱:
-
指标(Metrics):
- Prometheus格式:
http_requests_total{status="200"} 2345
- 黄金指标:吞吐量/延迟/错误率
- Prometheus格式:
-
日志(Logging):
- EFK栈:Fluentd→Elasticsearch→Kibana
- 结构化日志:
{"level":"error","trace_id":"abc123"}
-
追踪(Tracing):
req1 req2 req3 Frontend Auth DB Payment
- 工具:Jaeger/Zipkin
- 标准:OpenTelemetry
8. 自动化(Automation)
CI/CD流水线:
代码提交 单元测试 构建镜像 安全扫描 部署到Stage 自动化测试 生产发布
GitOps实践:
- 使用Git作为唯一事实源
- ArgoCD持续同步集群状态
- PR合并即触发部署
9. 弹性(Resilience)
容错模式:
- 超时:
timeout: 2s
- 重试:
retries: 3
- 熔断:
failureThreshold: 3
- 限流:
requests: 100/s
混沌工程:
bash
# 模拟节点故障
kubectl drain <node> --ignore-daemonsets
# 网络延迟注入
istioctl experimental inject delay --duration=500ms
10. 多云/混合云(Multi-Cloud)
实现方案:
- 统一抽象层:K8s Cluster API
- 存储跨云:Rook/Ceph
- 网络互联:Submariner
部署模式:
AWS Global LB Azure 终端用户
云原生架构通过以上特性的组合,实现12要素应用原则,构建真正面向云时代的弹性系统。实际落地时需根据组织成熟度逐步演进。