zkcrescent 的木屋

kustomize

kustomize

根据 Declarative Application Management(可定义的应用管理工具) 的思想实现的管理 K8S 集群的一套最佳实践, 音同 customize

主要特点

  • 可做任何类型的配置,包括定制的,现成的,有状态的,无状态的
  • 支持普遍性的自定义(应该翻译成符合标准的全部自定义),记录每次创建的版本
  • 暴露原生的 k8s API,而不出隐藏掉
  • 平滑的版本控制和迁移,支持审计检查
  • 同其他工具联合时能够感觉像是一体的( 与其他工具的联合时契合度较高 )
  • 回避模板中的交叉重复和领域中语言特殊性等等问题(解释:模板重复,语言限制)

DAM

The central idea is that a toolbox of composable configuration tools should manipulate configuration data in the form of declarative API resource specifications, which serve as a declarative data model, not express configuration as code or some other representation that is restrictive, non-standard, and/or difficult to manipulate.

配置的有无状态应该是只配置文件是否依赖其他,比如istio依赖envoy,没有看到详细说明
暴露 k8s API是指 kustomize 在更新配置的时候先生成一份 k8s 的标准配置文件然后 apply

使用方式

kustomization + patches + resources

基础: kustomization ( kustomization.yaml )

应用部署的集合定义,包括 label, resource, configMap, secret 等,相当于程序中的 command 部分(包括 main 和 subcommand),提供最终目标(需要一个什么样的东西)

组件:patches

相当于写代码的某个package,可以被 kustomization 引用, 用于完善内容, 比如可以定义 deplomentreplias, deploment 中的 containers

资源: resources

定义基础的需求类型,比如 deploment, ds, pod, service 等等 k8s 的相关资源定义, 可以被 kustomization 引用,相当于程序 cmd 的不同参数

示例

K+R

K+P+R

这篇文章的来由

因为考虑做阿里云(基于K8S)产线的一些针对中小企业的产品,然后从市面上寻找了几个知名的管理工具,包括了heroku,open shift, kustomize, helm,然后我主要负责 kustomize 相关的情况了解和以及做一些总结用于会议交流,于是有了这篇文章