logo
0
0
WeChat Login

项目使用指导

项目概述

本项目提供了一套完整的容器化部署解决方案,支持 Java 服务和 Web 应用的 Kubernetes 集群部署。包含了 Dockerfile 模板和 Kubernetes 部署配置文件。

目录结构

├── Dockerfile/ # Docker 配置文件目录 │ ├── Dockerfile-java # Java 应用 Dockerfile │ └── Dockerfile-web # Web 应用 Dockerfile ├── k8s-deploy/ # Kubernetes 部署配置目录 │ ├── deploy.yml # 基础服务部署配置 │ ├── deploy-service.yaml # 标准服务部署配置 │ ├── deploy-service-mul.yaml # 高资源配置部署配置 │ └── deploy-web.yaml # Web 应用部署配置 └── readme.md # 项目说明文档

文件说明

Docker 配置文件 (Dockerfile/)

  • Dockerfile/Dockerfile-java: Java 应用的 Docker 镜像构建模板

    • 基于 openjdk:8-jre-alpine
    • 支持非 root 用户运行(已注释,可根据需要启用)
    • 默认暴露端口 8080
  • Dockerfile/Dockerfile-web: Web 应用的 Docker 镜像构建模板

    • 基于 nginx:1.21.6-alpine
    • 默认暴露端口 80

Kubernetes 部署配置 (k8s-deploy/)

  • k8s-deploy/deploy.yml: 基础服务部署配置(标准资源限制)
  • k8s-deploy/deploy-service.yaml: 标准服务部署配置
  • k8s-deploy/deploy-service-mul.yaml: 高资源配置部署配置(适用于高负载服务)
  • k8s-deploy/deploy-web.yaml: Web 应用部署配置

使用指南

1. 环境准备

确保以下环境已准备就绪:

  • Kubernetes 集群
  • Docker Registry(如 Harbor)
  • kubectl 命令行工具

2. 配置准备

在使用部署文件前,需要替换以下占位符:

必须替换的变量:

  • AA-SERVICE: 替换为实际的服务名称
  • AA-WEB: 替换为实际的 Web 应用名称
  • ENV: 替换为目标环境(如 dev、test、prod)
  • PORT: 替换为实际端口号
  • images:port/ENV-AA-SERVICE-namespace/AA-SERVICE: 替换为实际的镜像地址

Dockerfile 调整:

  • Dockerfile-java 中的 xx-.jar 替换为实际的 JAR 包名称

3. 构建镜像

Java 服务镜像:

# 确保 target 目录下有编译好的 JAR 包 docker build -f Dockerfile/Dockerfile-java -t your-registry/namespace/service-name:tag .

Web 应用镜像:

# 确保当前目录有 Web 应用文件和 nginx 配置 docker build -f Dockerfile/Dockerfile-web -t your-registry/namespace/web-name:tag .

4. 推送镜像

docker push your-registry/namespace/service-name:tag docker push your-registry/namespace/web-name:tag

5. 部署到 Kubernetes

# 应用部署配置 kubectl apply -f k8s-deploy/deploy-service.yaml # 标准服务部署 kubectl apply -f k8s-deploy/deploy-web.yaml # Web 应用部署 kubectl apply -f k8s-deploy/deploy-service-mul.yaml # 高负载服务部署(可选)

6. 验证部署

# 查看 Pod 状态 kubectl get pods -n <namespace> # 查看服务状态 kubectl get svc -n <namespace> # 查看部署详情 kubectl describe deployment <service-name> -n <namespace>

配置说明

健康检查端点

所有服务需要提供以下健康检查端点:

  • /liveness/healthz: 存活探针
  • /readiness/readyz: 就绪探针
  • /startup/startupz: 启动探针

资源配置

标准配置 (k8s-deploy/deploy-service.yaml):

  • 内存: 500Mi (请求) / 4Gi (限制)
  • CPU: 500m (请求) / 1 (限制)

高负载配置 (k8s-deploy/deploy-service-mul.yaml):

  • 内存: 1Gi (请求) / 4Gi (限制)
  • CPU: 500m (请求) / 2 (限制)
  • 包含优化的 JVM 参数配置

