Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MOPCON 2020 - Moving From Legacy Infrastructure...

Luka Huang
October 25, 2020

MOPCON 2020 - Moving From Legacy Infrastructure to Kubernetes

從遺留架構動身前往 Kubernetes 的世界
https://mopcon.org/2020/schedule/2020027
本次演講近一年的實戰心得與矽谷 10X 工程師並肩作戰的過程,完整解析將舊架構遷移至 Kubernetes 的過程。

- 遺留程式碼大家很常聽到,那麼什麼是遺留架構呢?
- 遺留架構如何讓我們的生產力低落?
- K8S 如何解決這些痛點?
- 重構架構該考慮些什麼?
- 我們進入 K8S 的世界了,是不是真的這麼好?

如果你對時下最夯的 Kubernetes 有興趣,一定要來聽一下!筆者會以淺顯易懂的方式,開發者的角度,帶你走過 K8S 的技術體系。

Luka Huang

October 25, 2020
Tweet

More Decks by Luka Huang

Other Decks in Programming

Transcript

  1. Self Intro • Luka Huang • Senior Backend Developer works

    for Splashtop • Medium - Luka Huang
  2. Self Intro • Luka Huang • Senior Backend Developer works

    for Splashtop • Medium - Luka Huang • A Curator of StarBugs Weekly
  3. Self Intro • Luka Huang • Senior Backend Developer works

    for Splashtop • Medium - Luka Huang • A Curator of StarBugs Weekly • Creator of CodeShiba https://www.facebook.com/CodeShiba
  4. Career 1. Web Developer 
 ( Ruby on Rails +

    Vue.js) 2. Backend Developer 3. Interested in DevOps 
 ( Terraform / Docker / Kubernetes … etc)
  5. Outline • Why we move to Kubernetes ? • Introduction

    to Kubernetes & IAC • Move legacy infrastructure to K8s • Legacy infrastructure vs Legacy Code • Talking about 10x Engineer • Conclustion
  6. Clone the entire system 2 * Infrastructure Layer (EC2、VPC、RDS …

    etc) 2 * Application Layer(API, Web, Worker, … etc ) 2 * Testing by QA The new system is 90% the same as original system.
  7. Helm ⽤法有點像是你想要在 ubuntu 系統下安裝 vim 輸入 apt install vim 即可安裝完成

    那在 K8S 的世界,你想要安裝⼀個 wordpress 只要輸入 helm install my-wordpress wordpress
 (指令為簡略⽰意版)
  8. init.d init.d - 伺服器上藏了多少初始化⼤密寶 (shell script) ? 服務啟動腳本通通放置於 /etc/init.d/ 底下

    init 是開機後核⼼主動呼叫 根據使⽤者⾃訂的執⾏等級 (runlevel) 來喚醒不同的服務
  9. system.d 伺服器上藏了多少服務型⼤密寶 (shell script) ? 系統初始化需要做的事情非常多 每⼀步驟被 system.d 抽象成⼀個單元 service

    - 代表⼀個後台 process,例如: mysqld, httpd, … etc IUUQGFMJYMJODPNMJOVYJOJU&#$&$&"%#&"#&#%&##$&##"&&MJOVY&%&"#&$JOJU&###&##&'#$$&"$"$&"&TZTUFNE
  10. Nginx / Apache Config init.d - 伺服器上藏了多少初始化⼤密寶 (shell script) ?

    system.d - 伺服器上藏了多少服務型⼤密寶 (shell script) ? monit.d - 伺服器上藏了多少監控型⼤密寶 (shell script) ? Nginx / Apache 的 config 做了哪些設定︖
  11. K8S 對應的元件 init.d - 初始化⼤密寶 => entrypoint system.d - 服務型⼤密寶

    => docker / entrypoint monit.d - 監控型⼤密寶 => 運⽤ K8S 對 pod 的監控機制
  12. K8S 對應的元件 init.d - 初始化⼤密寶 => entrypoint system.d - 服務型⼤密寶

    => docker / entrypoint monit.d - 監控型⼤密寶 => 運⽤ K8S 對 pod 的監控機制 Nginx / Apache 的 config => ingress 的設定
  13. K8S - pod 的⽣生命週期 readiness probe - 確保 pod 就緒才把流量導進來

    liveness probe - 確保 pod 還是在正常⼯作,否則 kubernetes 會終⽌這個 pod 並重啟。
  14. IAC - Infrastructure as Code Terraform - 把所有的基礎設施寫成程式碼,例如:EC2、S3、 VPC ...

    etc,使⽤ Terraform 來撰寫。 Docker - 把安裝在機器中的東西也寫成程式碼,例如:⽤ apt install nginx 之類的套件,可以⽤ Ansible / Docker 來寫。 Kubernetes - 能夠將所有機器變成⼀個⼤平台。透過修改 K8S 的設定檔即可完成所需架構。
  15. 實現 IAC 的步驟 實現 IAC 的第⼀步 - ⽤ Docker 建⽴

    test image 實現 IAC 的第⼆步 - ⽤ Ansible 寫出 Staging 伺服器配置 實現 IAC 的第三步 - 設計新的架構來對應舊架構 實現 IAC 的最終⽬標 - 所有的改動,都使⽤ Terrafrom + Helm
  16. Testing on Infrastructure 1. End-to-End testing => 功能正確 2. Nightly

    build => 修改後的架構可以提供正常服務 3. Load Testing => 修改後的架構可以承載⼤流量 4. 這些都整合在 CI / CD 裡⾯
  17. Refactor Infrastructure • 我們可以藉由不斷的重構,讓 IAC 的 Code 變得越來 越直覺。 •

    以後需要變動架構的時候,才不會覺得很痛苦,不知 道怎麼改起
  18. Conclusion 了解 K8S、Helm、Terraform … 等等技術名詞的意義。 了解傳統作法與新的 Terraform + K8S 技術體系的差異

    了解頗析⼀個舊架構,遷移至 K8S 為中⼼的雲原⽣架構的過程。 了解如何重構舊架構 聽到了⼀個⼗倍⼯程師的故事