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
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
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
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
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
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
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
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
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
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
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
2
3
User:
helm upgrade user \
./common-chart \
-f values/prod/user.yaml
1
2
3
2
3
Payment:
helm upgrade payment \
./common-chart \
-f values/prod/payment.yaml
1
2
3
2
3
全部都是:
同一个 Chart
不同 values
1
2
3
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
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
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
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
|