Skip to content

Commit 955f39a

Browse files
添加Helm使用说明
1 parent 1af3d19 commit 955f39a

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed

k8s/helm.md

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,175 @@ characters:
311311
{{- end }}
312312
```
313313

314+
##### 模板
315+
在 `_helpers.tpl`中会存储大量的用于后期Yaml配置的模板,yaml配置中通过include可引入这些模板
316+
```yaml
317+
{{/*
318+
Expand the name of the chart.
319+
*/}}
320+
{{- define "anvil.name" -}}
321+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
322+
{{- end }}
323+
324+
{{/*
325+
Create a default fully qualified app name.
326+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
327+
If release name contains chart name it will be used as a full name.
328+
*/}}
329+
{{- define "anvil.fullname" -}}
330+
{{- if .Values.fullnameOverride }}
331+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
332+
{{- else }}
333+
{{- $name := default .Chart.Name .Values.nameOverride }}
334+
{{- if contains $name .Release.Name }}
335+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
336+
{{- else }}
337+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
338+
{{- end }}
339+
{{- end }}
340+
{{- end }}
341+
342+
{{/*
343+
Create chart name and version as used by the chart label.
344+
*/}}
345+
{{- define "anvil.chart" -}}
346+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
347+
{{- end }}
348+
349+
{{/*
350+
Common labels
351+
*/}}
352+
{{- define "anvil.labels" -}}
353+
helm.sh/chart: {{ include "anvil.chart" . }}
354+
{{ include "anvil.selectorLabels" . }}
355+
{{- if .Chart.AppVersion }}
356+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
357+
{{- end }}
358+
app.kubernetes.io/managed-by: {{ .Release.Service }}
359+
{{- end }}
360+
361+
{{/*
362+
Selector labels
363+
*/}}
364+
{{- define "anvil.selectorLabels" -}}
365+
app.kubernetes.io/name: {{ include "anvil.name" . }}
366+
app.kubernetes.io/instance: {{ .Release.Name }}
367+
{{- end }}
368+
369+
{{/*
370+
Create the name of the service account to use
371+
*/}}
372+
{{- define "anvil.serviceAccountName" -}}
373+
{{- if .Values.serviceAccount.create }}
374+
{{- default (include "anvil.fullname" .) .Values.serviceAccount.name }}
375+
{{- else }}
376+
{{- default "default" .Values.serviceAccount.name }}
377+
{{- end }}
378+
{{- end }}
379+
```
380+
381+
##### 依赖项目
382+
从提供的文本中,我们可以提取出一系列关于版本范围指定的规则和示例。这些规则主要描述了如何使用特定符号(如`^`和`~`)来定义软件版本的兼容范围。以下是提取的关键信息:
383+
384+
使用`^`符号的规则
385+
- `^1.2.x`等价于`>=1.2.0<2.0.0`:表示任何大于等于1.2.0且小于2.0.0的版本。
386+
- `^2.3`等价于`>=2.3<3`:表示任何大于等于2.3且小于3的版本。
387+
- `^2.x`等价于`>=2.0.0<3`:表示任何大于等于2.0.0且小于3的版本。
388+
- `^0.2.3`等价于`>=0.2.3<0.3.0`:表示任何大于等于0.2.3且小于0.3.0的版本。
389+
- `^0.2`等价于`>=0.2.0<0.3.0`:表示任何大于等于0.2.0且小于0.3.0的版本。
390+
- `^0.0.3`等价于`>=0.0.3<0.0.4`:表示任何大于等于0.0.3且小于0.0.4的版本。
391+
- `^0.0`等价于`>=0.0.0<0.1.0`:表示任何大于等于0.0.0且小于0.1.0的版本。
392+
- `^0`等价于`>=0.0.0<1.0.0`:表示任何大于等于0.0.0且小于1.0.0的版本。
393+
394+
使用`~`符号的规则
395+
- `~用于指定补丁程序范围`:这表明`~`通常用于在主版本或次要版本范围内选择最新的补丁版本。
396+
- `~1.2.3`等价于`>=1.2.3<1.3.0`:表示任何大于等于1.2.3且小于1.3.0的版本,特别强调在1.2.x系列中的最新补丁版本。
397+
- `~1`等价于`>=1<2`:表示任何大于等于1且小于2的版本,在1.x系列中的最新版本。
398+
- `~2.3`等价于`>=2.3<2.4`:表示任何大于等于2.3且小于2.4的版本,在2.3.x系列中的最新补丁版本。
399+
- `~1.2.x`等价于`>=1.2.0<1.3.0`:表示任何大于等于1.2.0且小于1.3.0的版本,在1.2.x系列中的最新补丁版本。
400+
- `~1.x`等价于`>=1<2`:表示任何大于等于1且小于2的版本,在1.x系列中的最新版本。
401+
402+
这些规则和示例展示了如何灵活地使用`^`和`~`符号来精确控制软件依赖的版本范围,这对于确保软件项目的稳定性和兼容性至关重要。
403+
404+
```yaml
405+
dependencies:
406+
- name: booster
407+
version: ^1.0.0
408+
condition: booster.enabled
409+
repository: https://raw.githubusercontent.com/Masterminds/learning-helm/main/chapter6/repository/
410+
```
411+
412+
依赖项详情
413+
414+
- **名称(name)**: `booster`
415+
- 这是依赖项的标识符,用于在项目中引用该依赖。
416+
417+
- **版本(version)**: `^1.0.0`
418+
- 这表示对`booster`依赖项的版本要求。使用了caret (^) 版本范围指定符,意味着任何大于等于1.0.0但小于2.0.0的版本都可以满足此依赖要求。例如,1.0.1, 1.1.0, 1.2.3等版本都符合条件,但2.0.0及其以上版本则不被接受。
419+
420+
- **条件(condition)**: `booster.enabled`
421+
- 这是一个布尔表达式,用于决定是否启用该依赖项。只有当`booster.enabled`为真时,才会加载和使用这个依赖项。这通常用于配置文件中,允许用户根据需要动态地开启或关闭某些功能或组件。
422+
423+
- **仓库(repository)**: `https://raw.githubusercontent.com/Masterminds/learning-helm/main/chapter6/repository/`
424+
- 这指定了`booster`依赖项的来源位置。它是一个URL,指向GitHub上一个特定项目的资源。具体来说,这是`Masterminds`组织下的`learning-helm`仓库中的`chapter6/repository/`目录。这可能是一个包含Helm图表或其他相关资源的目录,用于构建和部署应用程序。
425+
426+
##### exports属性
427+
chart可以将另外一个chart作为自己的子chart,在子chart中通过 `exports` 可以导出部分配置
428+
```yaml
429+
# example-child/values.yaml
430+
exports:
431+
types:
432+
foghorn: rooster
433+
```
434+
在父chart中可以通过 `import-values` 将对应的配置导入
435+
```yaml
436+
# parent-chart/Chart.yaml
437+
apiVersion: v2
438+
name: parent-chart
439+
version: 0.1.0
440+
dependencies:
441+
- name: example-child
442+
version: ^1.0.0
443+
repository: https://charts.example.com/
444+
import-values:
445+
- types
446+
```
447+
通过这种方式,你可以轻松地在父 chart 中使用子 chart 导出的值
448+
449+
##### 子-父格式
450+
当子cahrt没有导出值但是父chart想用,可以通过父依赖直接声明就行
451+
```yaml
452+
dependencies:
453+
- name: example-child
454+
version: ^1.0.0
455+
repository: https://charts.example.com/
456+
import-values:
457+
- child: types
458+
parent: characters
459+
```
460+
461+
#### 库chart
462+
在创建多个共享许多相同模板的类似chart。对于这些情况,可以使用库chart。
463+
464+
库chart在概念上类似于软件库。它们提供了可重用的功能,这些功能可以被导入并由其他chart使用,但它们本身不能被安装。
465+
使用helm create创建新的库chart时,第一步是删除templates目录和values.yaml文件,因为二者都不会被使用。然后,你需要告诉Helm这是一个库chart。在Chart.
466+
```yaml
467+
apiVersion: v2
468+
name: mylib
469+
type: library
470+
description: an example library chart
471+
version: 0.1.0
472+
```
473+
474+
在编辑好辅助函数和需要的数据之后,通过 `helm package .` 将模板库进行打包
475+
```yaml
476+
apiVersion: v2
477+
name: myapp
478+
version: 0.1.0
479+
dependencies:
480+
- name: mylib
481+
version: 0.1.0
482+
repository: "file://path/to/mylib"
483+
```
484+
485+

0 commit comments

Comments
 (0)