本文同步刊登於個人技術部落格,有興趣關注更多 Kubernetes、DevOps 相關資源的讀者,請務必追蹤從零開始的軟體工程師之旅,喜歡的話幫我按讚分享、歡迎留言、或是許願想要看的文章。
如果有技術問題也可透過粉絲專頁 討論,技術方面諮詢免錢、需要動手做另計 XD。
然後因為我後面會講 git-flow 工作流程整合,所以我順便做完。
有 review 才有品質可言,code 都要 review,infra 自然也需要 review。IaC + git-flow 是必要的。
使用 git 開新的 branch,例如在 my-project 新增一個 chechia-net-k8s-tw-01
branch 取名
git checkout -b create-new-chechia-net-k8s-tw-01
到 my-project 新增一個 chechia-net-k8s-tw-01,用快速指令 make
cd gcp/my-project
NAME=chechia-net make gke
目前支援的指令有 gke mysql postgresql redis service-account,自己選需要的
使用 git 檢查不一樣的地方(也就是新增的檔案)
git diff
更改其中參數,包括名稱,VPC,版本...等等,不確定的參數可以先留空白,會有預設值
初始化(有加新資源都要跑一次),有錯誤就是 terraform.tf 設定有問題,可以問 devops
terraform init
檢查 tf 檔案內容有無設定錯誤,有錯就是 tf 檔案寫錯,施主請找錯誤的檔案跟行數自行改正
terraform validate
本地試跑,檢視新產生出來的結果,看結果有沒有問題。有 403 錯誤就是 credentials/key.json 權限太低
terraform plan
因為這邊是新增東西,若有出現 destroy 提示,請雙手離開鍵盤,問一下其他人為什麼會本地資料跟 gcp 上不一樣
commit 上傳 gitlab,開 PR 給其他 DevOps / Ops 一起 review
git add .
git status # 檢查一下 commit 的內容
git commit -m "Create new chechia-net-k8s-tw" # git commit 加上註解說明做了什麼
git push
上 gitlab 開 merge request,指派一個 op 跟 一個 devops 幫你一起看有無問題,三個人都看過就 merge 到 master
拉最新的 master,更改的東西應該會出現在 master
git checkout master
git pull
要正式跑了,一樣先 plan 一次
cd gcp/my-project
make plan # make plan = terraform init + validate + plan
要正式跑了,這邊要 apply,一樣找一個 op 一起看著你做
terraform apply
若仔細看過沒有問題 (紅紅的或是很多不是自己的變更),就輸入 yes,雲端就會開始跑
有時候同時新增很多東西,跑到一半會出現 403 錯誤,一些資源做好了,一些資源還沒做,例如 mysql-instance 建好了,可是 mysql-database 跟 mysql-user 回覆 403 失敗,是因為有些資源有先後順序,要先 mysql-instance -> mysql-database,一起坐後面的會卡住。再 apply 一次把剩下的東西補完就好了,一樣 apply 之前要看清楚。
terraform apply
做完再花幾秒鐘,上去 GCP 檢查一下
導入的成功與否,不是最佳實踐,而是各個階段,都給予團隊適合的挑戰與協助
demo 時不是有 makefile,makefile 裡面寫的小腳本跟本身 IaC 沒有關係,提供一些而外的小腳本輔助,可以進一步降低人工操作,提升效率,又增加安全。工具不一定完全適合團隊吧,這時候就需要補足團隊文化跟工具間的落差,潤滑一下。
再說一次,新人做錯,不是他做錯,而是團隊沒有提供他足夠的協助。如何讓新人也能有高產出同時又顧及安全,資深工程師是這邊在資深。提供一些一用性工具是必要的。
又是一個 terraform 的功能
簡單來說,GKE 也許定義了 2 個子物件(ex. Cluster,Node-pool),總共有 30 個參數
能手動改的地方就是能犯錯的地方,黑箱封裝可以保護整體架構,並提高易用性
https://www.terraform.io/intro/vs/index.html