原创-kustomize详细教程

 kustomize

摘抄:kustomize能解决以下的痛点:

  1. 有一个统一的模板可以管理一个项目的 Kubernetes 部署结构。
  2. 有某种方式可以管理不同环境之间微小的差异。
  3. 每次更新基本就是修改镜像的标签然后部署,那么有没有什么简单的办法实现之,而不是让我每次都去修改 YAML 文件。
  4. 一般应用都会存在多套部署环境:开发环境、测试环境、生产环境,多套环境意味着存在多套 K8S 应用资源 YAML。而这么多套 YAML 之间只存在微小配置差异,比如镜像版本不同、Label 不同等,而这些不同环境下的YAML 经常会因为人为疏忽导致配置错误。

简单理解,kustomize识别kustomization.yaml文件,并按照kustomization.yaml中的指示做事,并且kustomization.yaml中可以继续套用kustomization.yaml。

例如:发布一个busybox程序

yaml文件目录:同级:base(基础模板) release(线上正式)canary(线上灰度)

base:

 deploy是deployment,server是configmap,kustomization这样定义:

意思是引用资源deploy和server,另外disableNameSuffixHash: true指的是在生成的从configmap或serect资源后不加入hash后缀,例如true的话,configmap为busybox,如果为false,configmap为busybox-addf333svaf,这样deployment便查找不到名称为busybox的cinfigmap。

---

release:

 这里线上环境需要加上hpa,kustomization这样定义:

 这里namespace可以修改,replicas可以覆盖base中的deployment数量。

---

canary:

 kustomization这样定义:

 这里nameSuffix可以对canary生成的pod添加后缀-canary,同时加上labels。

---

这样配置,便可以以base为模板,在release版本和canary版本自定义差异配置,release增加hpa,canary则添加canary后缀。直接kubectl apply -f kustomization.yaml即可生效。

参考文档:

https://kubectl.docs.kubernetes.io/references/kustomize/

原文地址:https://www.cnblogs.com/normanlin/p/14337292.html