容器编排概念
什么是容器编排
容器编排(Container Orchestration)是自动化管理容器生命周期、部署、扩缩容和网络通信的过程。当容器数量达到几十上百个时,手工管理变得不可行,编排工具应运而生。
核心概念
1. 服务(Service)
Service 是编排中的基本抽象,描述了一组相同配置的容器:
# Swarm
docker service create --name web --replicas 5 nginx
# K8s
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web
ports:
- port: 80
2. 调度(Scheduling)
调度器决定容器应该运行在哪台机器上:
调度策略:
- 资源感知(CPU/内存)
- 亲和性(一起运行或分开运行)
- 约束(只能在特定标签的节点上运行)
- 打散(均匀分布在各个节点)
3. 声明式状态(Declarative State)
声明你想要的状态,编排工具负责达到和维护:
# 声明:我要运行 3 个 nginx 实例
replicas: 3
# 编排器自动:
# 1. 如果少于 3 个:启动新的
# 2. 如果多于 3 个:停止多余的
# 3. 如果节点挂了:在另一个节点重新启动
4. 服务发现(Service Discovery)
容器自动注册到服务发现系统,其他服务可以通过服务名访问:
App 请求 http://user-service → DNS 解析 → 10.0.1.5:8080
→ Round Robin → 10.0.1.6:8080
5. 负载均衡(Load Balancing)
将流量均匀分布到多个容器实例:
用户请求
│
▼
[Load Balancer]
├──→ web:1 (10.0.1.5)
├──→ web:2 (10.0.1.6)
└──→ web:3 (10.0.1.7)
6. 自动扩缩容(Auto Scaling)
根据指标自动调整容器数量:
# K8s HPA 示例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
7. 健康检查(Health Check)
编排器定期检查容器是否健康:
# Docker 健康检查
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost/health || exit 1
# K8s 探针
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
编排的核心流程
1. 用户定义期望状态(YAML/JSON)
2. 编排器读取配置
3. 调度器选择合适的节点
4. 在节点上启动容器
5. 注册到服务发现
6. 配置负载均衡
7. 持续监控健康状态
8. 自动恢复故障实例
常用的编排工具
| 工具 | 特点 | 适用场景 |
|---|---|---|
| Docker Swarm | 内置、简单 | 中小规模、Docker 体系 |
| Kubernetes | 功能丰富、生态大 | 大规模、复杂需求 |
| Nomad | 轻量、支持非容器 | 混合工作负载 |
| Apache Mesos | 大规模资源管理 | 大数据+容器混部 |
面试要点
- 容器编排的核心是声明式管理——你定义”想要什么”,编排器负责”达到并维持”
- 服务发现 + 负载均衡是微服务通信的基础
- 健康检查和自动恢复保证了高可用
- 自动扩缩容根据实际负载调整资源
- 从单机 Docker → Compose → Swarm/K8s 是容器化的发展路径
面试官常问:你如何理解声明式编排?和命令式编排有什么区别?
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容