适配微服务安装的helm格式,持续优化。

DevOps Team 1224afd383 Refactor: Move files from java-microservice directory to root, flatten directory structure 3 ay önce
templates 1224afd383 Refactor: Move files from java-microservice directory to root, flatten directory structure 3 ay önce
Chart.yaml 1224afd383 Refactor: Move files from java-microservice directory to root, flatten directory structure 3 ay önce
README.md 1224afd383 Refactor: Move files from java-microservice directory to root, flatten directory structure 3 ay önce
values.yaml 1224afd383 Refactor: Move files from java-microservice directory to root, flatten directory structure 3 ay önce

README.md

Java Microservice Helm Chart

概述

这是一个用于部署Java微服务应用到Kubernetes集群的Helm Chart。该Chart提供了完整的Kubernetes资源配置,包括Deployment、Service和ConfigMap,支持灵活的应用配置和资源管理。

Chart版本: 0.1.0
应用版本: 1.0
API版本: v2


主要特性

开箱即用的Deployment配置 - 包含health checks、资源限制和安全上下文
灵活的服务发现 - 支持ClusterIP、NodePort和LoadBalancer类型
应用配置管理 - 通过ConfigMap管理application.properties和application.yml
Spring Boot集成 - 原生支持Spring Boot Actuator端点
可扩展设计 - 完整的Helm模板化和参数配置
生产就绪 - 包含liveness probe和readiness probe


项目结构

java-microservice/
├── Chart.yaml                    # Helm Chart定义文件
├── values.yaml                   # 默认配置值
├── README.md                      # 本文件
└── templates/
    ├── deployment.yaml           # Kubernetes Deployment资源模板
    ├── service.yaml              # Kubernetes Service资源模板
    └── configmap.yaml            # Kubernetes ConfigMap资源模板

文件说明

文件 说明
Chart.yaml 定义Helm Chart的元数据(名称、版本、描述等)
values.yaml 包含所有可配置的默认值和参数
templates/deployment.yaml 定义Kubernetes Pod、副本和容器配置
templates/service.yaml 定义Service用于服务发现和负载均衡
templates/configmap.yaml 定义ConfigMap用于存储应用配置文件

快速开始

前置条件

  • Kubernetes集群 (1.16+)
  • Helm 3.0+
  • Docker镜像仓库访问权限

安装

1. 使用默认配置安装

helm install java-app ./java-microservice

2. 自定义配置安装

helm install java-app ./java-microservice \
  --set image.repository=your-registry/java-app \
  --set image.tag=1.0.0 \
  --set app.replicaCount=3

3. 使用自定义values文件安装

helm install java-app ./java-microservice -f custom-values.yaml

4. 验证安装

# 查看已安装的Release
helm list

# 获取Deployment详情
kubectl get deployment java-microservice

# 查看Pod状态
kubectl get pods -l app=java-microservice

# 查看Service
kubectl get svc java-microservice

配置参数

应用配置

参数 默认值 说明
app.name java-microservice 应用名称,用于Deployment和Service命名
app.replicaCount 1 Pod副本数量

镜像配置

参数 默认值 说明
image.repository your-registry/java-app Docker镜像仓库地址
image.tag 1.0.0 Docker镜像标签/版本
image.pullPolicy IfNotPresent 镜像拉取策略(Always/IfNotPresent/Never)

Service配置

参数 默认值 说明
service.type ClusterIP Service类型(ClusterIP/NodePort/LoadBalancer)
service.port 8080 Service暴露的端口
service.targetPort 8080 容器目标端口

应用属性配置

Properties文件配置(.properties 格式)

application.properties:
spring.application.name={{ app.name }}
spring.protocol.name=spring
server.port={{ app.port }}

YAML文件配置(.yml 格式)

config.yml:
  logging:
    level:
      root: INFO
      com:
        example: DEBUG
  management:
    endpoints:
      web:
        exposure:
          include: health,info,metrics
    endpoint:
      health:
        show-details: when-authorized

