iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0

本文同步刊登於個人技術部落格,有興趣關注更多 Kubernetes、DevOps 相關資源的讀者,請務必追蹤從零開始的軟體工程師之旅,喜歡的話幫我按讚分享、歡迎留言、或是許願想要看的文章。

如果有技術問題也可透過粉絲專頁 討論,技術方面諮詢免錢、需要動手做另計 XD。

曬貓


Terraform + Git-flow

然後因為我後面會講 git-flow 工作流程整合,所以我順便做完。

  • 新的變更 commit ,plan 但是還沒 apply。我要求所有新的 commit 推上去
  • 發 PR,其他團隊成員來幫我 review。PR 用的 template ,描述一下新架構的目的,變更的地方,有沒有雷,然後幾個 checklist 檢查
  • 其他隊員 review 都 lgtm 才 merge 回 master
  • apply 永遠在最新的 master 上 apply,確保所有推到雲端的架構都是多人 review 過的。

有 review 才有品質可言,code 都要 review,infra 自然也需要 review。IaC + git-flow 是必要的。

完整的 SOP 我放在這裡

SOP 範例: 新增資源到雲端

使用 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 檢查一下

工具 + 流程

導入的成功與否,不是最佳實踐,而是各個階段,都給予團隊適合的挑戰與協助

  • Git-flow SOP 範例
    • 中文版,超長,上面操作過了,這邊不細講,大家自己上去看
    • 但如果團隊是第一次導入 terraform,我強烈建議要有類似的東西
  • Provide template

demo 時不是有 makefile,makefile 裡面寫的小腳本跟本身 IaC 沒有關係,提供一些而外的小腳本輔助,可以進一步降低人工操作,提升效率,又增加安全。工具不一定完全適合團隊吧,這時候就需要補足團隊文化跟工具間的落差,潤滑一下。

再說一次,新人做錯,不是他做錯,而是團隊沒有提供他足夠的協助。如何讓新人也能有高產出同時又顧及安全,資深工程師是這邊在資深。提供一些一用性工具是必要的。

  • Terraform module

又是一個 terraform 的功能

簡單來說,GKE 也許定義了 2 個子物件(ex. Cluster,Node-pool),總共有 30 個參數

  • 你其實不需要那麼多參數 XD
  • 建立一個 my-gke-module,一個物件,5 個必填參數,5 個有預設值的選填參數
  • 也許寫錯的機會只剩 5 個,也許工時只需要 5/30
  • 需求變更就改 module,讓你的操作物件本身就是符合實際需求的

能手動改的地方就是能犯錯的地方,黑箱封裝可以保護整體架構,並提高易用性

其他

  • 上面是 IaC 在我們公司的流程
  • 我們選 terraformㄨ
  • 如果是用 terraform 以外的工具,可以參考流程,也許殊途同歸

https://www.terraform.io/intro/vs/index.html


上一篇
Day 19 - 從零開始導入Terraform,Infrastructure as Code 導入步驟與注意事項
下一篇
Day 21 - 從零開始導入Terraform,Infrastructure as Code 導入後的優點,感想與心得
系列文
Kubernetes X DevOps X 從零開始導入工具 X 需求分析*從底層開始研究到懷疑人生的體悟*30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言