容器编排实战:Docker与Kubernetes对比选型与落地实践
大家好,我是迪哥。容器编排是云原生时代的核心技术,从 Docker Compose 到 Kubernetes,从 Swarm 到 K3s,我们经历了多种方案的演进。今天就聊聊容器编排的选型和落地经验。
容器编排方案对比
| 方案 | 适用场景 | 特点 |
|---|---|---|
| Docker Compose | 开发测试环境 | 简单易用,单机部署 |
| Docker Swarm | 小型生产环境 | Docker原生,轻量级 |
| Kubernetes | 中大型生产环境 | 功能完善,生态成熟 |
| K3s | 边缘计算/轻量环境 | 轻量K8s,资源占用低 |
Docker Compose 实战
docker-compose.yml
yaml
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
- DB_URL=jdbc:mysql://db:3306/example
depends_on:
- db
restart: always
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=example
volumes:
- mysql-data:/var/lib/mysql
restart: always
redis:
image: redis:7.0
volumes:
- redis-data:/data
restart: always
volumes:
mysql-data:
redis-data:
常用命令
bash
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
# 重启服务
docker-compose restart
Kubernetes 实战
Pod 配置
yaml
apiVersion: v1
kind: Pod
metadata:
name: app-pod
labels:
app: myapp
spec:
containers:
- name: app
image: registry.example.com/app:latest
ports:
- containerPort: 8080
env:
- name: DB_URL
value: "jdbc:mysql://mysql-service:3306/example"
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
Service 配置
yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: myapp
ports:
- name: http
port: 80
targetPort: 8080
type: ClusterIP
Deployment 配置
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: app
image: registry.example.com/app:latest
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
K3s 轻量部署
安装 K3s
bash
# 安装服务端
curl -sfL https://get.k3s.io | sh -
# 安装客户端
curl -sfL https://get.k3s.io | K3S_URL=https://server-ip:6443 K3S_TOKEN=token sh -
部署应用
bash
# 使用 kubectl 部署
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
最佳实践清单
| 维度 | 最佳实践 |
|---|---|
| 开发环境 | 使用 Docker Compose |
| 小型生产 | 使用 K3s |
| 中大型生产 | 使用标准 K8s |
| 资源限制 | 配置合理的资源请求和限制 |
| 健康检查 | 配置 liveness 和 readiness probe |
| 监控 | 集成 Prometheus + Grafana |
说到容器编排,我家那只叫 Docker 的哈士奇最近学会了"容器管理"------把自己的玩具按类型分类放在不同的箱子里,说是这样找起来方便,这编排能力比我们的 K8s 还强 😂
我是迪哥,我们下期再见!