蛮子哥 蛮子哥
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

蛮子哥

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • ArgoCD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
    • jenkins脚本式流水线部署k8s项目实例一
    • helm v3安装并创建例子
    • 使用helm将本地部署文件上传到harbor chart上
    • helm公共仓库创建
    • helm适应minio作为私有仓库
    • helm release使用说明
    • kubernetes核心概念
    • kubectl使用技巧
    • kubernetes卷的几种类型
    • kubernetes安全框架
    • 云原生-什么是HPA和PDB、VPA
    • k8s部署php项目示例
    • 配置kubeconfig 文件访问 Kubernetes 集群
    • configmap配置的几种方式
    • k8s部署go服务一
    • k8s部署java项目
    • kubernetes部署prometheus监控
    • kubernetes部署elk日志系统
    • kubernetes环境devops流水线
    • kubernetes高阶技能必备的工具
    • deployment中使用configmap、secret的方式
    • 业务pod 飘移pending排查分析
    • debian 12安装kubernetes
    • istio入门
    • kubernetes证书续签到100年
    • kubernetes网络模式
    • etcd的备份和还原
    • Kubernetes 安装和配置 NFS 存储卷
    • VictoriaLogs集群采集Kubernetes Pod日志
    • 解决容器时区问题
    • 日志采集操作示例
    • operator部署VictoriaMetrics
    • grafana高可用部署
    • kubernetes部署jaeger
    • victorialogs配置关键字告警
    • kubernetes部署python项目
    • kubernetes节点故障重新加入操作
    • kubernetes部署go服务二
    • Istio Gateway 统一入口
    • helm管理java微服务
  • elk

  • jenkins

  • GitLabCI_CD

  • AI编程

  • 提示词

  • ArgoCD

  • 专题
  • Kubernetes笔记
蛮子哥
2026-07-05

helm管理java微服务


# 一、项目目录

建议目录如下:

helm/
├── common-chart/              # 所有微服务共用 Chart
│   ├── Chart.yaml
│   ├── values.yaml            # 默认配置
│   ├── templates/
│   │    ├── deployment.yaml
│   │    ├── service.yaml
│   │    ├── ingress.yaml
│   │    ├── hpa.yaml
│   │    ├── configmap.yaml
│   │    ├── secret.yaml
│   │    ├── serviceaccount.yaml
│   │    ├── _helpers.tpl
│   │    └── NOTES.txt
│
├── values/
│    ├── dev/
│    │     order.yaml
│    │     user.yaml
│    │     payment.yaml
│    │
│    ├── staging/
│    │     order.yaml
│    │     user.yaml
│    │
│    └── prod/
│          order.yaml
│          user.yaml
│          payment.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

这种结构最大的优点:

Chart 永远只有一套,30 个服务只维护 values。


# 二、Chart.yaml

apiVersion: v2
name: java-service
description: Common Java Zh Chart
type: application

version: 1.0.0
appVersion: "1.0"
1
2
3
4
5
6
7

# 三、默认 values.yaml

这里放所有公共配置。

replicaCount: 2

image:
  repository: nginx
  tag: latest
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 8080

resources:
  requests:
    cpu: 200m
    memory: 512Mi

  limits:
    cpu: 500m
    memory: 1Gi

ingress:
  enabled: false

env: []

config: {}

autoscaling:
  enabled: false

nodeSelector: {}

tolerations: []

affinity: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 四、Deployment 模板

templates/deployment.yaml

apiVersion: apps/v1
kind: Deployment

metadata:
  name: {{ .Release.Name }}

spec:
  replicas: {{ .Values.replicaCount }}

  selector:
    matchLabels:
      app: {{ .Release.Name }}

  template:

    metadata:
      labels:
        app: {{ .Release.Name }}

    spec:

      containers:

      - name: {{ .Release.Name }}

        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

        imagePullPolicy: {{ .Values.image.pullPolicy }}

        ports:

        - containerPort: 8080

        resources:

{{ toYaml .Values.resources | indent 10 }}

        env:

{{- range .Values.env }}

        - name: {{ .name }}
          value: "{{ .value }}"

