当前位置: 首页 > news >正文

【笔记】Helm-4 最佳实践-3 模板

模板

最佳实践指南的这部分聚焦于模板。

templates/结构

template/目录结构应该如下:

1、如果生成YAML输出。模板文件应该有扩展名.yaml。扩展名是.tpl可用于生成非格式化内容的模板文件。

2、模板文件名称应该使用横杠符号(my-example-configmap.yaml),不用驼峰记法。3

3、每个资源的定义应该在它自己的模板文件中。

4、模板文件的名称应该反映名称中的资源类型。比如:foo-pod.yaml,bar-svc.yaml

定义模板的名称

定义的模板(在{{ define }} 命令中定义的模板)是可全局访问的。这就意味着chart和所有的子chart都可以访问用 {{ define }} 创建的所有模板。

因此,所有定义的模板名称应该被命名空间化。

正确的:

{{- define "nginx.fullname" }}

{{/*...*/}}

{{ end -}}

{{- define "nginx.fullname" }}
{{/* ... */}}
{{ end -}}

不正确的:

{{- define "fullname" -}}

{{/*...*/}}

{{ end -}}

强烈建议通过helm create命令创建新chart,因为模板名称是根据此最佳实践自动定义的。

格式化模板

模板应该使用两个 空格 缩进(永远不要用tab)。

模板命令的大括号前后应该使用空格:

正确的:

{{ .foo }}

{{ print "foo" }}

{{- print "bar" -}}

{{ .foo }}
{{ print "foo" }}
{{- print "bar" -}}

不正确的:

{{.foo}}

{{print "foo"}}

{{-print "bar"-}}

{{.foo}}
{{print "foo"}}
{{-print "bar"-}}

模板应该尽可能多地使用空格:

foo:

  {{- rang .Values.items }}

  {{ . }}

  { end -}}

foo:{{- range .Values.items }}{{ . }}{{ end -}}

块(例如控制结构)可以缩进表示模板代码流。

{{ if $foo -}}

  {{- with .Bar }}Hello{{ end -}}

{{- end -}}

{{ if $foo -}}{{- with .Bar }}Hello{{ end -}}
{{- end -}}

然后,因为YAML是面向空格的语言,代码缩进通常不可能遵守规范。

生成模板中的空格

最好在生成的模板中将空格量保持在最小值。尤其是大量的空行不应该相邻出现。但偶尔有空行(尤其在逻辑块之间)是没问题的。

这样是最好的:

apiVersion: batch/v1

kind: Job

metadata:

  name: example

  labels:

    first: first

    second: second

apiVersion: batch/v1
kind: Job
metadata:name: examplelabels:first: firstsecond: second

这样也OK:

apiVersion: batch/v1

kind: Job

metadata:

  name: example

  labels:

    firts: first

    second: second

apiVersion: batch/v1
kind: Jobmetadata:name: examplelabels:first: firstsecond: second

但避免这样:

apiVersion: batch/v1

kind: Job

metadata:

  name: example

  labels:

    first: first

    second: second

apiVersion: batch/v1
kind: Jobmetadata:name: examplelabels:first: firstsecond: second

注释(YAML注释 vs. 模板注释)

YAML和Helm模板都有注释标记符。

YAML注释:

# This is a comment

type: sprocket

# This is a comment
type: sprocket

模板注释:

{{- /*

This is a comment.

*/}}

type: frobnitz

{{- /*
This is a comment.
*/}}
type: frobnitz

描述模板的特性应当使用模板注释,比如解释一个定义的模板:

{{- /*

mychart.shortname provides a 6 char truncated version of the release name.

*/}}

{{ define "mychart.shortname" -}}

{{ .Release.Name | trunc 6 }}

{{- end -}}

{{- /*
mychart.shortname provides a 6 char truncated version of the release name.
*/}}
{{ define "mychart.shortname" -}}
{{ .Release.Name | trunc 6 }}
{{- end -}}

在模板中,当有益于Helm用户(可能)在调试时查看注释,可以使用YAML注释。

# This may cause problems if the value is more than 100Gi

memory: {{ .Values.macMem | quote }}

# This may cause problems if the value is more than 100Gi
memory: {{ .Values.maxMem | quote }}

以上注释在用户执行helm install --debug时时可见的,而在{{- /* */}}部分注释不会显示。

在模板和模板输出中使用JSON

YAML是JSON的超集。在某些情况下,使用JSON语法比其他YAML表示更具可读性。

比如,这个YAML更接近表示列表的普通YAML方法:

arguments:

  - "--dirname"

  - "/foo"

arguments:- "--dirname"- "/foo"

但是折叠成JSON列表样式时会更易阅读:

arguments: ["--dirname", "/foo"]

arguments: ["--dirname", "/foo"]

使用JSON可以很好地提高易读性。然而,JSON语法不应用于表示更复杂的结构。

在处理嵌入到YAML中的纯JSON时(比如初始化容器配置),使用JSON格式当然是最合适的。

————————————

仅用于本人学习

来源:Helm | Docs

相关文章:

【笔记】Helm-4 最佳实践-3 模板

