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

【笔记】Helm-4 最佳实践-2 values

values

最佳实践的该部分包括了values的使用。这部分指南中,我们提供了关于您如何构建和使用values的建议,以及专注于设计chart的values.yaml文件。

命名规范

变量名称以小写字母开头,单词按驼峰区分:

正确的:

chicken: true

chickenNoodleSoup: true

错误的:

Chicken: true  # initial caps may conflict with built-ins
chicken-noodle-soup: true # do not use hyphens in the name

注意所有的Helm内置变量以大写字母开头,以便与用户定义的value进行区分:.Release.Name,.Capabilities.KuberVersion。

扁平或嵌套的Value

YAML是一种灵活格式,值可以嵌套得很深,也可以是扁平的。

嵌套的:

servere:

  name: nginx

  port: 80

扁平的:

serverName: nginx

serverPort: 80

大多数场景中,扁平的优于嵌套的。因为对模板开发者和用户来说更加简单。

为了最佳的安全性,嵌套值的每一层都必须检查:

{{ if .Values.server }}

  {{ default "none" .Values.server.name }}

{{ end }}

对于每个嵌套层,都必须进行存在性检查。但对于扁平的配置,使得模板更易于阅读和使用,这个检查可以跳过。

{{ default "none" .Values.serverName }}

当有大量的相关变量时,其中至少有一个是非选择性的,嵌套的值可以改善可读性。

搞清楚类型

YAML的类型强制规则有时候是很反常的。比如:foo: false和foo: "false"是不一样的。大整型数如:foo: 12345678有时会被转换成科学计数法。

避免类型强制规则错误最简单的方式是字符串明确定义,其他都是不明确的。或者,简单来讲,给所有字符串打引号。

通常,为了避免整数转换问题,将整型存储为字符串更好,并用{{ int $value }}在模板中将字符串转回整型。

在大多数场景中,显示的类型标记更好,所以foo: !!string 1234会将1234作为字符串对待。但是YAML解析器会消耗标记,因此类型数据在一次解析后会丢失。

考虑用户如何使用您的value

有三种潜在的value来源:

1、chart的values.yaml文件

2、由 helm install -f  或 helm upgrade -f 提供的values文件

3、在执行 helm install 或 helm upgrade 时传递给 --set 或 --set-string 参数的values

当设计values的结构时,记得您的chart用户可能会通过 -f 参数或 --set 选项覆盖他们。

由于 --set 在表现上更有限,编写您values.yaml文件的第一指导原则是确保它容器被 --set 覆盖。

因此使用map构建valuse文件更好。

很难与 --set 一起使用:

servers:

  - name: foo

  port: 80

  - name: bar

    port: 81

servers:- name: fooport: 80- name: barport: 81

上述在Helm <=2.4的版本中无法和--set一起表达。在Helm 2.5中,访问foo上的端口是 --set servers[0].port=80。用户不仅更难理解,而且以后更改serveres顺序之后更容易出错。

易于使用:

servers:

  foo:

    port: 80

  bar:

    port: 81

servers:foo:port: 80bar:port: 81

这样访问foo的port更加明显: --set servers.foo.port=80。

给values.yaml写文档

values.yaml中给每个定义的属性都应该文档化。文档字符串应该以它要描述的属性开头,并至少给出一句描述。

不正确的:

# the host name for the webserver

serverHost: example

serverPort: 9191

# the host name for the webserver
serverHost: example
serverPort: 9191

正确的:

# serverHost is the host name for the webserver

serverHost: example

# serverPort is th Http listener port for the webserver

serverPort: 9191

# serverHost is the host name for the webserver
serverHost: example
# serverPort is the HTTP listener port for the webserver
serverPort: 9191

以它描述的参数名称开始每个注释可以很容齐整理文档,并使工具可靠地将文档字符串与其描述的参数关联起来。

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

仅用于本人学习

来源:Helm | Docs

相关文章:

  • 01.领域驱动设计:微服务设计为什么要选择DDD学习总结
  • 2024年【G2电站锅炉司炉】新版试题及G2电站锅炉司炉作业考试题库
  • Layui技术积累
  • Qt Quick程序的发布|Qt5中QML和Qt Quick 的更改
  • 【GitHub项目推荐--不错的 Go 学习项目】【转载】
  • ZYNQ程序固化
  • AIGC:让生成式AI成为自己的外脑(文末送书)
  • 操作无法完成,因为文件已在Windows资源管理器中打开,如何解决?以及如何将哔哩哔哩下载好的视频导出到电脑中播放?— 以vivo手机为例
  • 8.多折线图(MuliLineChart)
  • Win10 中 通过脚本弹出TF卡
  • Linux 下查看端口以及释放端口
  • 【51单片机系列】proteus中的LCD12864液晶屏
  • Unity之Cinemachine教程
  • Vue好看的组件库:Element
  • 7.FPR/TNR-机器学习模型性能的常用的评估指标
  • 分享一款快速APP功能测试工具
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Fundebug计费标准解释:事件数是如何定义的?
  • idea + plantuml 画流程图
  • Java多线程(4):使用线程池执行定时任务
  • React16时代,该用什么姿势写 React ?
  • SpringBoot几种定时任务的实现方式
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 搭建gitbook 和 访问权限认证
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 复杂数据处理
  • 浅谈Golang中select的用法
  • 如何在 Tornado 中实现 Middleware
  • 使用Swoole加速Laravel(正式环境中)
  • 我有几个粽子,和一个故事
  • 优秀架构师必须掌握的架构思维
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • HanLP分词命名实体提取详解
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​TypeScript都不会用,也敢说会前端?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###项目技术发展史
  • #git 撤消对文件的更改
  • #include到底该写在哪
  • (003)SlickEdit Unity的补全
  • (1)(1.13) SiK无线电高级配置(六)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (42)STM32——LCD显示屏实验笔记
  • (7)STL算法之交换赋值
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (简单) HDU 2612 Find a way,BFS。
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三分钟)速览传统边缘检测算子
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4.0中的泛型协变和反变
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作