使用最小配置生成动态清单重复次数

nmanifest的Python项目详细描述


这是怎么回事?在

这是为了解决这样一个问题,即需要动态地改变/重复每个生成的清单的数量 在其他方面非常类似的开发、qa、登台、生产环境。在

环境通常是一组工作负载,例如微服务、防病毒、ocr和其他组件 能够横向扩展并服务于整个环境。 但是,如果我们在一个给定的环境中还想运行一组重复n次的“客户安装”集呢。在

例如,我们可能需要运行遗留应用程序服务器(HelmRelease)的N个实例,因此我们需要定义它 helmrelease只显示一次,然后只为每个需要的实例指定较小的配置差异。在

使用Kustomize解决这一问题并不容易,因为kustomization基于 使用特定(种类、名称空间、名称)坐标和用于定义 我们的N组“客户安装”我们必须改变名称部分的坐标为每一个。在

为fluxd管理gitrepo

回购结构用于初始空状态

└── releases
    |—— .flux.yaml 
└── environments
└── basetemplates

releases文件夹被配置为fluxcd--git path=releases参数 以及--manifest generation=true

environments目录将填充子目录,这些子目录定义了 工作量。每个子目录包含根模板文件夹的可编辑副本, 通过编辑这些模板,它将直接影响所有的生成器 基于这些模板。在

basetemplates文件夹用于基本模板,编辑这些模板只会影响新模板 实例,因为没有直接从基模板生成任何内容

填充基本模板

basetemplates是包含模板文件集的目录,例如kubernetes yaml manifest文件 用于jinja2模板处理

例如

^{pr2}$

在“环境”文件夹中创建新的工作负载配置

环境实例在environments文件夹中表示为子文件夹,包含

  1. 基本模板的快照副本。E、 {cdg}
  2. 文件夹generatorconfigs,其中包含.yaml文件和generatorconfig清单
└── environments
    └── NAME
        └── templates
            └── SET1
                |── template1.yaml
                |── template2.yaml
            └── SET2
                |── template1.yaml
                |── template2.yaml
        └── generatorconfigs
            |── SET1-a-generatorconfig.yaml
            |── SET2-b-generatorconfig.yaml
            |── SET2-c-generatorconfig.yaml
            |── SET2-d-generatorconfig.yaml

generatorconfig格式

格式基本上只是属性,意味着纯粹的配置,没有太多的结构结构。在

generatorconfigversion: 1
templateset: SET2
id: set2-a
import_substitution_parameters:
  - set1
substitution_parameters:
  NAME1: VALUE
  NAME2: VALUE
overrides:
  - manifest:
      kind: MFKIND
      namespace: MFNAMESPACE
      name: MFNAME 
    values:
      PATH: OVERRIDE

有两个强制性部分:

  • generatorconfigversion:必须为1
  • templateset:指向环境模板集目录的指针,例如SET2

其余部分可选:

  • id:是可选的,仅当其他generatorconfig需要引用此配置时才有用
  • import_substitution_parameters:要从中导入替换参数的generatorconfig ID列表。 可以重写每个导入的参数
  • 替换参数:模板的jinja2模板化参数
  • 重写:使用它覆盖生成的清单中的任何内容。该部分是一个包含以下内容的列表:
    • manifest:如果模板集中只有1个清单,则可选,否则manifest(kind、namespace、name)坐标
    • 值:yaml重写jinja2生成的清单中的任何内容

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Scanner对象作为构造函数参数传递给UserInterface类   spring未能启动bean“subtocolWebSocketHandler”;嵌套的例外是java。lang.IllegalArgumentException:没有处理程序   Java EE应用程序中后台服务的多线程Java线程(设置守护进程和优先级)?   java Pull to refresh返回列表的第一个位置   无法将comparator类转换为java。可比的   java将json从servlet传递到dojo   JavaHibernate:将子类实例转换为超类实例   java警告调用servlet类时非法反射访问   java静态变量值   java@Entity和@embeddeble之间有什么区别   java将作业配置导入公共作业配置类(注释配置)   sql公共表表达式(以values语句开头)在java中给出错误   java在ImageJ中使用ImageProcessor   java PostgreSQL executeBatch()会随着时间的推移而变慢   java在安卓中以表格形式排列sqllite表数据?   java中SVG的swing定制呈现   java删除与另一个实体映射的实体   java何时/如何添加ListView适配器,使用back按钮恢复它?(片段)   java为什么IBinder和Binder之间的类型转换不是非法的?   java在方法参数列表中使用ArrayList或List