{T}

伸缩性架构 学习笔记(第 3 部分)

4.1 Kubernetes 简介

定义:Kubernetes (K8s) 是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。

核心能力

javascript
// Kubernetes 核心能力
const k8sCapabilities = {
  // 1. 自动化部署
  deployment: {
    features: ['声明式配置', '滚动更新', '回滚能力'],
    benefit: '简化部署流程,降低人为错误'
  },
  
  // 2. 弹性伸缩
  scaling: {
    features: ['水平伸缩 (HPA)', '垂直伸缩 (VPA)', '集群伸缩'],
    benefit: '自动应对流量变化,优化资源使用'
  },
  
  // 3. 服务发现与负载均衡
  serviceDiscovery: {
    features: ['Service', 'Ingress', 'DNS 解析'],
    benefit: '无需修改应用即可实现服务发现'
  },
  
  // 4. 自我修复
  selfHealing: {
    features: ['健康检查', '自动重启', '节点故障转移'],
    benefit: '提高系统可用性'
  },
  
  // 5. 密钥和配置管理
  configManagement: {
    features: ['ConfigMap', 'Secret', '环境变量注入'],
    benefit: '配置与应用分离,便于管理'
  },
  
  // 6. 存储编排
  storageOrchestration: {
    features: ['PV', 'PVC', 'StorageClass'],
    benefit: '自动挂载存储系统'
  }
}

4.2 Kubernetes 架构

code
Kubernetes 集群架构:

┌──────────────────────────────────────────────────┐
│              Master Node (控制平面)                │
├──────────────────────────────────────────────────┤
│  API Server    │  Scheduler  │  Controller Mgr  │
│  (入口)        │  (调度)      │  (控制器)         │
│                │             │                  │
│         etcd (分布式存储)                         │
└──────────────────────────────────────────────────┘
            │
    ┌───────┼───────┐
    ↓       ↓       ↓
┌────────┐ ┌────────┐ ┌────────┐
│ Node 1 │ │ Node 2 │ │ Node 3 │
├────────┤ ├────────┤ ├────────┤
│ kubelet│ │ kubelet│ │ kubelet│
│ kube-  │ │ kube-  │ │ kube-  │
│ proxy  │ │ proxy  │ │ proxy  │
│        │ │        │ │        │
│Pod Pod │ │Pod Pod │ │Pod Pod │
└────────┘ └────────┘ └────────┘
  Worker Nodes (工作节点)

4.3 Kubernetes 核心概念

Pod(最小部署单元)

yaml
# Pod 定义示例
apiVersion: v1
kind: Pod
metadata:
  name: frontend-pod
  labels:
    app: frontend
    tier: web
spec:
  containers:
  - name: nginx
    image: nginx:1.21-alpine
    ports:
    - containerPort: 80
    resources:
      requests:
        memory: "128Mi"
        cpu: "100m"
      limits:
        memory: "256Mi"
        cpu: "200m"
    livenessProbe:
      httpGet:
        path: /health
        port: 80
      initialDelaySeconds: 30
      periodSeconds: 10
    readinessProbe:
      httpGet:
        path: /ready
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5

Deployment(部署控制器)

yaml
# Deployment 定义示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: frontend
        image: my-registry/frontend:v1.0
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "512Mi"
            cpu: "500m"
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

Service(服务发现)

yaml
# Service 定义示例
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  selector:
    app: frontend
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer  # 或 ClusterIP, NodePort

Horizontal Pod Autoscaler (HPA)

yaml
# HPA 自动伸缩配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: frontend-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: frontend-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
      - type: Percent
        value: 10
        periodSeconds: 60
    scaleUp:
      stabilizationWindowSeconds: 60
      policies:
      - type: Percent
        value: 100
        periodSeconds: 15
      - type: Pods
        value: 4
        periodSeconds: 15
      selectPolicy: Max