淺談DevOps 心得及應用工具

Tass
11 min readDec 24, 2019

--

一個從Developer開始,轉戰到DevOps領域的玩家,說說他粗淺的SRE經驗

目的

這裡不先介紹DevOps,不管是有聽過、沒聽過、有碰過、沒碰過的朋友們,都對DevOps有一定的見解(優劣都是主觀),那這邊直接切入重點,想要達到的目的為何。

偷懶

秉持著能坐就不站、能躺就不坐的精神,也就是所謂的『偷懶』精神,多希望一切的一切都有「別人」幫忙做好XD。

那現在有機器「人」可以來幫忙,而世界上大神很多,已經寫了很多好用的服務,供我們這些初進這個領域的新手可以更快上手。

而那些厲害的大神,造就了我們轉職成另外一個職業 — 「程式設定師」。

好吧,不好笑XD,但是DevOps其實就是在開發與維運之間(不是在有與沒有之間,別跑題),這個範圍其實很廣,而且就因為是觸及兩個大領域,所以由誰做都可以,但如果一個團隊能把這個事情拆分明細,並且整合三不管地帶時,會非常實用,抓戰犯也很實用XD。

  • 讓開發人員寫好功能後,不必自己當工人智慧。
  • 讓維運人員架伺服器後,不必自己當工人智慧。
  • 讓測試人員寫好測試後,不必自己當工人智慧。

這些零碎、瑣碎的事情,透過DevOps領域應用來去達成目的。

如何達到?

舉個CI (Continuous Integration) 與CD (Continuous Delivery & Continuous Deployment)這件事情。

我們可以透過CI/CD來去自動整合開發人員與測試人員相互的Unit Test,各自為政,當需要整併時,再藉由寫好的腳本來去「自動觸發」。

那當然也與維運人員整合了部署,甚至還可以發送Email、Slack等資訊到所需要知道詳細內容的高層人員(不管他看不看XD)。

當發現整合了很多事情時,目的就已經達成了。

對!「整合」是非常重要的!
透過整合,達到常人難達到的事情。

例如:我要你一秒內跟100個人講中華民國萬歲,還要三次

行嗎?如果還在工人智慧的,相信達成門檻很高,但如果整合了他們使用「Slack等等」的事宜,而你又剛剛好會寫相關的Code。

恭喜!你可以在一秒內讓100人都知道中華民國萬歲這喜訊(前提是他們要學會收與看這喜訊XD)。

所以整合與被整合的人都要相互配合,已達到整合的目的。

介紹

目的在前面提到,就是偷懶。
那介紹呢?就是整合。

整合

整合所需要且想做的事情,所以這沒有標準答案,看看市面上的用的工具真的太多了,一堆看也看不完,不如Foucs幾個工具來做深度應用吧。
因為不少工具雖然大方向、目的不盡相同,但都會有小部份重疊唷:)
當作互補~

整合這件事情,只要公司、團隊達成了想要達成的目的,解決了想要解決的困難,那就已經贏了!

那作者在這也有自己一套的關於DevOps所跑的流程與期望達到的目的,在這邊供廣大讀者們參考,如有好想法大家都可以提出來討論!大家教學相長!經驗互補:)

GO!

如果有在追隨作者的篇章,會發現作者開了很多戰線,那這裡要慢慢收斂!收斂成想要的形狀XD,才不會歪樓啊~~

  1. Docker 應用
  2. 雲端應用(目前挑GCP,希望之後有空寫寫AWS,aws-vault好用!)
  3. CI/CD應用(配合Gitlab CI、Kubernetes/GKE)
  4. Kubernetes應用(熊熊發現沒有基礎介紹,拿Vault來擋XD)
  5. ChatOps應用(配合Gitlab&Slack)
  6. Monitor應用(這有很多XD)
  7. IaC應用(配合Terraform)

上述七點,可以當作最基本的:)
下面慢慢來說明~
P.S. Git已經當做自帶技能XD

Docker 應用

Docker 必學,覺得所有人都必學XD,因為他太好用。
統一版本為最主要!不然就會聽到,開發環境可以,為啥線上會炸掉XD

這幾天就碰到同事在寫測試,本地Mac跑的順順叫,包Image跑CI/CD就炸裂,所以如有相同環境直接開發兼測試,會省下不少比例的時間!

不用覺得麻煩~因為開發人員多半都會碰到OS,反之維運人員也會碰到Application的應用,多了解彼此也有助於整(加)合(薪)。

還有一點是,在於rollback時非常方便,當更新一版時,發生問題只要部署上一版本(Image)就好XD,而如果其中一個服務掛點,最快方式就是重啟那個服務,那這當然要配合進階應用的Kubernetes囉!
(小聲:呂布治百病)

雲端應用

如果是Developer出生的人,如作者,就很喜歡,因為跟機器及網路非常不熟,哈哈哈XD,那到底要用雲端還是自架,這邊就不介入戰爭了,我覺得都很好,主要要看應用場景,甚至混合雲也很好,那當然也是看規模大小,不過如果要快速上手的朋友,建議直接用雲!

AWS、GCP、AZURE,三大雲都很方便,尤其現在又有IaC,超超超方便XD

試想,如果你今天種田,你只有一甲地,你會自己去買那些什麼播種機、耕耘機、收割機之類的嗎?不會啊!浪費錢(如果很有錢、很有想法,當然另當別論XD),所以才會有這種服務隨用即付的概念~!

CI/CD應用(配合Gitlab CI、Kubernetes/GKE)

