Chart模版构造和语法
本小节
  • 初始化一个chart,起个应用名字webapp
  • 查看预定义的Chart和Values两个变量结构与内容
  • 查看deployment文件使用上述变量
  • Helm有用的几个命令
我们再初始化一个chart
1
# 初始化一个chart,名字是webapp
2
helm create webapp
3
4
# 查看目录结构
5
tree webapp
6
webapp
7
├── Chart.yaml
8
├── charts
9
├── templates
10
│   ├── NOTES.txt
11
│   ├── _helpers.tpl
12
│   ├── deployment.yaml
13
│   ├── hpa.yaml
14
│   ├── ingress.yaml
15
│   ├── service.yaml
16
│   ├── serviceaccount.yaml
17
│   └── tests
18
│   └── test-connection.yaml
19
└── values.yaml
20
Copied!
Chart.yaml (对应预定义的宏Chart变量)
1
apiVersion: v2
2
name: webapp
3
description: A Helm chart for Kubernetes
4
5
# A chart can be either an 'application' or a 'library' chart.
6
#
7
# Application charts are a collection of templates that can be packaged into versioned archives
8
# to be deployed.
9
#
10
# Library charts provide useful utilities or functions for the chart developer. They're included as
11
# a dependency of application charts to inject those utilities and functions into the rendering
12
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
13
type: application
14
15
# This is the chart version. This version number should be incremented each time you make changes
16
# to the chart and its templates, including the app version.
17
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18
version: 0.1.0
19
20
# This is the version number of the application being deployed. This version number should be
21
# incremented each time you make changes to the application. Versions are not expected to
22
# follow Semantic Versioning. They should reflect the version the application is using.
23
# It is recommended to use it with quotes.
24
appVersion: "1.16.0"
25
Copied!
values.yaml(对应预定义的Values变量)
1
# Default values for webapp.
2
# This is a YAML-formatted file.
3
# Declare variables to be passed into your templates.
4
5
replicaCount: 1
6
7
image:
8
repository: nginx
9
pullPolicy: IfNotPresent
10
# Overrides the image tag whose default is the chart appVersion.
11
tag: ""
12
13
imagePullSecrets: []
14
nameOverride: ""
15
fullnameOverride: ""
16
17
serviceAccount:
18
# Specifies whether a service account should be created
19
create: true
20
# Annotations to add to the service account
21
annotations: {}
22
# The name of the service account to use.
23
# If not set and create is true, a name is generated using the fullname template
24
name: ""
25
26
podAnnotations: {}
27
28
podSecurityContext: {}
29
# fsGroup: 2000
30
31
securityContext: {}
32
# capabilities:
33
# drop:
34
# - ALL
35
# readOnlyRootFilesystem: true
36
# runAsNonRoot: true
37
# runAsUser: 1000
38
39
service:
40
type: ClusterIP
41
port: 80
42
43
ingress:
44
enabled: false
45
className: ""
46
annotations: {}
47
# kubernetes.io/ingress.class: nginx
48
# kubernetes.io/tls-acme: "true"
49
hosts:
50
- host: chart-example.local
51
paths:
52
- path: /
53
pathType: ImplementationSpecific
54
tls: []
55
# - secretName: chart-example-tls
56
# hosts:
57
# - chart-example.local
58
59
resources: {}
60
# We usually recommend not to specify default resources and to leave this as a conscious
61
# choice for the user. This also increases chances charts run on environments with little
62
# resources, such as Minikube. If you do want to specify resources, uncomment the following
63
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
64
# limits:
65
# cpu: 100m
66
# memory: 128Mi
67
# requests:
68
# cpu: 100m
69
# memory: 128Mi
70
71
autoscaling:
72
enabled: false
73
minReplicas: 1
74
maxReplicas: 100
75
targetCPUUtilizationPercentage: 80
76
# targetMemoryUtilizationPercentage: 80
77
78
nodeSelector: {}
79
80
tolerations: []
81
82
affinity: {}
83
Copied!
templates/_helpers.tpl(定义其他变量)
1
{{/*
2
Expand the name of the chart.
3
*/}}
4
{{- define "webapp.name" -}}
5
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6
{{- end }}
7
8
{{/*
9
Create a default fully qualified app name.
10
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
11
If release name contains chart name it will be used as a full name.
12
*/}}
13
{{- define "webapp.fullname" -}}
14
{{- if .Values.fullnameOverride }}
15
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
16
{{- else }}
17
{{- $name := default .Chart.Name .Values.nameOverride }}
18
{{- if contains $name .Release.Name }}
19
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
20
{{- else }}
21
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
22
{{- end }}
23
{{- end }}
24
{{- end }}
25
26
{{/*
27
Create chart name and version as used by the chart label.
28
*/}}
29
{{- define "webapp.chart" -}}
30
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
31
{{- end }}
32
33
{{/*
34
Common labels
35
*/}}
36
{{- define "webapp.labels" -}}
37
helm.sh/chart: {{ include "webapp.chart" . }}
38
{{ include "webapp.selectorLabels" . }}
39
{{- if .Chart.AppVersion }}
40
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
41
{{- end }}
42
app.kubernetes.io/managed-by: {{ .Release.Service }}
43
{{- end }}
44
45
{{/*
46
Selector labels
47
*/}}
48
{{- define "webapp.selectorLabels" -}}
49
app.kubernetes.io/name: {{ include "webapp.name" . }}
50
app.kubernetes.io/instance: {{ .Release.Name }}
51
{{- end }}
52
53
{{/*
54
Create the name of the service account to use
55
*/}}
56
{{- define "webapp.serviceAccountName" -}}
57
{{- if .Values.serviceAccount.create }}
58
{{- default (include "webapp.fullname" .) .Values.serviceAccount.name }}
59
{{- else }}
60
{{- default "default" .Values.serviceAccount.name }}
61
{{- end }}
62
{{- end }}
63
Copied!
templates/deployment.yaml
1
apiVersion: apps/v1
2
kind: Deployment
3
metadata:
4
name: {{ include "webapp.fullname" . }}
5
labels:
6
{{- include "webapp.labels" . | nindent 4 }}
7
spec:
8
{{- if not .Values.autoscaling.enabled }}
9
replicas: {{ .Values.replicaCount }}
10
{{- end }}
11
selector:
12
matchLabels:
13
{{- include "webapp.selectorLabels" . | nindent 6 }}
14
template:
15
metadata:
16
{{- with .Values.podAnnotations }}
17
annotations:
18
{{- toYaml . | nindent 8 }}
19
{{- end }}
20
labels:
21
{{- include "webapp.selectorLabels" . | nindent 8 }}
22
spec:
23
{{- with .Values.imagePullSecrets }}
24
imagePullSecrets:
25
{{- toYaml . | nindent 8 }}
26
{{- end }}
27
serviceAccountName: {{ include "webapp.serviceAccountName" . }}
28
securityContext:
29
{{- toYaml .Values.podSecurityContext | nindent 8 }}
30
containers:
31
- name: {{ .Chart.Name }}
32
securityContext:
33
{{- toYaml .Values.securityContext | nindent 12 }}
34
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
35
imagePullPolicy: {{ .Values.image.pullPolicy }}
36
ports:
37
- name: http
38
containerPort: 80
39
protocol: TCP
40
livenessProbe:
41
httpGet:
42
path: /
43
port: http
44
readinessProbe:
45
httpGet:
46
path: /
47
port: http
48
resources:
49
{{- toYaml .Values.resources | nindent 12 }}
50
{{- with .Values.nodeSelector }}
51
nodeSelector:
52
{{- toYaml . | nindent 8 }}
53
{{- end }}
54
{{- with .Values.affinity }}
55
affinity:
56
{{- toYaml . | nindent 8 }}
57
{{- end }}
58
{{- with .Values.tolerations }}
59
tolerations:
60
{{- toYaml . | nindent 8 }}
61
{{- end }}
62
Copied!
templates/service.yaml
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: {{ include "webapp.fullname" . }}
5
labels:
6
{{- include "webapp.labels" . | nindent 4 }}
7
spec:
8
type: {{ .Values.service.type }}
9
ports:
10
- port: {{ .Values.service.port }}
11
targetPort: http
12
protocol: TCP
13
name: http
14
selector:
15
{{- include "webapp.selectorLabels" . | nindent 4 }}
16
Copied!
常用的几个方法
helm template webapp
helm lint webapp
helm show all webapp
Copy link