首先來看一張圖[註1]:
這是 The DevOps Handbook 裡面的一張表格,講述從 1970 年來以降,軟體開發的趨勢, cycle time 越來越短,部署的標的從大型主機,遷移至以雲為主的環境,尤其是公有雲。這樣的技術轉移,用來形容 web app 是比較適切的, web 產品可以接受快速迭代、快速失敗,萬一線上的代碼出問題,甚至可以快速回滾至上一個安全的版本。並不是所有的軟體開發工作都可以適用短平快的開發組織,有許多軟體的開發流程需要更加嚴謹,例如用在醫療器材、交通工具上的即時系統,如果出錯,可能意味生命、財產的損失,也很難立刻回收硬體進行軟體更新。
然而 DevOps 的概念不限於處理 Web App 為主的開發,以 DevOps Handbook 這本書為例,就大量借用了 Toyota Kata(豐田流、豐田經驗)成功轉型的案例,解釋精益製造(Lean Manufacturing)的概念,怎麼使用在軟體開發上。應該說,DevOps 是一種消除產品開發至交付中各種障礙的心法,不限於產業,見下圖[註2]。
而我們這個系列,會使用 DevOps 中的觀念,輔以程式碼的實例,來作雲原生 (Cloud Native) Web App 開發的 Demo。更具體的說,我們來寫一個簡單的 3 tier Web App ,見下圖[註3],希望這個 Demo 能涵蓋下列的 feature
簡單來說,我們希望可以結合理論與實作,每個大章節都先講一點理論再來點實作,把 DevOps 中的重要觀念走一遍,也將常用的工具順過一次流程,網路上比較多各自獨立的工具使用指引,而我們希望指出這些工具在實務上使用的位置、可替換的選項,以及技術棧選擇的考量。雖然常常在用這些工具,但要從頭寫一個範例感覺也是不小的工程…希望能撐完 30 天 >///<
管線的左邊:開發的部分
Day 1. Overview
Day 2. 不可變基礎設施與容器
Day 3. Web App 架構的套路與自由度
Day 4. Docker 三劍客
Day 5. 用 Ansible 控制一切
Day 6. 容器化的 Reverse Proxy 部署與設置 - 以 Nginx 為例
Day 7. 容器化的 Database 部署與管理 - 以 PostgreSQL 為例
Day 8. 容器化的 API Gateway 開發與部署 - 以 Flask 為例
Day 9. 容器化的 Frontend Interface 開發與部署 - 以 React 為例
Day 10. 實際部署 Docker 至 AWS
管線的右邊:部署的部分
Day 11. Kubernetes 基本概念與 Bootstrapping 方式介紹
Day 12. 使用 Kubeadm 安裝 Kubernetes
Day 13. Kubernetes POD 基本操作
Day 14. Kubernetes Network 基本操作
Day 15. Kubernetes Volume 基本操作
Day 16. Kubernetes Configmap 基本操作
Day 17. 改寫 Ansible 腳本並實際部署至 Kubernetes
Day 18. 使用 Helm 管理 Kubernetes 套件
Day 19. 使用 Prometheus 監控 Kubernetes
Day 20. 撰寫 Kubernetes Operator
管線它本人
Day 21. The Three Ways - Flow
Day 22. The Three Ways - Feedback
Day 23. The Three Ways - Continous Learning and Experimentation
Day 24. 推與拉
Day 25. 持續集成 - 以 Jenkins 為例
Day 26. 持續交付 - 以 Spinnaker 為例
Day 27. 與管線溝通 - 以 GitOps 為例
Day 28. 實戰經驗分享 I
Day 29. 實戰經驗分享 II
Day 30. 回顧(Recap) 與 Take-Away