CI/CD,算是DevOps裡面的最重要的一環,因為最先提出的想法就是要整合這些疑難雜症,所以這個技能要學好喔!就算沒吃過豬肉也要看過豬跑步XD

CI/CD的工具太多了,如Jenkins、Drone CI、還有各大雲自己推出的,那當然要自己寫也可以。而作者是使用「GitLab CI」,來去達成,直接透過Gitlab就能完成想要完成的事情,不用再額外架設其他的工具,但每個工具都有每個工具實用的地方及特色,所以還是要看場景!觀看個人喜歡,只要用的好,就是大師!

作者之前的文章也有簡單介紹,接下來會更深入CI/CD的使用場景。

例如Template的應用,讓每個專案不需要放那麼長的代碼。顧名思義就是拆Template的公版讓都是這個形狀的流程直接套用!讚吧XD

或是Artifact的應用,讓你自動測試的結果有個儲存空間及即時觀看報告!

或是ChatOps的應用,讓你更快知道更新版的狀況,甚至透過對Slack發訊息,來更版、執行腳本的事情!

甚至透過Approve功能,來讓高層主管們決定何時更版。

這有太多的可以玩,那我之後都會依依來撰寫我想要達成的目標所使用的方式,請大家不要太期待XD。

Kubernetes應用

這個水也很深,與CI/CD不遑多讓,兩個為DevOps的核心XD。

K8S要用的好,也要看Micro Service(微服務)拆的好不好,這邊就需要大家一起坐下來好好討論了。

回神囉XD

像是

  • 要不要應用API Gateway配合Istio
  • DB的權限拆乾不乾淨,要不要配合Vault
  • HPA要設多少
  • 什麼時候要擴展Cluster
  • RBAC怎麼用
  • Log怎麼紀錄
  • 資安….(Configmap、Secret、KMS、Vault、HSM)
  • 相同環境、架構
  • SLAs、SLIs、SLOs

等等等,太多了,因為跟Micro Service牽扯太深,所以需要更多的溝通,所以需要見招拆招XD,打造一個方便又舒適的Debug王國(笑死)。

我曾經看過一個Demo,K8s設定完成後,透過Istio,微服務之間的連線從100ms 降到10ms,真心誇張,這個SLOs應該會成長不錯,然後SLAs可以達到5個9,因為是Google的工程師XDD。

關於SLIs、SLOs、SLAs大家可以去谷歌,這裡就不細講,已經很多人分享~

那關於Kubernetes,這邊開了很多戰線,再一次請大家不要期待。

ChatOps應用(配合Gitlab&Slack)

這也是一個經典題材,如何讓你各位co-worker快速得到最新資訊XD

甚至更快的對維運做任何操作。
在客服人員還沒找上你前,先知(烙)道(跑)。

Monitor應用(這有很多XD)

媽媽媽媽尼特

真得是我們的媽媽,一有事就讓你出事XD。言歸正傳,Monitor的警訊非常重要!不管是對機器的監控,還是對服務的監控,都必須做到牢(勞)牢(勞)牢(勞)。

那作者也介紹了很多工具可以使用,當然還有更多更多工具XD。

  • Grafana
  • Prometheus
  • Kiali
  • Jeager
  • EFK(Log尚未,Issue tracking想合併一起,所以日誌先放在這XD)

工具非常多,那就要看用不用得到囉,只有用得到的才是好工具。
那上面五個是作者常用的,會在之後各開戰線,來依依介紹這些工具及事前的預先防備或是遇到狀況的場景:)

大家不妨想想什麼Support是最讓人受用。

IaC應用(配合Terraform)

IaC真的很好用

如果你要複製一個相同環境,如果使用IaC,可以執行後就去上廁所、找人抬槓,回來後就好了。

如果是以前,你還要去點點點,或是一條指令一條指令輸入,然後還怕中間因為第三者(其實就是自己)改過,不(忘)知(記)改了什麼,導致出來的結果不一樣,然後頭就開始疼了。

火鳳燎原-張遼啊!我的頭開始痛了。

Infrastructure As Code 很重要XD。甚至 Policy As Code。什麼都可以XD

接下來會再介紹一些基礎後,會順便帶到『Atlantis』,在一堆人一起使用時,非常好用,大概吧XD,說不定還是吵架,哈哈哈。

造船之前,要先讓人們對航海充滿幻想

如果你要造一條船,不要只曉得敲鑼打鼓,張羅人們去砍樹鋸木。你要先讓他們對航海充滿幻想。讓員工看到未來、看到願景,告訴他們你為什麼要這樣做,剩下的就讓他們自己去發揮。

這是之前看別人發Netflix的文章,受用無窮。

有夢了,也要有配套措施及實現的可能性:)
那當然夢小,也不用用那麼複雜,自己綁自己XD
老話一句

沒有最萬用的工具,只有最適合的工具!學無止境!

KEEP GOING!

那接下來的時間都會Focus在技術層面,慢慢的往地心深入,挖掘更多好玩的事情,引起大家的興趣XD

那關於新增一個Project、Feature,該如何順利交付、檢討、追蹤,從頭到尾的規劃,希望以後有機會分享XD

如有益請鼓掌讓我知道:)
如喜歡請追隨讓我更有力繼續寫下去XD
我是Tass,專注於DevOps,目前為SRE,下次見!

--

--

Tass

著墨在DevOps領域,也致力於挖掘效能、規劃與修正流程。近期也在學習Go,觀摩各大開源專案XD,期許能參與開源或是上架有趣的服務:)。