第一次認識 Kubernetes(aka. k8s) ,約莫去年夏天時候的事。那時還在一家新創擔任後端工程師,在資源有限的情況下,每個人都須身兼多職,除了開會、討論產品、程式開發、有時還需拜訪客戶。而同時,系統維護以及產品更新也是我們一個需要顧及的課題,如何快速開發客戶的需求、如何確保系統的穩定、以及如何協助團隊之間合作更流暢等,可以說是忙得焦頭爛額。而 Kubernetes 給人最直接的感受是,相較於系統複雜的設定,只需要一名系統兼運維的工程師負責部署與維護、其他人就能更專注在開發上,即便像我們這樣『小』團隊、也是有能力面對複雜的系統設計,這並不是因為我們做了什麼,而是 Kubernetes 已經幫我們做了很多事情。
希望在未來 30 天裡,能每天不間斷的跟大家分享,不只帶大家認識 Kubernetes ,在最後幾天,也能使用 第三方套件Kops 帶著大家操作,在實際應用的環境中,架設 Kubernetes 與使用。這次的學習筆記可以分為以下幾個方向:
介紹與開發環境架設
Kubernetes基礎概念與實作
Kubernetes進階概念與實作
如何管理Kubernetes
(圖片擷取自:kubernetes.io)
如果對於Docker, Container還不太熟悉的讀者,不妨先看過IThome的專欄 Container技術三部曲 ,也許會對什麼是container更加了解
Kubernetes 是一個協助我們自動化部署、擴張以及管理容器應用程式(containerized applications)的系統。相較於需要手動部署每個容器化應用程式(containers)到每台機器上,Kubernetes 可以幫我們做到以下幾件事情:
筆者過去曾參與過大型專案開發,上線產品、除錯、與測試功能都包在一起。每次發布新功能、修改代碼都非常膽戰心驚,哪怕是一個 bug 也會影響整個系統效能。而相較於這樣 單體架構(Monolithic Architecture) 的服務, 微服務(microservices)架構 大大減少程式複雜度,將每個服務依照各自業務需求獨立出來,以 Rest API 互相構通。而 microservices 概念的導入,改善了我們過去所面臨到的問題:
然而,當系統中的微服務越來越多時,管理上也會面臨到很大的挑戰。Kubenetes 的出現讓我們管理這些微服務程式更加方便。
可以跑在任何地方 Can run anywhere
Kubernetes 可以運行在任何地方:不論是私有雲、公有雲(像是 AWS, Google Cloud Platform )、或是混合雲。
高度模組化 High modular
每個服務都被切成一個 container ,不論是要做修改、擴張、甚至將服務遷移到另外一台機器,都可以快速被部署。
活躍的社群 Open source & active community
Kubernetes 是 開源的 ,受到社群的關注度也非常高。
Google的背書 Backed by Google
最初版的 Kubernetes 是由 Google 內部 Borg team 的成員撰寫且現在仍在持續維護。Google 使用他們自身的系統 Borg 管理容器化應用長達十年多。Kubernetes 的目的即是將 Borg 最精華的部分取出來,使得開發者能夠更簡單、直接應用。
筆者也還在學習Kubernetes中,如有對於文章有任何疑問或建議,也歡迎大家留言給我唷 : )