Kubernetes初步瞭解及入門
2)為什麼要選擇容器?
當容器技術這麼熱門的時候有是不是在疑惑為什麼要選用這樣的技術呢?
傳統的應用部署方式是通過作業系統的包管理器來安裝應用。然而這樣做的一個劣勢在於,它把應用的執行,配置,庫和生存週期和機器的作業系統糾纏在一起。當然你可以通過建立虛機映象的方式來獲得可以預期的前滾和回滾操作,然而虛擬機器太重量級並且不可移植。
新的方式是通過部署基於作業系統級別虛擬化的容器進行虛擬化而非通過硬體來進行虛擬化。這些容器之間相互隔離:它們有自己的檔案系統,然而它們也無法看到彼此之間的程序,並且它們之間的計算資源也是有界限的。相較於虛擬機器容器也更容易部署,並且因為它們是和底層設施和機器檔案系統解耦的,它們可以在雲和不同版本的作業系統間進行遷移。
因為容器小而快,一個應用可以被打包進一個容器映像。正是應用與容器映象間一對一的關係解鎖了容器的很多優點:
- 在build或者release 的階段(而非部署階段)可以建立不變的容器映象,因為每個應用都用和其他的應用棧相組合,也不依賴於生產環境基礎設施。這使得從研發到生產過程中可以採用持續的環境。
- 容器比虛機要更加透明,這更便於監控和管理。尤其是因為視窗的程序的生命週期是被基礎設施直接管理而不是被容器中的程序管理器隱藏起來管理。
- 因為一個容器包含一個應用,這讓對容器的管理等同於對應用部署的管理。
總結一下容器的優點:
- 敏捷地應用建立和部署:相較於VM增加了容器映象建立的效率。
- 持續開發,整合和部署:通過快速的回滾操作(因為映象的穩定性)提供可靠的經常的容器映象的建立和部署。
- 開發和執行相分離:在build或者release 的階段(而非部署階段),使得應用和基礎設施解耦。
- 開發,測試和生產環境的持續:在筆記本上可以像在雲中一樣的執行。
- 雲和作業系統版本的可移植性:可以執行在 Ubuntu, RHEL, CoreOS, on-prem, Google Container Engine,和任何其它的執行環境中。
- 應用為中心的管理:提升了虛擬化的層次,從虛擬硬體上執行作業系統的抽象到作業系統中應用邏輯資源的虛擬。
- 鬆耦合,分散式,彈性,自由的微服務:應用被打散成更小的,獨立的小碎片並且可以動態地部署和管理——而非是一個在用途單一的龐大機器中執行的一個臃腫堆疊中。
- 資源隔離:可以預測的應用效能。
- 資源使用:高效。
Kubernetes可以安排物理機或者虛擬機器上執行的應用容器的使用。
當然它不只可以做這些。
為了充分發揮它的潛能,你需要剪斷物理機虛擬機器的束縛。
然而,一旦特定的容器不再侷限於特定的主機,主機為中心的基礎設施便不再適用了:組管理,負載均衡,自動擴充套件等。你需要的是以容器為中心的基礎設施。而這正是Kubernetes所提供的。
Kubernetes可以滿足很多執行環境中應用的通用的需求,比如:
- 程序協同,利用複合應用保證應用和容器一對一的模型。
- 儲存系統掛載
- 分發金鑰
- 應用健康檢測
- 應用例項複製
- 水平自動擴充套件
- 命名和發現
- 負載均衡
- 滾動更新
- 資源監控
- 日誌訪問
- 自檢和除錯
- 識別和認證
這為PaaS提供了IaaS層的便利,提供了基礎設施提供者間的可移植性。
詳細內容,參見使用者指南.
(4)Kubernetes為什麼又是怎麼樣的一個平臺呢?儘管Kubernetes提供了很多功能,總有一些新的場景可以從這些功能中獲益。特定的應用工作流可以提高開發者的開發速度。最新可以接受的組合常常需要強勁的大規模的自動化。這也是為什麼Kubernetes構建以來為什麼要做一個讓應用的部署、擴充套件和管理更便捷的生態平臺的原因。
Labels讓使用者可以隨心所欲地組織自己的資源。 Annotations讓使用者可以給資源新增定製化的資訊以充分使用自己的工作流,提供一種簡單的管理工具。
這樣的設計也讓很多其它系統可以構建於Kubernetes之上。
(5)Kubernetes不是什麼:Kubernetes不是一個傳統的,包羅一切的PaaS系統。我們保留使用者的選擇,這一點非常重要。
- Kubernetes不限制支援應用的種類。它不限制應用框架,或者支援的執行時語言,也不去區分 “apps” 或者“services”。 Kubernetes致力於支援不同負載應用,包括有狀態、無狀態、資料處理型別的應用。只要這個應用可以在容器裡執行,那麼它就可以在Kubernetes上很多地執行。
- Kubernetes不提供中間鍵(如message buses),資料處理框架(如Spark),資料庫(如Mysql),或者叢集儲存系統(如Ceph)。但這些應用都可以運行於Kubernetes。
- Kubernetes沒有一個點選即可用的應用市場。
- Kubernetes不部署原始碼不編譯應用。持續整合的 (CI)工作流方面,不同的使用者有不同的需求和偏好,因此,我們提供分層的 CI工作流,但並不定義它應該怎麼做。
- Kubernetes允許使用者選擇自己的日誌、監控和報警系統。
- Kubernetes不提供可理解的應用配置語言(e.g., jsonnet).
- Kubernetes不提供或者任何綜合的機器配置,維護,管理或者自愈系統。
另一方面,大量的Paas系統都可以執行在Kubernetes上,比如Openshift, Deis, 和Gondor。你可以構建自己的Paas平臺,整合CI。
因為Kubernetes執行在應用而非硬體層面,它提供了普通的Paas平臺提供的一些通用功能,比如部署,擴充套件,負載均衡,日誌,監控等。然而,Kubernetes並非一個龐然大物,這些功能老師可選的。
另外,Kubernetes不僅僅是一個“編排系統”;它消彌了編排的需要。“編排”的定義是指執行一個預定的工作流:先做A,之後B,然後C。相反地,Kubernetes是由一系列獨立的、可組合的驅使當前狀態走向預想狀態的控制程序組成的。怎麼樣從A到C並不重要:達到目的就好。當然也是需要中心控制的;方法更像排舞的過程。這讓這個系統更加好用更加強大、健壯、 有彈性且可擴充套件。
(6)Kubernetes是什麼意思呢? K8s?Kubernetes起源於希臘語, 是“舵手”或者“領航員”的意思,是“管理者”和“控制論”的根源。 K8s是把用8代替8個字元“ubernete”而成的縮寫。