【部署】使用华为云容器化部署Java项目指南
一、准备工作
-
华为云账号准备
- 注册华为云账号并完成实名认证
- 开通容器镜像服务(SWR)和云容器引擎(CCE)服务
-
开发环境准备
- 安装JDK(建议JDK 8或11)
- 安装Maven或Gradle
- 安装Docker
- 安装华为云CLI工具(可选)
二、容器化Java项目
1. 创建Dockerfile
# 基础镜像
FROM openjdk:11-jre-slim# 维护者信息
LABEL maintainer="yourname@example.com"# 设置工作目录
WORKDIR /app# 复制构建好的jar包
COPY target/your-application.jar app.jar# 暴露端口(根据你的应用调整)
EXPOSE 8080# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
2. 构建Docker镜像
# 先使用Maven构建项目
mvn clean package# 构建Docker镜像
docker build -t your-java-app .
三、华为云容器镜像服务(SWR)操作
- 登录华为云SWR
docker login -u cn-north-4@your-account -p your-password swr.cn-north-4.myhuaweicloud.com
- 上传镜像到SWR
# 标记镜像
docker tag your-java-app swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:latest# 推送镜像
docker push swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:latest
四、华为云容器引擎(CCE)部署
1. 通过控制台创建部署
- 登录华为云控制台,进入CCE服务
- 创建集群(如果没有合适的集群)
- 创建工作负载:
- 选择"无状态负载"
- 设置应用名称
- 选择镜像:从SWR选择你上传的Java应用镜像
- 配置容器端口(与Dockerfile中EXPOSE一致)
- 设置资源配额(CPU/内存)
- 配置高级设置(如环境变量、健康检查等)
2. 通过YAML文件部署(推荐)
创建deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:name: java-app-deploymentlabels:app: java-app
spec:replicas: 2selector:matchLabels:app: java-apptemplate:metadata:labels:app: java-appspec:containers:- name: java-app-containerimage: swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:latestports:- containerPort: 8080resources:limits:cpu: "1"memory: 1Girequests:cpu: "500m"memory: "512Mi"
创建service.yaml文件:
apiVersion: v1
kind: Service
metadata:name: java-app-service
spec:selector:app: java-appports:- protocol: TCPport: 80targetPort: 8080type: LoadBalancer
应用配置:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
五、高级配置
- 配置健康检查
在Deployment中添加:
livenessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10
readinessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 20periodSeconds: 5
- 配置环境变量
env:
- name: SPRING_PROFILES_ACTIVEvalue: "prod"
- name: DB_URLvalueFrom:secretKeyRef:name: db-secretkey: url
- 使用ConfigMap和Secret
volumes:
- name: config-volumeconfigMap:name: app-config
volumeMounts:
- name: config-volumemountPath: /etc/config
六、监控与日志
- 查看日志
kubectl logs -f <pod-name>
-
使用华为云APM服务
- 开通应用性能管理服务
- 在应用中集成APM Agent
-
使用华为云LTS日志服务
- 配置日志采集规则
- 查看和分析日志
七、持续部署(CI/CD)建议
-
使用华为云DevCloud
- 配置代码仓库
- 创建构建任务
- 设置部署流水线
-
GitHub Actions示例
name: Build and Deploy to Huawei CCEon:push:branches: [ main ]jobs:build-and-deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Set up JDK 11uses: actions/setup-java@v1with:java-version: 11- name: Build with Mavenrun: mvn clean package- name: Build Docker imagerun: docker build -t your-java-app .- name: Login to Huawei SWRrun: |docker login -u ${{ secrets.HW_SWR_USER }} -p ${{ secrets.HW_SWR_PASSWORD }} swr.cn-north-4.myhuaweicloud.com- name: Push to Huawei SWRrun: |docker tag your-java-app swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:${{ github.sha }}docker push swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:${{ github.sha }}- name: Deploy to Huawei CCErun: |kubectl set image deployment/java-app-deployment java-app-container=swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:${{ github.sha }}
常见问题解决
-
镜像拉取失败
- 检查SWR仓库权限
- 确保网络连通性
- 验证镜像标签是否正确
-
应用启动失败
- 检查容器日志
- 验证环境变量配置
- 检查资源配额是否足够
-
服务无法访问
- 检查Service类型是否正确(LoadBalancer)
- 验证安全组规则
- 检查Ingress配置(如果使用)
通过以上步骤,您应该能够成功在华为云上容器化部署Java应用。根据实际需求,可以进一步优化配置,如自动扩缩容、金丝雀发布等高级功能。