模板 最佳实践指南的这部分聚焦于模板。 templates/结构 template/目录结构应该如下: 1、如果生成YAML输出。模板文件应该有扩展名.yaml。扩展名是.tpl可用于生成非格式化内容的模板文件。 2、模板文件名称应该使用横杠符号(my-example-configmap.yam…...

网络爬虫基本原理的介绍

网络爬虫,也称为网络蜘蛛,是互联网浏览中的一种自动化程序,主要用于抓取并下载互联网上的网页信息。对于大部分搜索引擎,网络爬虫是其核心组件,用于构建和更新网页的索引。这篇博客将详细介绍网络爬虫的基本原理。 一…...

Qt配置OpenCV

首先安装好Qt Createor,CMake,OpenCV,我本次使用的是Qt6.3.4和OpenCV4.6.0 Qt Creator清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qtcreator/OpenCV官网下载: https://opencv.org/releases/ 一. 编译OpenCV 首先使用Qt C…...

单片机I/O口驱动MOS管

自记录: 看完本章,串起来看,看mos驱动电路这篇:MOS管驱动电流计算以及分立器件驱动电路-CSDN博客 使用单片机做一个PLC,输出可如下两种情况: 单片机I/O口驱动,为什么一般都选用三极管而不是MOS管&#xf…...

k8s---helm

Helm是什么? 在没有helm之前。部署一个服务,需要deployment、service、ingress、挂在卷等等相关配置都需要人工来配置。 helm的作用就是通过打包的方式,把需要人工编写的配置集成在一起。是一键式的部署服务。类似于yum功能。 由官方提供的…...

HarmonyOS(十三)——详解自定义组件的生命周期

前言 自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。 下图展示的是被Entry装饰的组件生命周期: 今…...

设计模式-责任链

之前写代码的时候看到过有审批场景使用了责任链,当时大概看了一下代码实现,今天终于有时间抽出来梳理一下,下面是本文的大纲: 使用场景 审批场景的普遍应用 实际案例:HttpClient中的责任链模式 责任链模式在事件处理、…...

ubuntu怎么安装docker

sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release 添加Docker官方的GPG密钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -使用以下命令设置稳定存储库。要添加 夜间或测试存储库&…...

UE4运用C++和框架开发坦克大战教程笔记(十五)(第46~48集)

UE4运用C和框架开发坦克大战教程笔记(十五)(第46~48集) 46. 批量加载 UClass 功能测试批量加载多个同类 UClass 资源 47. 创建单个资源对象测试加载并创建单个 UClass 资源对象 48. 创建同类资源对象 46. 批量加载 UClass 功能 逻…...

《Linux系列》Linux虚拟机,LVM逻辑卷扩容,xfs文件系统扩容

Linux虚拟机,LVM逻辑卷扩容,xfs文件系统扩容 1 虚拟机配置介绍 在创建虚拟机的时候只给了20G磁盘空间大小,但是现在需求变更,想要增加到40G磁盘空间大小,所以需要通过两步扩容磁盘空间。 系统版本是Centos7 根目录…...

springboot(ssm动漫手办商城 动漫周边商系统Java系统

springboot(ssm动漫手办商城 动漫周边商系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7&#xf…...

卸载 MariaDB:

如果你想将 MariaDB 5.5.68 替换为 MySQL 8,请按照以下步骤操作。在执行这些步骤之前,请确保你已经备份了所有重要的数据库和数据,以防发生意外情况。 1. 卸载 MariaDB: 使用适合你系统的包管理器卸载 MariaDB。在 CentOS/RHEL …...

javaweb总览

javaweb需要学习哪些技术 前端web开发: 技术描述HTML用于构建网站的基础结构的css用于美化页面的,作用和化妆或者整容作用一样JavaScript实现网页和用户的交互Vue主要用于将数据填充到html页面上的Element主要提供了一些非常美观的组件Nginx一款web服务…...

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&#…...

NumPy必知必会50例 | 5. 高级数组操作:成为 NumPy 数组的忍者

文章目录 5. 高级数组操作:成为 NumPy 数组的忍者数组重塑:变形大师例子:从一维到二维 数组合并:忍者团队联合例子:水平和垂直合并 数组分割:忍者的快速撤退例子:水平和垂直分割 5. 高级数组操作…...

《WebKit 技术内幕》学习之五(3): HTML解释器和DOM 模型

3 DOM的事件机制 基于 WebKit 的浏览器事件处理过程:首先检测事件发生处的元素有无监听者,如果网页的相关节点注册了事件的监听者则浏览器会将事件派发给 WebKit 内核来处理。另外浏览器可能也需要处理这样的事件(浏览器对于有些事件必须响应…...

extends 和 implements

以下是 extends 和 implements 在Java代码中的区别和示例: 示例1:使用 extends 实现类继承 // 定义一个父类 Animal public class Animal {public void eat() {System.out.println("动物在吃东西");}public void sleep() {System.out.printl…...

响应拦截器的 return Promise.reject(res.data.message)

今天在看老师讲解代码的时候,解决了我心中的一些疑惑。 在做excel文件导出的时候,没有告诉浏览器文件的格式是Blod产生了报错。 看下图: 可以看到下面的内容:如果业务成功 返回 res.data 如果业务失败,给出错误信息的提示,将这个错误抛出去。 因此我们在发送一个…...

Windows下 VS2022 编译OpenSSL 库

SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准…...

【GitHub项目推荐--一个简单的绘图应用程序(Rust + GTK4)】【转载】

一个用 Rust 和 GTK4 编写的简单的绘图应用程序来创建手写笔记。 Rnote 旨在成为一个简单但实用的笔记应用程序,用于手绘或注释图片或文档。它最终能够导入/导出各种媒体文件格式。而且输出的作品是基于矢量的,这使其在编辑和更改内容时非常灵活。 地址…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...