资源配置

参数 默认值 说明
resources.requests.cpu 250m CPU请求量
resources.requests.memory 256Mi 内存请求量
resources.limits.cpu 500m CPU限制量
resources.limits.memory 512Mi 内存限制量

高级配置

参数 默认值 说明
podAnnotations {} Pod注解
securityContext {} Pod安全上下文
nodeSelector {} 节点选择器
tolerations [] 容忍度配置
affinity {} Pod亲和力配置

使用示例

示例1:部署到开发环境

helm install java-dev ./java-microservice \
  --namespace dev \
  --create-namespace \
  --set image.repository=your-registry/java-app \
  --set image.tag=dev-latest \
  --set app.replicaCount=1

示例2:生产环境部署(高可用)

helm install java-prod ./java-microservice \
  --namespace prod \
  --create-namespace \
  --values prod-values.yaml

其中 prod-values.yaml 内容如下:

app:
  replicaCount: 3

image:
  repository: your-registry/java-app
  tag: "1.0.0"

service:
  type: LoadBalancer
  port: 80
  targetPort: 8080

resources:
  requests:
    cpu: 500m
    memory: 512Mi
  limits:
    cpu: 1000m
    memory: 1024Mi

示例3:更新现有Release

helm upgrade java-app ./java-microservice \
  --set image.tag=1.1.0

示例4:配置数据库连接

编辑 values.yaml 中的数据库配置:

config:
  properties:
    spring.datasource.url: jdbc:mysql://mysql-service:3306/mydb
    spring.datasource.username: appuser
    spring.datasource.password: secure-password

然后安装或升级:

helm install java-app ./java-microservice

模板详解

Deployment Template (deployment.yaml)

功能:

  • 定义应用Pod的部署配置
  • 配置容器镜像、端口和环境变量
  • 挂载ConfigMap作为配置文件
  • 配置health checks(liveness和readiness probe)
  • 支持资源限制和安全策略

关键特性:

# Health Check配置
livenessProbe:
  httpGet:
    path: /actuator/health
    port: http
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  httpGet:
    path: /actuator/health
    port: http
  initialDelaySeconds: 5
  periodSeconds: 5

# 环境变量配置
env:
  - name: JAVA_OPTS
    value: "-Xmx512m -Xms256m"

# ConfigMap挂载
volumeMounts:
  - name: config-volume
    mountPath: /etc/config
    readOnly: true

Service Template (service.yaml)

功能:

  • 暴露应用服务到集群内外
  • 支持多种服务类型
  • 配置端口映射和负载均衡

支持的Service类型:

  • ClusterIP:仅在集群内访问(默认)
  • NodePort:通过节点IP和端口访问
  • LoadBalancer:通过外部负载均衡器访问

ConfigMap Template (configmap.yaml)

功能:

  • 将应用配置外部化
  • 支持.properties.yml两种格式
  • 配置无需重新构建镜像

配置文件位置(容器内):

  • /etc/config/application.properties
  • /etc/config/application.yml

常见操作

查看Release状态

helm status java-app

查看Release使用的Values

helm get values java-app

查看Release部署的资源

helm get manifest java-app

测试模板渲染

helm template java-app ./java-microservice --debug

删除Release

helm uninstall java-app

查看Pod日志

kubectl logs -l app=java-microservice -f

访问应用

本地端口转发(开发环境)

kubectl port-forward svc/java-microservice 8080:8080
curl http://localhost:8080/actuator/health

通过Service(集群内)

curl http://java-microservice:8080/actuator/health

通过NodePort

# 获取节点IP和NodePort
kubectl get nodes -o wide
kubectl get svc java-microservice

# 访问
curl http://<NODE_IP>:<NODE_PORT>/actuator/health

故障排查

问题1:Pod处于Pending状态

# 查看Pod事件
kubectl describe pod <pod-name>

# 检查资源可用性
kubectl top nodes

