伸缩性架构 学习笔记(第 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: 5Deployment(部署控制器)
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: 0Service(服务发现)
yaml
# Service 定义示例
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
selector:
app: frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer # 或 ClusterIP, NodePortHorizontal 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