第八章 Helm 模板高效互用动态参数生成

简介: 第八章 Helm 模板高效互用动态参数生成

1.我们重新创建一个新的模板 helm create <应用名称>

[root@master01 hpro]# helm create mychart
Creating mychart

2.我们接着看文件

# 查看文件
[root@master01 mychart]# ls
charts  Chart.yaml  templates  values.yaml
 
# 我们进入 templates
[root@master01 templates]# ls
deployment.yaml  _helpers.tpl  hpa.yaml  ingress.yaml  NOTES.txt  serviceaccount.yaml  service.yaml  tests
 
# 我们随便查看一个yaml
[root@master01 templates]# vim service.yaml
# 这个是一个 helm创建的模板
apiVersion: v1
kind: Service
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    {{- include "mychart.labels" . | nindent 4 }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      name: http
  selector:
    {{- include "mychart.selectorLabels" . | nindent 4 }}

3.模板取值格式

# 取参数的格式
# {{ .Values.变量名称 }}
# {{ .Release.Name }}

4.修改 values.yaml

[root@master01 mychart]# ls
charts  Chart.yaml  templates  values.yaml
 
# 把里面所有清空
[root@master01 mychart]# vim values.yaml
 
# 写入以下内容
 
# 定义副本数
replicas: 1
# 镜像
image: nginx
# 版本
tag: 1.16
# 标签
label: nginx
# 端口
port: 80

5. 修改 templates 文件夹中的deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: {{.Values.label }}
  name: {{ .Release.Name}}-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: {{.Values.label }}
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: {{.Values.label }}
    spec:
      containers:
      - image: {{.Values.image }}
        name: {{.Values.image }}
        resources: {}
status: {}

6. 修改 templates 文件夹中的 service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: web-test
  name: {{ .Release.Name}}-svc
spec:
  ports:
  - port: {{ .Values.port}}
    protocol: TCP
    targetPort: 80
  selector:
    app: {{ .Values.label}}
  type: NodePort

7.这是创建的模板文件

[root@master01 templates]# ls
deploy.yaml  service.yaml

8.测试模板文件  helm install --dry-run <应用名称> <模板文件夹>

命令的解释如下:

  • helm install: 这是 Helm 的安装命令,用于安装一个 chart。
  • --dry-run: 这个选项表示在执行安装命令时只进行模拟操作,不实际安装 chart。
  • web2: 这是要安装的 release 的名称。
  • mychart/: 这是要安装的 chart 的路径。

helm install --dry-run web2 mychart/ 这个命令将模拟安装位于 mychart/ 的 chart,不会实际执行任何操作。可以通过这个命令来检查安装过程中可能出现的问题或验证 chart 的配置是否正确。

 

1. # 正常打印表示文件没有问题
2. [root@master01 hpro]# helm install --dry-run web2 mychart/
3. NAME: web2
4. LAST DEPLOYED: Sun Jan 14 02:49:27 2024
5. NAMESPACE: default
6. STATUS: pending-install
7. REVISION: 1
8. TEST SUITE: None
9. HOOKS:
10. MANIFEST:
11. ---
12. .
13. .
14. .

9.我们看一下打印的内容,填充的内容都已经填充上了

1. # 取参数的格式
2. # {{ .Values.变量名称 }}
3. # {{ .Release.Name }}
4. 
5. # 这下明白怎么取值了吧
6. 
7. .Values 取得是 values.yaml 文件中的属性
8. 
9. .Release 取得是 install 中定义的名字
1. [root@master01 hpro]# helm install --dry-run web2 mychart/
2. NAME: web2
3. LAST DEPLOYED: Sun Jan 14 02:49:27 2024
4. NAMESPACE: default
5. STATUS: pending-install
6. REVISION: 1
7. TEST SUITE: None
8. HOOKS:
9. MANIFEST:
10. ---
11. # Source: mychart/templates/service.yaml
12. apiVersion: v1
13. kind: Service
14. metadata:
15.   labels:
16.     app: web-test
17.   name: web2-svc
18. spec:
19.   ports:
20.   - port: 80
21.     protocol: TCP
22.     targetPort: 80
23.   selector:
24.     app: nginx
25. type: NodePort
26. ---
27. # Source: mychart/templates/deploy.yaml
28. apiVersion: apps/v1
29. kind: Deployment
30. metadata:
31.   creationTimestamp: null
32.   labels:
33.     app: nginx
34.   name: web2-deploy
35. spec:
36.   replicas: 1
37.   selector:
38.     matchLabels:
39.       app: nginx
40.   strategy: {}
41.   template:
42.     metadata:
43.       creationTimestamp: null
44.       labels:
45.         app: nginx
46.     spec:
47.       containers:
48.       - image: nginx
49.         name: nginx
50.         resources: {}
51. status: {}

10.安装自定义应用

1. [root@master01 hpro]# helm install web2 mychart/
2. NAME: web2
3. LAST DEPLOYED: Sun Jan 14 02:58:44 2024
4. NAMESPACE: default
5. STATUS: deployed
6. REVISION: 1
7. TEST SUITE: None
8. [root@master01 hpro]# helm list
9. NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
10. web2    default         1               2024-01-14 02:58:44.222147967 -0800 PST deployed        mychart-0.1.0   1.16.0
11. [root@master01 hpro]# kubectl get pod
12. NAME                          READY   STATUS    RESTARTS   AGE
13. web2-deploy-f89759699-rqc6m   1/1     Running   0          21s
14. [root@master01 hpro]# kubectl get svc
15. NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
16. kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        28d
17. web2-svc     NodePort    10.108.230.159   <none>        80:31223/TCP   25s


总结:本章学习怎么定义模板,怎么取值运行。

相关文章
|
6月前
|
设计模式 程序员 C++
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
868 2
|
自然语言处理 JavaScript
【Vue2.0源码学习】模板编译篇-模板解析阶段(整体运行流程)
【Vue2.0源码学习】模板编译篇-模板解析阶段(整体运行流程)
84 0
|
6月前
|
Kubernetes Perl 容器
k8s学习-ReplicationController 、ReplicaSet(工作原理、模板、实战)
k8s学习-ReplicationController 、ReplicaSet(工作原理、模板、实战)
88 0
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
构建可复用的 Jupyter 模板和插件:提高工作效率的最佳实践
【8月更文第29天】Jupyter Notebook 是一个广泛使用的交互式计算环境,支持多种编程语言。它不仅用于数据分析、可视化和机器学习项目,也是教学和科研的理想工具。然而,随着使用频率的增加,重复编写相似的代码和设置变得既耗时又低效。通过创建可复用的 Jupyter 模板和插件,我们可以显著提高工作效率。
51 1
|
5月前
|
安全 开发者 索引
将python项目从动态迁移到静态
【6月更文挑战第29天】本文介绍**mypy 是 Python 的静态类型检查器,它结合动态和静态类型的优势,提供编译时类型检查而无运行时开销。 文中在类的示例中,展示了如何为方法添加类型注解,以增强类的安全性。泛型允许创建可复用的类型安全容器,如 Stack 类,它可以用
54 4
将python项目从动态迁移到静态
|
5月前
|
Java Maven Docker
几种常见的构建模式及其使用方法
几种常见的构建模式及其使用方法
58 3
|
5月前
|
运维 JavaScript Serverless
函数计算产品使用问题之构建自己的流水线时,已经有一个基础第三方包的层,想在这个基础上进行额外的第三方包安装,该如何实现
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
XML 搜索推荐 数据格式
资源描述框架的用途及实际应用解析
**RDF(资源描述框架)**是一种用于机器理解网络资源的框架,使用XML编写。它通过URI标识资源,用属性描述资源,便于计算机应用程序处理信息。RDF在语义网上促进信息的确切含义和自动处理,使得网络信息可被整合。RDF语句由资源、属性和属性值组成。RDF文档包括`&lt;rdf:RDF&gt;`根元素和`&lt;rdf:Description&gt;`元素,后者用`about`属性标识资源。RDF还支持容器(如`&lt;Bag&gt;`、`&lt;Seq&gt;`和`&lt;Alt&gt;`)来描述集合。RDFS是RDF的扩展,提供描述类和属性的框架,而达布林核心是一组预定义属性,用于描述文
158 0
|
6月前
|
弹性计算 运维 数据处理
资源编排ROS之模块:实现模板代码复用(进阶篇)
资源编排ROS模块能够实现模板代码复用。支持输入输出、公共模块、版本管理、共享模块等功能。在使用场景上,除了对基础设施模块化外,还可作为配置、数据处理工具或资源包装器。
507 6
|
6月前
|
存储 Kubernetes 应用服务中间件
第七章 自定义Chart并部署一个应用
第七章 自定义Chart并部署一个应用
70 1