Oh My Iron man post - day six
Oh My Kustomize ! 部署應用的神兵利器 - 2
- 目錄
- Introduce Helm Chart
- 💎 Introduce Kustomize 💎
Kustomize 介紹
他的好用之處在於可以像Docker-compose一樣定義很多個Services
但是Kustomize基於K8s, 可以讓namespace下面跑的pods, ingresses都一目了然
甚至你可以使用Overlays將部署環境(alpha, beta, production..)做區隔
在Mac上面妳可以很簡單的安裝
1 | brew install kustomize |
至於其他的OS可以參考Kustomize的Install.md
就像以下這張圖
kustomization.yaml 就是在下 kustomize build指令時會根據resource去抓你的檔案
通常會有deployment & service兩種檔案
這兩種檔案就是為你建一個Workload, 再幫你Expose對其他pods的端口
也可以再加上Ingress, 但是我這邊選擇第一次apply之後手動加上去
就不用再多弄出一個ingress檔案
👉deployment的寫法可以參考這裡
👉service的寫法則可以參考這裡
而這是我的
💫deployment.yaml
💫service.yaml
💫kustomization.yaml
將它們放在你的專案根目錄底下
例如我的資料夾目錄長這樣
輸入
1 | cd kustomize/base |
kustomize就會生成deployment.yaml還有service.yaml
這時候再輸入
1 | kubectl apply --server=$${Your k8s cluster server} --token=$${Your k8s apply token} --insecure-skip-tls-verify=true --namespace=$${Your k8s name space} -f - |
就可以建立workloads了
如果有使用Rancher就可以看到服務跑起來的狀況
如果你是要更新現有的workloads, 遇到🥕這款問題
這就是創建的pod template hash label跟你Deployment不符合,所以K8s不讓你更新
我之前是直接用Rancher UI去幫我創建workloads,所以就遇到這個問題
解決方法是直接砍掉,用kubectl command創建新的Workloads。
# 💎 整合進Drone1.0 💎 因為我在專案上使用的CI/CD pipeline tool是Drone 最近剛好專案上線忙完比較有空 就順手升級了Drone file
.drone.yml寫法請參考這裡
我的做法是:
- build image
- push to remote image registry
- Replace image by kustomize edit
1 | kustomize edit set image {{your remote image}} |
跑完這個指令就可以把docker image換成最新的
然後再利用Kustomize生成部署文件
Kustomize edit 還可以玩很多請看這裡
最後Deploy時會用到drone secret
Drone secret非常方便,能夠直接以環境變數的方式在跑Pipeline時寫進去
但是也有能夠被print出來的問題
所幸在Drone 可以限制哪個Repository, image可以存取這個Drone secret(怎麼限制)
😈同場加映: Drone 1.0要如何get secret
💎 Kustomize Overlays 💎
部署完之後,就會開始思考環境的事情
這時候就可以善用base/overlays
請看以下這兩張圖:
這是你的檔案目錄會有的樣子:
基本上我第一次看的時候也沒有看得很懂…😂
後來才知道Overlays是把裡面有的Tags附加在base上面
或是把base有的Tags換掉
這是我的檔案樹, 或許會比較清楚
根據環境的不同,Deploy的時候就要到那個環境的資料夾底下下Kustomize指令
這是production的Kustomize
可以看到我根據base資料夾的yaml file還額外requires kafka-consumer-env-prod.yaml
這是production的kafka-consumer-env-prod.yaml
可以看到我這邊把Replicas代換成3
還額外增加了兩個process enviroment variables給這個Workloads
Reference
- https://github.com/kubernetes-sigs/kustomize
- https://kubectl.docs.kubernetes.io/pages/imperative_porcelain/editing_workloads.html
- https://docs.drone.io/user-guide/pipeline/steps/