从 Compose 迁移到 K8s
Docker Compose 应用可迁移到 Kubernetes,下面介绍迁移方法。
Kompose 工具
安装
Bash
# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.31.2/kompose-linux-amd64 \
-o /usr/local/bin/kompose
chmod +x /usr/local/bin/kompose
转换
Bash
# 转换 Compose 文件
kompose convert -f docker-compose.yml -o k8s/
# 输出
k8s/
├── app-deployment.yaml
├── app-service.yaml
├── db-deployment.yaml
├── db-service.yaml
└── db-persistentvolumeclaim.yaml
配置差异
服务 vs Deployment
YAML
# Compose
services:
app:
image: my-app
ports:
- "80:80"
# K8s
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: my-app
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: app
数据卷
YAML
# Compose
volumes:
- db-data:/var/lib/postgresql/data
# K8s
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: db-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
环境变量
YAML
# Compose
environment:
- DB_PASSWORD=${DB_PASSWORD}
# K8s
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
迁移流程
1. 转换文件
Bash
kompose convert -f docker-compose.yml
2. 调整配置
Bash
# 编辑生成的 K8s 文件
# 添加健康检查、资源限制等
3. 应用资源
Bash
kubectl apply -f k8s/
4. 验证
Bash
kubectl get pods
kubectl get services
kubectl logs -f deployment/app
高级配置
健康检查
YAML
# K8s 健康检查
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 40
periodSeconds: 30
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
资源限制
YAML
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: "0.5"
memory: 256Mi
注意事项
- Kompose 转换后需手动调整高级配置
- K8s Service 替代 Compose ports 配置
- K8s Secret 替代 Compose 环境变量(敏感信息)
- K8s PVC 替代 Compose volumes 配置
- K8s 支持副本数、滚动升级等高级特性
要点总结
- Kompose 将 Compose 文件转换为 K8s Deployment/Service/PVC
- 转换后需手动调整健康检查、资源限制等高级配置
- K8s Service 替代 Compose 端口映射,实现服务发现
- K8s Secret 和 PVC 分别管理敏感信息和持久化数据
- 迁移流程:转换 → 调整 → 应用 → 验证
📝 发现内容有误?点击此处直接编辑