{{- end }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

这里完全没有写死。

所有内容来自:

.Values.xxx
1

# 五、Service 模板

apiVersion: v1

kind: Service

metadata:
  name: {{ .Release.Name }}

spec:

  type: {{ .Values.service.type }}

  selector:

    app: {{ .Release.Name }}

  ports:

  - port: {{ .Values.service.port }}

    targetPort: 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 六、Ingress 模板

{{ if .Values.ingress.enabled }}

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: {{ .Release.Name }}

spec:

  ingressClassName: nginx

  rules:

  - host: {{ .Values.ingress.host }}

    http:

      paths:

      - path: /

        pathType: Prefix

        backend:

          service:

            name: {{ .Release.Name }}

            port:

              number: 8080

{{ end }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 七、开发环境 values

例如:

values/dev/order.yaml
replicaCount: 1

image:
  repository: harbor.company.com/dev/order
  tag: dev-20260705

service:
  port: 8080

resources:

  requests:
    cpu: 200m
    memory: 512Mi

  limits:
    cpu: 500m
    memory: 1Gi

ingress:
  enabled: true
  host: order-dev.company.com

env:

- name: SPRING_PROFILES_ACTIVE
  value: dev

- name: JAVA_OPTS
  value: "-Xms512m -Xmx512m"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 八、测试环境 values

values/staging/order.yaml
replicaCount: 2

image:
  repository: harbor.company.com/staging/order
  tag: v1.2.5

resources:

  requests:
    cpu: 500m
    memory: 1Gi

  limits:
    cpu: 1
    memory: 2Gi

ingress:
  enabled: true
  host: order-staging.company.com

env:

- name: SPRING_PROFILES_ACTIVE
  value: staging

- name: JAVA_OPTS
  value: "-Xms1g -Xmx1g"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 九、生产环境 values

values/prod/order.yaml
replicaCount: 5

image:

  repository: harbor.company.com/prod/order

  tag: v3.1.8

resources:

  requests:
    cpu: "2"

    memory: 4Gi

  limits:

    cpu: "4"

    memory: 8Gi

ingress:

  enabled: true

  host: order.company.com

autoscaling:

  enabled: true

env:

- name: SPRING_PROFILES_ACTIVE

  value: prod

- name: JAVA_OPTS

  value: "-Xms4g -Xmx4g"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

可以看到:

不同环境仅仅 values 不一样。

Chart 完全不用改。


# 十、30 个服务如何管理

例如:

values/

├── dev
│     order.yaml
│     user.yaml
│     payment.yaml
│     gateway.yaml
│     auth.yaml
│     inventory.yaml
│     ...
│     共30个
│
├── staging
│     ...
│
└── prod
      ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

例如部署:

Order:

helm upgrade order \
./common-chart \
-f values/prod/order.yaml
1
2
3

User:

helm upgrade user \
./common-chart \
-f values/prod/user.yaml
1
2
3

Payment:

helm upgrade payment \
./common-chart \
-f values/prod/payment.yaml
1
2
3

全部都是:

同一个 Chart

不同 values
1
2
3

# 十一、CI/CD 如何自动更新镜像

GitLab CI 构建完成后:

build
↓

推送 Harbor

↓

生成镜像:

order:v1.3.8

↓

修改

values/prod/order.yaml

image:
  tag: v1.3.8

↓

git commit

↓

ArgoCD 自动同步

↓

Kubernetes RollingUpdate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

例如:

image:

  repository: harbor.company.com/prod/order

  tag: v3.1.9
1
2
3
4
5

整个部署过程无需修改 Deployment YAML。


# 十二、企业级最佳实践

如果是互联网公司(美团、滴滴、腾讯、字节等)的生产环境,我建议进一步采用 Helm + GitOps 的目录组织,将应用模板与环境配置彻底分离:

gitops/
├── helm-chart/                  # 唯一公共 Chart
│   ├── templates/
│   ├── Chart.yaml
│   └── values.yaml
│
├── environments/
│   ├── dev/
│   │   ├── order.yaml
│   │   ├── user.yaml
│   │   └── ...
│   ├── staging/
│   └── prod/
│       ├── order.yaml
│       ├── user.yaml
│       └── ...
│
├── applications/                # ArgoCD Application 定义
│   ├── dev/
│   ├── staging/
│   └── prod/
│
└── .gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
微信 支付宝
上次更新: 2026/07/05, 13:37:39

← Istio Gateway 统一入口 elk安装→

最近更新
01
victorialogs配置关键字告警
06-03
02
kubernetes部署jaeger
05-30
03
grafana高可用部署
05-26
更多文章>
Theme by Vdoing | Copyright © 2019-2026 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式