kustomize
摘抄:kustomize能解決以下的痛點:
- 有一個統一的模板可以管理一個項目的 Kubernetes 部署結構。
- 有某種方式可以管理不同環境之間微小的差異。
- 每次更新基本就是修改鏡像的標簽然后部署,那么有沒有什么簡單的辦法實現之,而不是讓我每次都去修改 YAML 文件。
-
一般應用都會存在多套部署環境:開發環境、測試環境、生產環境,多套環境意味着存在多套 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/