本项目提供了一套完整的容器化部署解决方案,支持 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 # 项目说明文档
Dockerfile/Dockerfile-java: Java 应用的 Docker 镜像构建模板
openjdk:8-jre-alpineDockerfile/Dockerfile-web: Web 应用的 Docker 镜像构建模板
nginx:1.21.6-alpinek8s-deploy/deploy.yml: 基础服务部署配置(标准资源限制)k8s-deploy/deploy-service.yaml: 标准服务部署配置k8s-deploy/deploy-service-mul.yaml: 高资源配置部署配置(适用于高负载服务)k8s-deploy/deploy-web.yaml: Web 应用部署配置确保以下环境已准备就绪:
在使用部署文件前,需要替换以下占位符:
AA-SERVICE: 替换为实际的服务名称AA-WEB: 替换为实际的 Web 应用名称ENV: 替换为目标环境(如 dev、test、prod)PORT: 替换为实际端口号images:port/ENV-AA-SERVICE-namespace/AA-SERVICE: 替换为实际的镜像地址Dockerfile-java 中的 xx-.jar 替换为实际的 JAR 包名称# 确保 target 目录下有编译好的 JAR 包
docker build -f Dockerfile/Dockerfile-java -t your-registry/namespace/service-name:tag .
# 确保当前目录有 Web 应用文件和 nginx 配置
docker build -f Dockerfile/Dockerfile-web -t your-registry/namespace/web-name:tag .
docker push your-registry/namespace/service-name:tag docker push your-registry/namespace/web-name:tag
# 应用部署配置
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 # 高负载服务部署(可选)
# 查看 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-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,适用于中等大小的堆-XX:MaxGCPauseMillis=200: 目标最大 GC 停顿时间 200ms,平衡吞吐量和响应时间-XX:G1ReservePercent=15: 为晋升保留 15% 的堆空间,避免晋升失败-XX:InitiatingHeapOccupancyPercent=40: 当堆占用率达到 40% 时启动并发收集周期-XX:+UseContainerSupport: 启用容器环境支持,让 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: 使用非阻塞随机数生成器,提升启动速度内存分配原则:
GC 选择建议:
监控调优:
jstat -gc <pid> 监控 GC 情况jmap -histo <pid> 分析对象分布容器环境注意事项:
UseContainerSupport 让 JVM 识别容器内存限制harbor-secretkubectl logs <pod-name> -n <namespace> kubectl describe pod <pod-name> -n <namespace>
更新应用版本时:
kubectl apply -f k8s-deploy/<config-file> 进行滚动更新