这是一个用于部署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用于存储应用配置文件 |
helm install java-app ./java-microservice
helm install java-app ./java-microservice \
--set image.repository=your-registry/java-app \
--set image.tag=1.0.0 \
--set app.replicaCount=3
helm install java-app ./java-microservice -f custom-values.yaml
# 查看已安装的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.type |
ClusterIP |
Service类型(ClusterIP/NodePort/LoadBalancer) |
service.port |
8080 |
Service暴露的端口 |
service.targetPort |
8080 |
容器目标端口 |
.properties 格式)application.properties:
spring.application.name={{ app.name }}
spring.protocol.name=spring
server.port={{ app.port }}
.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亲和力配置 |
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
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
helm upgrade java-app ./java-microservice \
--set image.tag=1.1.0
编辑 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
功能:
关键特性:
# 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类型:
ClusterIP:仅在集群内访问(默认)NodePort:通过节点IP和端口访问LoadBalancer:通过外部负载均衡器访问功能:
.properties和.yml两种格式配置文件位置(容器内):
/etc/config/application.properties/etc/config/application.ymlhelm status java-app
helm get values java-app
helm get manifest java-app
helm template java-app ./java-microservice --debug
helm uninstall java-app
kubectl logs -l app=java-microservice -f
kubectl port-forward svc/java-microservice 8080:8080
curl http://localhost:8080/actuator/health
curl http://java-microservice:8080/actuator/health
# 获取节点IP和NodePort
kubectl get nodes -o wide
kubectl get svc java-microservice
# 访问
curl http://<NODE_IP>:<NODE_PORT>/actuator/health
# 查看Pod事件
kubectl describe pod <pod-name>
# 检查资源可用性
kubectl top nodes
解决方案:
# 查看Pod日志
kubectl describe pod <pod-name>
解决方案:
# 查看容器日志
kubectl logs <pod-name>
# 进入容器调试
kubectl exec -it <pod-name> -- /bin/bash
解决方案:
# 手动测试health endpoint
kubectl exec -it <pod-name> -- curl localhost:8080/actuator/health
解决方案:
始终为容器设置CPU和内存限制,防止资源耗尽。
securityContext:
runAsNonRoot: true
runAsUser: 1000
readOnlyRootFilesystem: true
为应用创建最小权限的Service Account。
env:
- name: JAVA_OPTS
value: "-Xmx1024m -Xms512m -XX:+UseG1GC"
livenessProbe:
initialDelaySeconds: 60 # 增加初始延迟时间
periodSeconds: 30 # 减少检查频率
# 使用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
该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遵循开源许可证。
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文档