编写第一个模板

使用helm chart创建一个ConfigMap资源

  1. 利用helm create命令先创建一个模板文件
helm create mychart
  1. 进入mychart/templates,删除所有.yaml文件,新建一个configmap.yaml
#configmap.yaml,文件名称没有严格要求,以.yaml结尾的YAML文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  value1: "Hello Helm"

在这个yaml中,name定义的是configmap的名称,data中定义的是内容,以键值的方式存在。变量的值都是写死的。
3. 通过模板文件,就有了一个可安装的chart,安装如下:

# helm install firstchart mychart/
NAME: firstchart
LAST DEPLOYED: Sun Jul 30 14:55:39 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
  1. 使用Helm检索版本并查看实际加载的模板
# helm get manifest firstchart
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  value1: "Hello Helm"

helm get manifest 命令后跟一个发布名称(firstchart)然后打印出了所有已经上传到server的Kubernetes资源。 每个文件以—开头表示YAML文件的开头,然后是自动生成的注释行,表示哪个模板文件生成了这个YAML文档。

  1. 卸载发布
    helm uninstall firstchart

添加一个简单的模板调用

通常来讲name的值一般不会写死,我们额可以通过插入发布名称来生成名称字段,如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-cm
data:
  value1: "Hello Helm"

{{ .Release.Name }} 将发布名称注入了模板。值作为一个 命名空间对象 传给了模板,用点(.)分隔每个命名空间的元素。

Release是一个Helm的内置对象,后面的博文会讲到

再安装一次资源,发布名称起名test

# helm install test mychart/
NAME: test
LAST DEPLOYED: Sun Jul 30 15:09:16 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1

运行helm get manifest test查看生成的完整的YAML如下:

# helm get manifest test
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-cm
data:
  value1: "Hello Helm"

以上通过创建一个configmap资源简单了解了chart模板。在YAML中,我们分别通过自定义和变量传参的方式来设置name的值,最后通过helm install安装chart,再用helm get manifest 去查看模板的内容。
这里,当你想测试模板渲染的内容但又不想安装任何实际应用时,可以使用helm install --debug --dry-run,这样不会安装应用(chart)到你的kubenetes集群中,只会渲染模板内容到控制台(用于测试)。渲染后的模板如下:

# helm install test mychart/ --debug --dry-run
install.go:173: [debug] Original chart version: ""
install.go:190: [debug] CHART PATH: /root/ums/helm-chart/mychart
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-cm
data:
  value1: "Hello Helm"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1 范围(标题字体为黑体小四,行距为段前段后1行,单倍行距。) 本程序适用于组织绩效业绩指标体系和评价体系的建立、评价、结果应用。 本程序适用于XXXXX有限公司(以下简称XXXX)。 2 目的 3 术语和定义 如果有术语和定义需要解释,使用如下模式 3.1 XXXX 3.2 XXXX 如果没有,请首行缩进两个字符,写:"无。" 4 职责 一个部门只有一项职责时,使用如下模式: 4.1 XX部门:XXXX。 一个部门有多项职责时,使用如下模式: 4.2 XX部门: 4.2.1 XXXXX; 4.2.2 XXXXX。 5 工作要求及程序 5.1 工作程序 5.1.1 XXXX (1) XXXX 1) XXXX 5.2 流程图 5.2.1 XXX流程图见图1。(若流程图只有一张,则XXX的名称与文件名称一致) 此处用插入对象的形式插入 PPT格式的流程图,PPT要求使用2003版本 图1 XXX流程图 5.2.2 XXX流程图见图2。(如果有两张以上流程图,依次编号,格式同上) 5.3 流程说明 5.3.1 XXX流程说明见表1。 表1 XXX流程说明 "序号 "活动名称 "执行者 "执行时间 "输入物 "参考文件 "交付品 " "2 " " " " " " " "3 " " " " " " " 表中字体为宋体小四,字的位置在表格中上下左右居中,表头(第一行)中的文字一字 排开,不要转行且有底色。 6 记录 "序号 "记录名称 "格式 "记录编号 "管理部门 "保存期限 " "2 " "附录B.2 " " " " "3 " "附录B.3 " " " " 用列表的方式列出工作程序中涉及到的输出物,同时将信息类的输出物模板添加到附 录B中。列表的顺序需和附录B的顺序一致。如文中没有涉及记录的内容,则将上表按原 样保留在此处。 7 附录 附录A 参考标准 附录A.1 XXXX 附录B 记录模板(必须和6记录中的内容一一对应) 附录B.1 XXXX 见表B.1。 表B.1 (须将附录B.1中的内容贴于此处) 标准范本见附件B.1。 (此处以对象形式插入附件,显示为图标) 附录C 引用文件列表 见表C.1 表C.1 "序号 "参考文件 "文件编号 "管理部门 " " " " " " " " " " " " " " " " 如文中没有涉及记录的内容,则将上表按原样保留在此处,保留三个空行。 附则(标题字体为黑体小四,行距为段前段后1行,单倍行距。) 本程序起草单位: 本程序起草人:(实际编写此程序文件人员的名字,多人则用"、"号隔开) 本程序审核人: 本程序批准人: 发布/修订记录(标题字体为黑体小四,行距为段前段后1行,单倍行距。) "发布/修改日期 "实施日期 "变更理由 "修订内容 " " " " " " " " " " " " " " " " ----------------------- "标题或正文"数字后需留出两个字符空格 正文: 字体为宋体小四。段前段后0行,1.5倍行距 标题 程序文件编写模板全文共4页,当前为第1页。 流程图名称位置在流程图下方居中,黑体小四,段前段后为0行,行距为1.5倍行距 虚线为"划线-点"虚线 程序文件编写模板全文共4页,当前为第2页。 此处为本文件的结束线,需画在附则之前,表C.1之后。结束线以上的内容之后,应插入 分页符,附则内容另起一页 程序文件编写模板全文共4页,当前为第3页。 正文: 字体为宋体小四。段前段后0行,1.5倍行距,首行缩进2个字。 程序文件编写模板全文共4页,当前为第4页。
