LabHub
学习 学习路径 课程

策略即代码

mutate 与 generate — 不去拒绝,而是替它补上

在 LabHub 中继续学习

一句话总结

验证防止错误,变形填补遗漏,生成创造应该有的东西。这三者中,真正减少人的工作的是后两者。

流程图: 使用户使用的说明书和聚类的实际对象不同 · 追加锚点+() · 像秘密一样在政策文件中写内容是不可以的,这是必须的。clone · 请求将成功,但只会安静地不创建资源。

为什么需要这个?

假设他们制定了阻止所有没有资源限制的派对的政策。虽然遵守了规则,但代价是巨大的。十个团队必须各自修改他们的宣言,在这个过程中,他们会收到十次关于“应该投入多少钱”的询问。组织想要的是“没有资源限制的派对”,而不是“十个团队各自苦恼的状态”。

变形规则颠覆了这件事。如果没有值,就给组织设置默认值,如果已经有值,就不要动。这样一来,遵守规则就不会阻碍任何人。生成规则再进一步。在创建新命名空间的瞬间,会一起创建默认NetworkPolicy·ResourceQuota·LimitRange。人们按照入职检查清单进行三次kubectl apply做的事情消失了。

但是,力量越大,副作用也越大。变形会使用户使用的说明书和聚类的实际对象不同。半年后,会出现“这个注释是谁贴的”的问题,并继续与发布工具的漂移检测作斗争。所以需要判断标准。只把必须强制在整个组织中使用的值放入变形中,而团队可以更改的值则留作图表或说明书的基本值。

怎么行动

变形有三种方式。

方式 什么时候 特点
patchStrategicMerge 在地图上添加或填充字段时,用与对象相同的形状使用,便于阅读。
patchesJson6902 处理数组的特定位置时 op·path·value精确定位
foreach 像集装箱一样数量不确定的列表 list收到列表后element指向当前项目

数组是区分这三个标准。Strategic Merge在地图上是自然的,但在数组中很难指定“第几个项目”。JSON Patch是/spec/containers/0/imagePullPolicy虽然可以像这样使用索引,但需要索引是固定的前提。不知道容器有多少个的时候,最终foreach需要浏览列表。

变形中最重要的语法是追加锚点+() 全部。+(imagePullPolicy): IfNotPresent意思是“没有值就放进去,已经有的就不要动”。如果没有这个主播,政策会悄悄覆盖用户指定的值。团队cpu: 500m写着,但政策是200m换成那样的话,那个团队就无法相信自己的宣言了。条件主播()因为是“只有满足这个条件时才适用以下内容”,所以不要感到困惑。

生成规则有两种方式。data是将要制作的内容直接写在政策内的方式,clone是以现有资源作为原件进行复制的方式。像秘密一样在政策文件中写内容是不可以的,这是必须的。clone 是的。因为政策通常进入git。两者不能一起使用。

synchronize: true意思是制作后也会继续观察。如果原件发生变化,就会按照副本进行更改,如果有人用手修复副本,就会恢复原样。关闭的话,制作时只参与一次,之后就不碰了。打开的一方看起来很安全,但不是免费的——监控和使用量会增加到对象命名空间的数量。

权限也不能忘记。后台控制器以最低权限安装,因此对于要创建的资源类型create·update权限必须单独附加到ClusterRole上。如果没有权限,**请求将成功,但只会安静地不创建资源。**这是最难以察觉的失败类型。

在现场相遇的样子

**第一,变形和验证相互冲突的事故。**如果在注入侧卡时不输入限制,那么侧卡就会受到要求限制的验证政策的影响。在注入规格中同时输入限制不是个人喜好,而是要求。

第二,修改现有资源的政策。mutate.targets使用的话,可以修改其他资源,而不是触发的资源。因为不是登录,而是在后台运行,所以需要额外的权限,mutateExistingOnPolicyUpdate打开后,每次修改政策时,现有资源都会一次性被处理。越是强力,范围就越小。

第三,与GitOps的界限。管理数百个命名空间的资源,按照生成规则进行同步管理,GitOps工具做得更好。最重要的是留给git。生成规则有价值的地方是,在需要响应像命名空间生成一样只有在那一刻才能知道的事件的时候。

**第四,这个环境的局限性。**这里背景控制器不运行,所以mutate.targets我生成规则不会创建实际资源。相反kyvernoCLI 在本地评估相同的规则,并显示变形的配置文件和生成的资源。评分是根据政策 YAML 的结构及其执行结果进行的。

下次实习要做的事情

首先在变形实训中添加标签的政策,用额外的锚填充资源基本值的政策,用JSON Patch修改数组项的规则,绕过容器列表的foreach写规则。然后在已经有值的画布上用眼睛确认不覆盖相同的政策后,制作变形前后对比的报告。在接下来的生成练习中,在新的主题命名空间中一次性创建NetworkPolicy、ResourceQuota、LimitRange的入门政策组合,以及为了使该政策实际运行所需的RBAC。