LabHub
学习 学习路径 课程

Helm 发布与回滚

用渲染确认值合并的顺序

在 LabHub 中继续学习

目标

与其背诵价格相加的顺序,不如养成渲染并确认的习惯。本地 依赖子图,两张值文件和--set叠加起来看看谁会赢, 甚至在分发错误值之前,通过schema来阻止。

为什么重要

运营部署的值文件一般有两三层。图表基本值、根据环境的不同值,以及CI 这是注入的图像标签。如果不知道哪个赢,那么摆设值就会在制作中 渗入其中。这里还有两个陷阱。地图合并了,但列表是一整块的 更换,而且给子排行榜的值是要用子排行榜的名字作为键 就是传达的意思。

依赖性也会产生相同类型的问题。Chart.yaml写在上的版本是范围,实际上 抓到了什么Chart.lock写在上面。如果不提交这个文件,每个人都会 接受了其他依赖性,从那时开始“在我的电脑上可以做”就开始了。

环境

因为没有网络,所以无法接收图表存储库。取而代之的是子图表在旁边。 放在目录里file://指着。helm dependency update以这种方式 正常运行。工作目录是/root/hs-val是的,计算结果是/root/hs-val/out 放在下面。评分时不要用文字看文件。helm template亲自转回来 读取结果。

阶段

  1. 子排行榜cache哇,父母platform制作并file://锁定依赖性。
  2. platform/values.yamlcache将价值发送到基罗子排行榜。
  3. global.env确认两边图表一起阅读。
  4. values/base.yamlvalues/prod.yaml叠加后渲染/root/hs-val/out/render.yaml保存到。
  5. 确认列表要更换后/root/hs-val/out/list-note.txt写在上面。
  6. cache.enabled: false将子图全部删除。
  7. values.schema.json阻止超出范围的值,并保存拒绝输出。
  8. val-lab安装在helm get values保存结果。

参考

依赖本地子图锁定

/root/hs-val请制作两个图表。子图表是cache,父母是platform是。platform/Chart.yamlcache依赖性file://../cache写在储存处condition: cache.enabled贴上后helm dependency update请转动。

因为没有网络,所以用存储库地址file://写。helm dependency update <부모차트>旋转后,子图会被捆绑成一个包裹。platform/charts/cache-0.1.0.tgz进入,被抓到的版本platform/Chart.lock写在上面。将此锁定文件提交到存储库,才能与其他人收到相同的CI。在CI中helm dependency build写,重新解范围的update只在有意的时候写。

把价格发到子列表中

platform/values.yaml最后cache制作钥匙,然后在下面enabled: truereplicaCount: 3请放。父母自己的replicaCount保持为基本值1。

要给子图赋值,必须在父图values中子图名称作为键包裹。如果直接写在最上面,只会成为父图的值。修改后helm template plat ./platform请确认Deployment两个replicas分别变成3和1。

只有global下的值才能一起查看所有图表。

platform/values.yamlglobal.env然后,请制作一个在父母和子图两侧都包含该值的ConfigMap模板。名称分别为{{ .Release.Name }}-platform-env{{ .Release.Name }}-cache-env并且,data.env.Values.global.env放入。

子图虽然看不到父母的最高值,但是global下面一起看一下值。有一个陷阱。即使修改了子图模板platform/charts/里面的包裹是旧的,helm dependency update必须再次旋转才能反映在渲染中。在渲染结果中,两个ConfigMap的data.env如果和一样的话就是成功了。

将两个值文件和--set叠加在一起,看看谁赢

/root/hs-val/values/base.yamlprod.yaml制作,tierimage.tag请互相写得不同。在父母表格上{{ .Release.Name }}-settings创建ConfigMap模板tier·tag·envNames包含,-f base.yaml -f prod.yaml --set image.tag=ci-42将渲染的结果/root/hs-val/out/render.yaml请保存到。

优先顺序从最低的开始,从图表的values.yaml,-f罗俊的文件(先来的→后来的),还有--set是。base.yaml里面有tier·replicaCount·image.tag·extraEnv留下,prod.yaml里面有tier·image.tag·extraEnv放。replicaCount请不要在prod中写太多。8步中重新写下以后文件中没有的键会变成什么样子。评分器会再次执行相同的命令,与您的文件进行比较。

列表不会合并,而是全部更换。

在第4步制作的两个值文件的extraEnv保持原样,渲染结果的envNames请确认是哪个列表。确认的规则/root/hs-val/out/list-note.txt在第一行LIST_MERGE=replace写上,然后在下面加上一两句话说明为什么会这样。

虽然按地图的键值合并,但列表会把后面的东西全部覆盖在前面。-f base.yaml -f prod.yaml如果渲染的话,base的项目就一无所有了。根据环境分开的extraEnv只有一个事故在这里发生了。如果想合并,就必须用地图而不是列表进行设计。

如果条件是假的,子图就不会渲染。

prod.yamlcache.enabled: false请比较给予该值的渲染器和没有给予该值的渲染器。绳子的一侧不应该有任何子图资源。

Chart.yamlcondition如果指定的值是错误的,那么该子图将完全不渲染。因此,即使子图的值有误,也会通过发布,在打开时首次显示。子图生成的资源是否是渲染结果的# Source: platform/charts/cache/可以用注释区分。

在分发错误值之前,通过schema阻止。

/root/hs-val/platform/values.schema.json制作replicaCount请将限制在1以上5以下的整数。然后尝试用超过上限的值进行渲染,拒绝的输出/root/hs-val/out/schema-reject.txt请保存到。

Helm是图表路线的values.schema.json检查合并后的值。目的是在分发有错误的键之前发现错误。有一个要注意的地方。只有在环境文件中存在的键required放入的话,即使是没有值文件渲染的情况也会被阻止,前一步就会崩溃。拒绝输出会变成标准错误,所以2>&1要用接收才能留在文件中。

确认实际进入分发的版本中包含的值

platformval-lab在名称空间中plat以这个名字,-f base.yaml -f prod.yaml --set image.tag=ci-42请照样给后安装。然后helm get values以JSON的形式接收/root/hs-val/out/user-values.json请保存到。

helm get values只有用户给出的值,--all显示包括图表基本值在内的全部内容。在事故调查中首先看到的是前面。保存后请确认三个内容。image.tag--set是价格吗,tier是后面给你的文件值吗,还有prod里没有的replicaCount是base值是否保持原样。最后一个是地图合并的证据。