### 回答1: 好的,以下是冒泡排序的函数模板: ```cpp template<typename T> void bubble_sort(T arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { T temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 其中,模板类型参数 `T` 表示待排序数组元素的类型,参数 `arr` 表示待排序数组的首地址,参数 `n` 表示待排序数组的长度。函数中使用两层循环,每次比较相邻的两个元素,若顺序不对则交换它们的位置,直到所有元素都被排序。 ### 回答2: 冒泡排序是一种简单直观的排序算法,它重复地走访过要排序的元素,依次比较相邻的两个元素,如果顺序不对就交换它们。 首先,我们可以编写一个函数模板来实现冒泡排序: ```cpp template<typename T> void bubbleSort(T arr[], int n) { for(int i = 0; i < n-1; i++) { for(int j = 0; j < n-i-1; j++) { if(arr[j] > arr[j+1]) { // 交换arr[j]和arr[j+1] T temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } ``` 这里的函数模板可以接受不同类型的数组进行排序。函数的参数是一个数组`arr`和数组的长度`n`。在函数内部,我们使用两个嵌套的循环来遍历数组并比较相邻元素的大小。如果前一个元素比后一个元素大,则交换它们的位置。通过这样的循环操作,最大的元素会移动到数组的末尾。然后,我们继续进行下一轮的循环,对剩下的元素进行同样的比较和交换操作,直到整个数组排序完成。 使用这个函数模板,你可以将任何类型的数组传递进去进行排序。比如,你可以这样调用函数来对一个整数数组进行排序: ```cpp int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); return 0; } ``` 通过编写这样的冒泡排序的函数模板,我们可以实现对不同类型的数组进行排序,提高了代码的复用性,使得程序更加灵活和易于拓展。 ### 回答3: 冒泡排序是一种简单但效率较低的排序算法,其思想是通过遍历数组中的相邻元素,比较它们的大小,并按照升序或降序交换位置。下面是一个用于编写冒泡排序的函数模板: ```cpp template <typename T> void bubbleSort(T arr[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { // 如果当前元素大于下一个元素,则交换它们的位置 if (arr[j] > arr[j + 1]) { T temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 该函数模板使用了模板参数 T,允许对任何类型的数组进行排序。函数接受两个参数,第一个参数 arr 是待排序的数组,第二个参数 size 是数组的大小。 在冒泡排序算法中,通过两个嵌套的循环遍历数组,并比较相邻的元素。如果当前元素大于下一个元素,则交换它们的位置。这样,每一轮循环都会将最大(或最小)的元素移动到数组的末尾。 最终,数组将按照升序(或降序)排列。 使用该函数模板,可以很方便地对各种类型的数组进行冒泡排序。例如,可以将一个整型数组和一个浮点型数组传递给该函数模板,它们都可以被正确地排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值