解决方案:

  • 检查集群资源是否充足
  • 调整资源请求和限制
  • 检查节点是否有污点(taints)

问题2:镜像拉取失败

# 查看Pod日志
kubectl describe pod <pod-name>

解决方案:

  • 验证镜像仓库地址
  • 检查镜像标签是否正确
  • 配置镜像拉取密钥(如果为私有仓库)

问题3:应用无法启动

# 查看容器日志
kubectl logs <pod-name>

# 进入容器调试
kubectl exec -it <pod-name> -- /bin/bash

解决方案:

  • 检查应用配置是否正确
  • 验证数据库连接信息
  • 检查Spring Boot Actuator是否正确配置

问题4:Health Check失败

# 手动测试health endpoint
kubectl exec -it <pod-name> -- curl localhost:8080/actuator/health

解决方案:

  • 调整probe的initialDelaySeconds
  • 检查应用是否正确实现了health endpoint
  • 查看应用日志获取更多信息

安全最佳实践

1. 使用私有镜像仓库

# 创建镜像拉取Secret
kubectl create secret docker-registry regcred \
  --docker-server=your-registry \
  --docker-username=username \
  --docker-password=password \
  --docker-email=email@example.com

# 在values.yaml中引用
imagePullSecrets:
  - name: regcred

2. 配置资源限制

始终为容器设置CPU和内存限制,防止资源耗尽。

3. 安全上下文配置

securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  readOnlyRootFilesystem: true

4. RBAC配置

为应用创建最小权限的Service Account。

5. 敏感信息管理

  • 使用Kubernetes Secrets存储密码和API Key
  • 不要在ConfigMap中存储敏感信息
  • 定期轮换凭证

性能优化

1. 调整JVM内存参数

env:
  - name: JAVA_OPTS
    value: "-Xmx1024m -Xms512m -XX:+UseG1GC"

2. 优化Health Check

livenessProbe:
  initialDelaySeconds: 60  # 增加初始延迟时间
  periodSeconds: 30        # 减少检查频率

3. 配置副本和自动扩展

# 使用HPA(Horizontal Pod Autoscaler)
kubectl autoscale deployment java-microservice \
  --min=2 --max=10 --cpu-percent=80

升级和回滚

升级应用版本

# 使用新镜像标签升级
helm upgrade java-app ./java-microservice \
  --set image.tag=1.1.0

# 查看升级状态
helm status java-app

回滚到前一版本

# 查看历史发布
helm history java-app

# 回滚到指定版本
helm rollback java-app 1

监控和日志

查看应用日志

# 查看当前Pod日志
kubectl logs -l app=java-microservice

# 跟踪日志(实时)
kubectl logs -l app=java-microservice -f

# 查看前50行日志
kubectl logs -l app=java-microservice --tail=50

Spring Boot Actuator端点

该Chart已配置以下Actuator端点:

  • /actuator/health - 应用健康状态
  • /actuator/info - 应用信息
  • /actuator/metrics - 应用指标

访问这些端点:

kubectl exec -it <pod-name> -- \
  curl -s http://localhost:8080/actuator/health | json_pp

贡献指南

欢迎提交Issue和Pull Request来改进此Chart。


许可证

此Chart遵循开源许可证。


相关资源


更新日志

v0.1.0 (2026-01-15)

  • 初始版本
  • 支持基础Deployment、Service和ConfigMap
  • 包含Spring Boot应用配置管理
  • 配置Health Check和资源限制

常见问题(FAQ)

Q: 如何修改应用配置而不重新部署?
A: 编辑ConfigMap并重启Pod即可:

kubectl rollout restart deployment/java-microservice

Q: 支持多环境部署吗?
A: 是的,为每个环境创建不同的values文件,使用-f参数指定。

Q: 如何扩展副本数量?
A: 使用--set app.replicaCount=N或编辑values.yaml。

Q: 支持灰度发布吗?
A: 可以使用Helm升级,并通过修改镜像标签来实现灰度。


更多帮助请查看官方Helm文档