1
- # 如何创建 Helm chart
1
+ # 03-制作chart
2
+
3
+ ## 如何创建 Helm chart
2
4
3
5
使用 Helm CLI 生成 charts 目录。输入以下命令创建新 chart:
4
6
@@ -14,66 +16,66 @@ helm create phoenixnap
14
16
15
17
Helm chart 目录包含以下内容:
16
18
17
- - *** charts*** - 存储相关 charts 的目录
18
- - *** templates*** - 配置文件的目录
19
- - *** Chart.yaml*** - 包含 charts 元数据的文件
20
- - *** values.yaml*** - 包含默认参数值的文件
19
+ * _ ** charts** _ - 存储相关 charts 的目录
20
+ * _ ** templates** _ - 配置文件的目录
21
+ * _ ** Chart.yaml** _ - 包含 charts 元数据的文件
22
+ * _ ** values.yaml** _ - 包含默认参数值的文件
21
23
22
- # 如何配置 Helm Chart
24
+ ## 如何配置 Helm Chart
23
25
24
- 配置 Helm Chart 涉及自定义参数,例如** 镜像拉取策略** 、** 名称覆盖** 、** 服务帐户** 和** 服务类型** 。请按照以下步骤了解如何在 * values.yaml * 文件中编辑这些参数 。
26
+ 配置 Helm Chart 涉及自定义参数,例如** 镜像拉取策略** 、** 名称覆盖** 、** 服务帐户** 和** 服务类型** 。请按照以下步骤了解如何 &#x 5728 ; _ &#x 76 ; alues.yam &#x 6C ; _ &#x 6587 ; 件中编辑这些参数 。
25
27
26
- ## 配置镜像拉取策略
28
+ ### 配置镜像拉取策略
27
29
28
- 镜像拉取策略决定如何从注册表中拉取容器镜像。默认策略值为* *` IfNotPresent ` * * ,这意味着 Kubernetes 仅当系统上尚不存在映像时才拉取该映像,下面我们尝试将策略改变为 Always:
30
+ 镜像拉取策略决定如何从注册表中拉取容器镜像。默认策略值为\*\ *` IfNotPresent ` \*\ * ,这意味着 Kubernetes 仅当系统上尚不存在映像时才拉取该映像,下面我们尝试将策略改变为 Always:
29
31
30
- 1 . 打开 * value.yaml * 文件 :
31
- 2 . 修改 image.pullPolicy 为 Always
32
+ 1 . 打 &#x 5F00 ; _ &#x 76 ; alue.yam &#x 6C ; _ &#x 6587 ; 件 :
33
+ 2 . 修改 image.pullPolicy 为 Always
32
34
33
35
![ image] ( https://github.com/user-attachments/assets/cad336eb-39ed-4a60-8cf4-ee986f91f513 )
34
36
35
37
![ image] ( https://github.com/user-attachments/assets/a40229ab-01e9-4774-97eb-a0ea32a88787 )
36
38
37
- ## chart 名称覆盖
39
+ ### chart 名称覆盖
38
40
39
- 要覆盖 * value.yaml * 文件中的chart名称 ,请将值添加到 * nameOverride * 和 * fullnameOverride* 字段。以下示例添加 * phoenix-app* 作为 * nameOverride* 值,并将 * phoenix-chart * n 添加为 * fullnameOverride * 。
41
+ 要覆 &#x 76D6 ; _ &#x 76 ; alue.yam &#x 6C ; _ &#x 6587 ; 件中的chart名称 ,请将值添加到 _ nameOverride 和 fullnameOverride 字段。以下示例添加 phoenix-app 作为 nameOverride 值,并将phoenix-char &#x 74 ; _ &#x 6E ; 添加为 _ fullnameOverride _ 。
40
42
41
43
![ image] ( https://github.com/user-attachments/assets/b4622cdc-0d0c-49b9-97e3-becbbe749e83 )
42
44
43
- ## 指定 service account名称
45
+ ### 指定 service account名称
44
46
45
47
Helm chart 的 service account 名称是在运行集群时生成的。但是,最好手动设置它并确保应用程序直接与chart 中的受控用户关联。
46
48
47
49
![ image] ( https://github.com/user-attachments/assets/69917499-7551-4591-b7c9-e7b9a5412fab )
48
50
49
- ## 更改网络服务类型
51
+ ### 更改网络服务类型
50
52
51
- 根据集群的不同,部署可能需要不同的网络服务类型。例如,使用[ Minikube] ( https://phoenixnap.com/kb/install-minikube-on-ubuntu ) 进行测试时,推荐的网络服务类型为 * NodePort * 。
53
+ 根据集群的不同,部署可能需要不同的网络服务类型。例如,使用[ Minikube] ( https://phoenixnap.com/kb/install-minikube-on-ubuntu ) 进行测试时,推荐的网络服务类型 &#x 4E3A ; _ &#x 4E ; odePort _ 。
52
54
53
- 要更改网络服务类型,请找到 * 服务 * 部分并更改 * 类型 * 字段中的值。下面的示例显示了设置为新服务类型的 * NodePort * 。
55
+ 要更改网络服务类型,请找 &#x 5230 ; _ &#x 670D ;&#x 52A1 ; _ &#x 90E8 ; 分并更 &#x 6539 ; _ &#x 7C7B ;&#x 578B ; _ &#x 5B57 ; 段中的值。下面的示例显示了设置为新服务类型 &#x 7684 ; _ &#x 4E ; odePort _ 。
54
56
55
57
![ image] ( https://github.com/user-attachments/assets/8e8a441a-e67a-43bd-b54c-6d57aa503d67 )
56
58
57
- # 如何在 Kubernetes 上部署新的 Helm Chart
59
+ ## 如何在 Kubernetes 上部署新的 Helm Chart
58
60
59
- 配置 * values.yaml * 文件后 ,使用[ Helm命令] ( https://phoenixnap.com/kb/helm-commands-cheat-sheet ) 部署应用程序。继续执行以下步骤来完成此操作。
61
+ 配 &#x 7F6E ; _ &#x 76 ; alues.yam &#x 6C ; _ &#x 6587 ; 件后 ,使用[ Helm命令] ( https://phoenixnap.com/kb/helm-commands-cheat-sheet ) 部署应用程序。继续执行以下步骤来完成此操作。
60
62
61
- ## 第 1 步:安装 Helm Chart
63
+ ### 第 1 步:安装 Helm Chart
62
64
63
65
``` shell
64
66
helm install phoenix-chart phoenixnap/ --values phoenixnap/values.yaml
65
67
```
66
68
67
69
![ image] ( https://github.com/user-attachments/assets/bdee469a-43ed-4671-9df2-e8e2b80a56d3 )
68
70
69
- ### 步骤2:导出节点端口和IP地址
71
+ #### 步骤2:导出节点端口和IP地址
70
72
71
73
``` shell
72
74
export NODE_PORT=$( kubectl get --namespace default -o jsonpath=" {.spec.ports[0].nodePort}" services phoenix-chart)
73
75
export NODE_IP=$( kubectl get nodes --namespace default -o jsonpath=" {.items[0].status.addresses[0].address}" )
74
76
```
75
77
76
- ### 步骤3:查看已部署的应用程序
78
+ #### 步骤3:查看已部署的应用程序
77
79
78
80
``` shell
79
81
echo http://$NODE_IP :$NODE_PORT
@@ -85,9 +87,9 @@ echo http://$NODE_IP:$NODE_PORT
85
87
86
88
![ image] ( https://github.com/user-attachments/assets/87e45dfc-e4e1-474d-826f-6a72a5665b4d )
87
89
88
- # 从头开始创建(选读)
90
+ ## 从头开始创建(选读)
89
91
90
- ## templates
92
+ ### templates
91
93
92
94
你也可以不仅仅只是修改,你可以重新创建这个样例
93
95
@@ -139,13 +141,13 @@ spec:
139
141
140
142
首先,您需要弄清楚哪些值可以改变或者您想要模板化哪些值。我正在选择**name** 、 **replicas 、容器名称、image、** **imagePullPolicy**和**configMap Name** ,我在 YAML 文件中以粗体突出显示了这些名称。
141
143
142
- - name:` {{ .Release.Name }}-nginx` :我们每次都需要更改部署名称,因为 Helm 不允许我们安装同名的版本。因此,我们将使用版本名称模板化部署名称,并随之插入* *-nginx* * 。现在,如果我们使用名称**frontend**创建一个版本,则部署名称将为**frontend-nginx** 。这样,我们就能保证名称的唯一性。
143
- - container name :`{{ .Chart.Name }}` :对于容器名称,我们将使用 Chart 对象并使用**Chart.yaml**中的chart名称作为容器名称。
144
- - replicas :` {{ .Values.replicaCount }}`我们将从**values.yaml**文件中访问副本值。
145
- - image : **`"{{ .Values.image.repository }}:{{ .Values.image.tag }}"` 在这里,我们在一行中使用多个模板指令,并从 Values 文件中访问图像键下的存储库和标签信息。**
146
- - configmap name : ` {{ .Release.Name }}-index-html-configmap.` 这里我们将发布名称添加到配置映射中。
144
+ * name:` {{ .Release.Name }}-nginx` :我们每次都需要更改部署名称,因为 Helm 不允许我们安装同名的版本。因此,我们将使用版本名称模板化部署名称,并随之插入\*\ *-nginx\*\ * 。现在,如果我们使用名称**frontend**创建一个版本,则部署名称将为**frontend-nginx** 。这样,我们就能保证名称的唯一性。
145
+ * container name :`{{ .Chart.Name }}` :对于容器名称,我们将使用 Chart 对象并使用**Chart.yaml**中的chart名称作为容器名称。
146
+ * replicas : ` {{ .Values.replicaCount }}`我们将从**values.yaml**文件中访问副本值。
147
+ * image: **`"{{ .Values.image.repository }}:{{ .Values.image.tag }}"` 在这里,我们在一行中使用多个模板指令,并从 Values 文件中访问图像键下的存储库和标签信息。**
148
+ * configmap name: `{{ .Release.Name }}-index-html-configmap.` 这里我们将发布名称添加到配置映射中。
147
149
148
- 这是应用模板后的最终* *`deployment.yaml`* *文件。模板化部分以粗体突出显示。将部署文件内容替换为以下内容。
150
+ 这是应用模板后的最终\*\ *`deployment.yaml`\*\ *文件。模板化部分以粗体突出显示。将部署文件内容替换为以下内容。
149
151
150
152
` ` ` yaml
151
153
apiVersion: apps/v1
@@ -196,9 +198,9 @@ spec:
196
198
targetPort: {{ .Values.service.targetPort }}
197
199
` ` `
198
200
199
- 在**协议模板指令**中,您可以看到一个竖线`( | )` 。它用于定义协议的默认值为TCP。这意味着,如果我们不在* *`values.yaml`* *文件中定义协议值或者它为空,它将采用TCP作为协议的默认值。
201
+ 在**协议模板指令**中,您可以看到一个竖线`( | )` 。它用于定义协议的默认值为TCP。这意味着,如果我们不在\*\ *`values.yaml`\*\ *文件中定义协议值或者它为空,它将采用TCP作为协议的默认值。
200
202
201
- 创建* *`configmap.yaml`* *并向其中添加以下内容。在这里,我们将默认的 Nginx **index.html**页面替换为自定义 HTML 页面。此外,我们添加了一个模板指令来替换 HTML 中的环境名称。
203
+ 创建\*\ *`configmap.yaml`\*\ *并向其中添加以下内容。在这里,我们将默认的 Nginx **index.html**页面替换为自定义 HTML 页面。此外,我们添加了一个模板指令来替换 HTML 中的环境名称。
202
204
203
205
` ` ` yaml
204
206
apiVersion: v1
@@ -215,9 +217,9 @@ data:
215
217
</html
216
218
` ` `
217
219
218
- # # values
220
+ # ## values
219
221
220
- ` values.yaml` 文件包含我们在模板中使用的模板指令中需要替换的所有值。现在,将默认的* *`values.yaml`* *内容替换为以下内容。
222
+ ` values.yaml` 文件包含我们在模板中使用的模板指令中需要替换的所有值。现在,将默认的\*\ *`values.yaml`\*\ *内容替换为以下内容。
221
223
222
224
` ` ` yaml
223
225
replicaCount: 2
@@ -250,15 +252,15 @@ nginx-chart
250
252
└── values.yaml
251
253
` ` `
252
254
253
- # # 验证 Helm chart
255
+ # ## 验证 Helm chart
254
256
255
257
现在为了确保我们的chart有效并且所有缩进都正常,我们可以运行以下命令。确保您位于chart目录内。
256
258
257
259
` ` ` shell
258
260
helm lint .
259
261
` ` `
260
262
261
- 如果您从* *`nginx-chart`**目录外部执行它,请提供**`nginx-chart`* *的完整路径
263
+ 如果您从\*\ *`nginx-chart`**目录外部执行它,请提供**`nginx-chart`\*\ *的完整路径
262
264
263
265
` ` ` shell
264
266
helm lint /path/to/nginx-chart
@@ -285,4 +287,4 @@ helm template .
285
287
helm install --dry-run my-release nginx-chart
286
288
` ` `
287
289
288
- xxxxxxxxxx helm plugin install <path/url1> # Install pluginshelm plugin list # View a list of all installed pluginshelm plugin update <plugin> # Update pluginshelm plugin uninstall <plugin> # Uninstall a pluginbash
290
+ xxxxxxxxxx helm plugin install \ <path/url1> # Install pluginshelm plugin list # View a list of all installed pluginshelm plugin update # Update pluginshelm plugin uninstall # Uninstall a pluginbash
0 commit comments