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

MOPCON 2020 - Moving From Legacy Infrastructure...

Avatar for Luka Huang 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 的技術體系。

Avatar for Luka Huang

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 為中⼼的雲原⽣架構的過程。 了解如何重構舊架構 聽到了⼀個⼗倍⼯程師的故事