@@ -311,3 +311,175 @@ characters:
311
311
{{- end }}
312
312
` ` `
313
313
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