JVM 参数配置详解

在高负载配置中 (k8s-deploy/deploy-service-mul.yaml),包含了专门优化的 JVM 参数:

-Xms1536M -Xmx3072M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -XX:+UseG1GC -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=40 -XX:+UseContainerSupport

内存配置参数

  • -Xms1536M: 初始堆内存大小设置为 1.5GB
  • -Xmx3072M: 最大堆内存大小设置为 3GB
  • -XX:MetaspaceSize=256M: 初始元空间大小设置为 256MB
  • -XX:MaxMetaspaceSize=512M: 最大元空间大小设置为 512MB

垃圾收集器配置

  • -XX:+UseG1GC: 启用 G1 垃圾收集器,适用于大内存应用,提供可预测的 GC 停顿时间
  • -XX:G1NewSizePercent=30: 新生代占堆空间的 30%
  • -XX:G1MaxNewSizePercent=50: 新生代最大占堆空间的 50%
  • -XX:G1HeapRegionSize=16M: G1 堆区域大小设置为 16MB,适用于中等大小的堆

GC 性能调优参数

  • -XX:MaxGCPauseMillis=200: 目标最大 GC 停顿时间 200ms,平衡吞吐量和响应时间
  • -XX:G1ReservePercent=15: 为晋升保留 15% 的堆空间,避免晋升失败
  • -XX:InitiatingHeapOccupancyPercent=40: 当堆占用率达到 40% 时启动并发收集周期

容器化支持

  • -XX:+UseContainerSupport: 启用容器环境支持,让 JVM 能够识别容器的内存限制

Dockerfile 中的基础 JVM 配置

Dockerfile/Dockerfile-java 中也包含了基础的 JVM 配置:

JAVA_OPTS="-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
  • -Dfile.encoding=UTF-8: 设置文件编码为 UTF-8
  • -Djava.security.egd=file:/dev/./urandom: 使用非阻塞随机数生成器,提升启动速度

JVM 参数使用建议

  1. 内存分配原则:

    • 初始内存 (Xms) 和最大内存 (Xmx) 设置相同值避免动态扩容开销
    • 堆内存建议不超过容器内存限制的 75-80%
  2. GC 选择建议:

    • G1GC 适用于 2GB+ 堆内存,需要低延迟的应用
    • 对于 2GB 以下堆内存,可考虑使用 Parallel GC
  3. 监控调优:

    • 使用 jstat -gc <pid> 监控 GC 情况
    • 通过 jmap -histo <pid> 分析对象分布
    • 结合 Prometheus + Grafana 监控 JVM 指标
  4. 容器环境注意事项:

    • 必须启用 UseContainerSupport 让 JVM 识别容器内存限制
    • Kubernetes 的 resource limits 会影响 JVM 内存行为
    • 建议通过实际压测调整参数,找到最优配置

安全特性

  • 非 root 用户运行
  • 文件系统组权限控制
  • 镜像拉取密钥配置

注意事项

  1. 镜像拉取密钥: 确保 Kubernetes 集群中已配置 harbor-secret
  2. 命名空间: 所有资源需要部署到正确的命名空间
  3. 端口一致性: 容器端口、服务端口和健康检查端口需要保持一致
  4. 资源限制: 根据实际负载情况调整资源限制
  5. 优雅关闭: 配置了 30 秒的优雅关闭时间

故障排查

Pod 无法启动

kubectl logs <pod-name> -n <namespace> kubectl describe pod <pod-name> -n <namespace>

健康检查失败

  • 检查应用是否正确实现健康检查端点
  • 验证端点响应状态码为 200
  • 检查端口配置是否正确

镜像拉取失败

  • 验证镜像地址和标签是否正确
  • 检查镜像拉取密钥配置
  • 确认镜像仓库访问权限

版本更新

更新应用版本时:

  1. 构建新版本镜像
  2. 更新 k8s-deploy 目录下 Kubernetes 配置中的镜像标签
  3. 执行 kubectl apply -f k8s-deploy/<config-file> 进行滚动更新

About

No description, topics, or website provided.
669.00 KiB
1.47 KiB
NPC0 forks0 stars4 branches0 TagREADME
Language
Shell100%