【部署】使用华为云容器化部署Java项目指南

一、准备工作

  1. 华为云账号准备

    • 注册华为云账号并完成实名认证
    • 开通容器镜像服务(SWR)和云容器引擎(CCE)服务
  2. 开发环境准备

    • 安装JDK(建议JDK 8或11)
    • 安装Maven或Gradle
    • 安装Docker
    • 安装华为云CLI工具(可选)

二、容器化Java项目

1. 创建Dockerfile

# 基础镜像
FROM openjdk:11-jre-slim

# 维护者信息
LABEL maintainer="[email protected]"

# 设置工作目录
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)操作

  1. 登录华为云SWR
docker login -u cn-north-4@your-account -p your-password swr.cn-north-4.myhuaweicloud.com
  1. 上传镜像到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. 通过控制台创建部署

  1. 登录华为云控制台,进入CCE服务
  2. 创建集群(如果没有合适的集群)
  3. 创建工作负载:
    • 选择"无状态负载"
    • 设置应用名称
    • 选择镜像:从SWR选择你上传的Java应用镜像
    • 配置容器端口(与Dockerfile中EXPOSE一致)
    • 设置资源配额(CPU/内存)
    • 配置高级设置(如环境变量、健康检查等)

2. 通过YAML文件部署(推荐)

创建deployment.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-app-deployment
  labels:
    app: java-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: java-app
  template:
    metadata:
      labels:
        app: java-app
    spec:
      containers:
      - name: java-app-container
        image: swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:latest
        ports:
        - containerPort: 8080
        resources:
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: "500m"
            memory: "512Mi"

创建service.yaml文件:

apiVersion: v1
kind: Service
metadata:
  name: java-app-service
spec:
  selector:
    app: java-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

应用配置:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

五、高级配置

  1. 配置健康检查

在Deployment中添加:

livenessProbe:
  httpGet:
    path: /actuator/health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
readinessProbe:
  httpGet:
    path: /actuator/health
    port: 8080
  initialDelaySeconds: 20
  periodSeconds: 5
  1. 配置环境变量
env:
- name: SPRING_PROFILES_ACTIVE
  value: "prod"
- name: DB_URL
  valueFrom:
    secretKeyRef:
      name: db-secret
      key: url
  1. 使用ConfigMap和Secret
volumes:
- name: config-volume
  configMap:
    name: app-config
volumeMounts:
- name: config-volume
  mountPath: /etc/config

六、监控与日志

  1. 查看日志
kubectl logs -f <pod-name>
  1. 使用华为云APM服务

    • 开通应用性能管理服务
    • 在应用中集成APM Agent
  2. 使用华为云LTS日志服务

    • 配置日志采集规则
    • 查看和分析日志

七、持续部署(CI/CD)建议

  1. 使用华为云DevCloud

    • 配置代码仓库
    • 创建构建任务
    • 设置部署流水线
  2. GitHub Actions示例

name: Build and Deploy to Huawei CCE

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
        
    - name: Build with Maven
      run: mvn clean package
      
    - name: Build Docker image
      run: docker build -t your-java-app .
      
    - name: Login to Huawei SWR
      run: |
        docker login -u ${{ secrets.HW_SWR_USER }} -p ${{ secrets.HW_SWR_PASSWORD }} swr.cn-north-4.myhuaweicloud.com
        
    - name: Push to Huawei SWR
      run: |
        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 CCE
      run: |
        kubectl set image deployment/java-app-deployment java-app-container=swr.cn-north-4.myhuaweicloud.com/your-namespace/your-java-app:${{ github.sha }}

常见问题解决

  1. 镜像拉取失败

    • 检查SWR仓库权限
    • 确保网络连通性
    • 验证镜像标签是否正确
  2. 应用启动失败

    • 检查容器日志
    • 验证环境变量配置
    • 检查资源配额是否足够
  3. 服务无法访问

    • 检查Service类型是否正确(LoadBalancer)
    • 验证安全组规则
    • 检查Ingress配置(如果使用)

通过以上步骤,您应该能够成功在华为云上容器化部署Java应用。根据实际需求,可以进一步优化配置,如自动扩缩容、金丝雀发布等高级功能。

你可能感兴趣的:(华为云,java,开发语言,持续部署)