iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0

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

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

曬貓


導入工具之後

新工具導入時要做好風險評估,每個人都是第一次用 terraform ,用起來很快很爽的同時也要不斷宣導安全概念,雷在哪裡坑在哪裡。

使用 terraform 的風險

  • 打 DELET API 超快,砍起來很方便,但很多時候方便 = 危險。眼看小明一個手起刀落,談笑間,公有雲灰飛煙滅(XD,通通變不見。現在在講故事很開心,實際發生的話大家都笑不出來,全公司 RD 都跑來維運部門排隊盯著你看,就算修好也要懲處。壓力超大。但小明砍錯東西不是小明的錯,是大環境的錯是 SOP 的錯(XD。認真的,團隊沒有提供 SOP,新人砍錯東西當然是團隊負責。所以我們 SOP 第一行就寫得很清楚。
  • 看見 destroy 就雙手離開鍵盤,直接求救,這樣還能出事嗎
  • 再來,給予特殊的 IAM 權限,例如只能新增不能刪除的權限
  • 進一步導入 git-flow,push、review、PR,讓他連犯錯的機會都沒有
  • 根本還是要給予新人足夠的訓練,然後同時保障公司安全。
    • 給新人過大權限砍錯東西,或是工作流程一堆坑,根本是在誘導新人犯錯,團隊的資深成員要檢討。

逐漸導入

  • 導入的過程不斷檢討跟修改,最後找出適合我們公司的流程
  • 檢討透明,有錯就修 SOP,修工作流程。讓你的工作流程跟工作環境,固若金湯,成員很難在裡面犯錯,這才是 DevOps 在做這的事。
  • 官方建議的最佳實作 https://www.terraform.io/docs/cloud/guides/recommended-practices/index.html
  • 至於我們是如何逐漸導入 IaC 到公司的開發流程中?具體的導入步驟如下

Introduction: IaC

  1. 舊架構保存。先把雲端上已經有的機器,terraform 裡面叫資源,import 成代碼
  2. 檢查舊架構。所有設定都變成代碼了,跟你看程式碼一樣,一拍兩瞪眼沒有任何模稜兩可。整理過程中找出合理跟不合理的設定。有可能會發現一些雷,只是還沒爆炸,也趁機修一修。
  3. 然後,依照這些現行的資源,去整理一份適合公司的環境範本,之後所有的新環境都這這個範本部屬,確定新的環境都有合理的規劃。
  4. 到此,所有新環境都是同一份範本生出來的,環境已經標準化了。不會再有零碎的小錯誤。聽起來超讚,但有時候出錯就是一起全錯,超慘(XD。當然有錯就修範本,修 SOP。同樣的錯永不再犯,不用再修第二次。

Introduction: Git-flow

  1. 然後,導入版本控管,整合 git-flow 的開發流程。寫 SOP,之後所有變更都要
  2. 先把 master 封起來,所有人都不准直接改架構
  3. 開新 branch,commit
  4. 開 PR 大家 review,大家都看過了吼,再 merge 進去,這樣有錯就不是一個人的鍋而是大家一起背鍋(XD。不是拉,review 能大幅降低錯誤,分享團隊經驗加速新人訓練,並且讓所有人 on the same page,不會再有「阿靠這機器誰開的」有人不知情的事情。
  5. 永遠只使用 master 來部屬雲端資源,也是確定所有架構都經過多人 review。

Introduction: Pipeline Automation

  1. 最後,整合 CICD,讓架構的部屬完全自動化。把人工降到最低,同時也把人工錯誤的機率降到最低,當然這個也是沒錯都沒錯,要錯一起錯的狀態(XD,使用時還是要注意。但如果執行的很穩定的話,自動化絕對是值得投資的。因為現在把架構當作產品做,部屬完要測試功能,網路設定是否正確,監控是否完整,proxy 是不是要打看看。這些都整合進 infra 自動 pipeline。部屬完就是測試,然後交付給其他團隊。
  2. 之後就是不斷調整 SOP,跟 CI/CD pipeline。把維運步驟轉成程式維護。

犯錯過一次,永不再犯。這個對於長期團隊經營非常重要,讓經驗跟知識累積,團隊質量才會成長。IaC 在這點幫助很大。

Repo

我使用的原碼都開源在 github 上,因為是真的拿來導入我們公司的架構,保證可以用。阿不能用的話,幫我發 issue 給我,或是你人更好發個 PR 給我都可以(XD。把 repo 拉下來,這邊有 gcp / azure / aws,雖然有三個但我們公司主要是用 gcp,剩下兩個我自己做興趣的。裡面 templates 跟 modules ,但你不用管,我 makefile 都寫好了

  • 我這邊要新增一個 kubernetes 集群
  • 我直接進來我的專案, NAME=my-new-k8s make gke,東西就生出來,具體做的事情就是新增兩個程式區塊,每個區塊描述一個機器
  • git diff 看多了什麼,這邊多一個 k8s 跟多一個 node-pool
  • 然後我 plan,讓 terraform 預測一下試跑結果,我們依據結果好好 review,例如這邊 2 to add 0 to destroy 我的想像是不是真的跟 terraform 計畫一樣。
  • 然後 terraform apply,這邊要看清楚,我們是 2 to add 0 to destroy,如果看到有 destroy 就要雙手離開鍵盤,大家不要衝動,看清楚,因為她真的會上去把東西砍掉

P.S. 專案可以按照公司需求分,資源太多太擠就拆分成幾個資料夾好管理,然後分權責管理,例如館 iam 的、管網路、管應用機器的可以分開來


上一篇
Day 18 - 從零開始導入Terraform,Infrastructure as Code 基本概念與工作流程
下一篇
Day 20 - 從零開始導入Terraform,Infrastructure as Code Terraform 與 Gitflow 工作流程整合
系列文
Kubernetes X DevOps X 從零開始導入工具 X 需求分析*從底層開始研究到懷疑人生的體悟*30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言