yudao-cloud Docker部署:容器化部署与Kubernetes集群管理
前言
还在为复杂的微服务部署而头疼吗?yudao-cloud作为基于Spring Cloud Alibaba的企业级微服务框架,提供了完整的Docker容器化部署方案。本文将带你从零开始,掌握yudao-cloud的Docker部署全流程,并深入探讨Kubernetes集群管理的最佳实践。
通过本文,你将获得:
- ✅ 完整的Docker Compose部署方案
- ✅ 多模块微服务的容器化构建指南
- ✅ Kubernetes集群部署配置详解
- ✅ 生产环境优化策略与监控方案
- ✅ 持续集成/持续部署(CI/CD)流水线设计
一、项目架构与部署需求分析
1.1 yudao-cloud微服务架构
yudao-cloud采用典型的微服务架构,主要包含以下核心模块:
1.2 部署环境要求
| 组件 | 版本要求 | 说明 |
|---|---|---|
| JDK | 1.8+ | 推荐使用Eclipse Temurin |
| Docker | 20.10+ | 容器运行时环境 |
| Docker Compose | 2.0+ | 容器编排工具 |
| MySQL | 5.7/8.0 | 关系型数据库 |
| Redis | 6.0+ | 缓存数据库 |
| Nacos | 2.0+ | 服务注册与配置中心 |
二、Docker化部署实战
2.1 项目Dockerfile解析
yudao-cloud为每个微服务模块提供了标准化的Dockerfile:
## 使用Eclipse Temurin作为基础镜像
FROM eclipse-temurin:8-jre
## 创建目录,并使用它作为工作目录
RUN mkdir -p /yudao-module-system-server
WORKDIR /yudao-module-system-server
## 将后端项目的Jar文件复制到镜像中
COPY ./target/yudao-module-system-server.jar app.jar
## 设置时区和JVM参数
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"
## 暴露服务端口
EXPOSE 48081
## 启动应用程序
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar
2.2 Docker Compose编排配置
项目提供了完整的docker-compose.yml文件,支持多服务协同部署:
version: '3'
services:
yudao-gateway:
image: yudao-gateway
container_name: yudao-gateway
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=test
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=nacos:8848
- SPRING_CLOUD_NACOS_SERVER_ADDR=nacos:8848
volumes:
- ./logs:/root/logs/
restart: always
ports:
- "48080:48080"
yudao-system:
image: yudao-module-system-biz
container_name: yudao-system
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=test
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=nacos:8848
- SPRING_CLOUD_NACOS_SERVER_ADDR=nacos:8848
volumes:
- ./logs:/root/logs/
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48081"]
interval: 30s
timeout: 10s
retries: 5
restart: always
depends_on:
- nacos
- mysql
2.3 完整的部署脚本
创建部署脚本deploy.sh实现一键部署:
#!/bin/bash
# 定义颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${GREEN}开始构建yudao-cloud Docker镜像...${NC}"
# 构建所有模块的Docker镜像
modules=("gateway" "system" "infra" "bpm" "pay" "report")
for module in "${modules[@]}"; do
echo -e "${YELLOW}构建 ${module} 模块...${NC}"
docker build -t yudao-${module} ./yudao-${module}/
done
echo -e "${GREEN}启动Docker Compose服务...${NC}"
docker-compose -f script/docker/docker-compose.yml up -d
echo -e "${GREEN}部署完成!访问地址:http://localhost:48080${NC}"
三、Kubernetes集群部署
3.1 Kubernetes部署文件结构
3.2 Deployment配置示例
创建yudao-system-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: yudao-system
namespace: yudao-cloud
labels:
app: yudao-system
version: v1.0.0
spec:
replicas: 2
selector:
matchLabels:
app: yudao-system
template:
metadata:
labels:
app: yudao-system
spec:
containers:
- name: yudao-system
image: yudao-module-system-biz:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 48081
env:
- name: TZ
value: Asia/Shanghai
- name: SPRING_PROFILES_ACTIVE
value: "prod"
- name: SPRING_CLOUD_NACOS_SERVER_ADDR
value: "nacos-service:8848"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
httpGet:
path: /actuator/health
port: 48081
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health
port: 48081
initialDelaySeconds: 30
periodSeconds: 5
3.3 Service和Ingress配置
创建服务暴露配置yudao-services.yaml:
apiVersion: v1
kind: Service
metadata:
name: yudao-system-service
namespace: yudao-cloud
spec:
selector:
app: yudao-system
ports:
- port: 48081
targetPort: 48081
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: yudao-ingress
namespace: yudao-cloud
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: yudao.example.com
http:
paths:
- path: /system
pathType: Prefix
backend:
service:
name: yudao-system-service
port:
number: 48081
四、生产环境优化策略
4.1 资源限制与调度优化
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- yudao-system
topologyKey: kubernetes.io/hostname
4.2 监控与日志收集
集成Prometheus和Grafana进行监控:
# Prometheus监控配置
metrics:
enabled: true
path: /actuator/prometheus
port: 48081
# 日志收集配置
logging:
level:
root: INFO
com.yudao: DEBUG
file:
path: /var/log/yudao
max-size: 10MB
max-backup: 5
4.3 健康检查与自愈机制
livenessProbe:
httpGet:
path: /actuator/health
port: 48081
initialDelaySeconds: 120
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 48081
initialDelaySeconds: 30
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 1
五、CI/CD流水线设计
5.1 GitLab CI/CD配置
创建.gitlab-ci.yml实现自动化部署:
stages:
- build
- test
- docker-build
- deploy
variables:
DOCKER_REGISTRY: registry.example.com
KUBE_NAMESPACE: yudao-cloud
build:
stage: build
image: maven:3.8.4-openjdk-8
script:
- mvn clean package -DskipTests
artifacts:
paths:
- */target/*.jar
docker-build:
stage: docker-build
image: docker:20.10
services:
- docker:20.10-dind
script:
- docker build -t $DOCKER_REGISTRY/yudao-system:${CI_COMMIT_SHORT_SHA} ./yudao-module-system/
- docker push $DOCKER_REGISTRY/yudao-system:${CI_COMMIT_SHORT_SHA}
only:
- master
deploy-prod:
stage: deploy
image: bitnami/kubectl:latest
script:
- kubectl set image deployment/yudao-system yudao-system=$DOCKER_REGISTRY/yudao-system:${CI_COMMIT_SHORT_SHA} -n $KUBE_NAMESPACE
- kubectl rollout status deployment/yudao-system -n $KUBE_NAMESPACE
environment:
name: production
only:
- master
5.2 部署状态监控看板
使用Grafana创建部署监控看板:
| 监控指标 | 正常范围 | 告警阈值 |
|---|---|---|
| CPU使用率 | < 70% | > 85% |
| 内存使用率 | < 75% | > 90% |
| JVM堆内存 | < 80% | > 95% |
| 响应时间 | < 200ms | > 500ms |
| 错误率 | < 1% | > 5% |
六、故障排查与性能优化
6.1 常见问题排查指南
# 查看Pod状态
kubectl get pods -n yudao-cloud
# 查看Pod日志
kubectl logs -f <pod-name> -n yudao-cloud
# 进入Pod调试
kubectl exec -it <pod-name> -n yudao-cloud -- /bin/bash
# 查看服务发现
kubectl get endpoints -n yudao-cloud
# 资源使用情况
kubectl top pods -n yudao-cloud
6.2 性能优化建议
-
JVM调优:
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -
容器资源分配:
- 根据实际负载动态调整CPU和内存限制
- 设置合理的QoS类别确保关键服务优先级
-
网络优化:
- 使用Service Mesh进行服务间通信优化
- 配置网络策略限制不必要的网络访问
七、安全最佳实践
7.1 容器安全加固
securityContext:
runAsNonRoot: true
runAsUser: 1000
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
7.2 密钥管理方案
env:
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-secret
key: password
总结
通过本文的详细指南,你已经掌握了yudao-cloud的完整Docker化部署流程和Kubernetes集群管理方案。从基础的Docker Compose部署到生产级的Kubernetes集群管理,从简单的容器化到完整的CI/CD流水线,这些实践方案能够帮助你构建稳定、高效、可扩展的微服务部署体系。
关键要点回顾:
- 🚀 采用标准化的Dockerfile确保构建一致性
- 🔄 利用Docker Compose简化多服务编排
- ⚙️ 通过Kubernetes实现弹性伸缩和高可用
- 📊 集成监控告警体系保障服务稳定性
- 🔒 实施安全最佳实践保护容器环境
随着业务的不断发展,建议持续优化部署策略,结合实际情况调整资源分配和监控阈值,确保系统始终处于最佳运行状态。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



