當前位置:
首頁 > 最新 > 聚焦Kubernetes

聚焦Kubernetes

在容器化的世界很容易忽視年輕的Kubernetes。鑒於其爆炸性的流行趨勢,你可能已經忘了此軟體出現還不到四年。那些使用該軟體的人實際上已經走在尖端技術的前沿。藉助容器技術,通過應用程序執行細節抽象化使得軟體開發更為簡化。與虛擬機相比,模塊化容器化的部署使得IT團隊大大減少開銷並降低操作的複雜性。

2017年10月17日,Docker創始人、CTOSolomon Hykes在丹麥哥本哈根舉行的DockerCon大會上宣布,將擴大其Docker平台並選擇積極擁抱容器編排對手Kubernetes,並且工程師們已經可以註冊測試版。這意味著Docker客戶及開發人員將同時可以選擇使用Kubernetes與DockerSwarm進行容器工作負載的編排。

Kubernetes 介紹

Kubernetes (又被稱作Kube或K8s)是由Google開發的一個強大的平台,可以在集群環境中管理容器化應用程序。本文我們將聚焦體系結構,研究其所能解決的問題,並理解Kube模型用於處理容器化部署和擴展的組件。


Kube幫助解決客戶在生產、開發和測試環境中,管理和編排容器時所面臨的邏輯挑戰,並通過聲明代碼防止大量的錯誤產生。

如果沒有Kube或DockerSwam的容器編排功能,團隊需要在每次發布新feature時手動更新數百個容器,從而使部署既緩慢又容易出錯。Kube是一個開源的容器編排平台,用於大規模管理分散式容器化應用程序。使用Kube,團隊可以自動配置應用程序,管理他們的生命周期,以及維護和跟蹤伺服器集群中的資源分配。所有容器化應用程序通常在Rkt或docker上運行。除了快速自動化發布和部署,如果出現任何狀況,Kube還為應用程序基礎架構提供了一個「自愈」環境。當出現該情況時,平台將對所觀察到的群集狀態與用戶期望的狀態做協調。假如工作node掛了,所有的pod將會被重新安排到可用的node上。

Benefit

擁有Kubernetes,團隊可以:

l自動並立即按需縮放集群(在不需要時縮小規模以節省資源和金錢)。

l可在內部任何地方運行。無論是在公共雲或私有雲(例如AWS或Google)中,或混合配置。

l由於其輕便性,可在裸機、本地開發和雲環境中不斷部署。

l更短的調試時間,更多地交付業務價值。

l獨立和自動化的操作和開發。

l快速迭代部署周期,提高系統彈性。


Kube的學習曲線被認為比Docker稍微廣泛一些。因此要有效地使用Kube,就需要了解它的組件及其在系統架構中的功能。

Pods

Kubernetes的官方文章稱「Pods是最小的可部署計算單元,可以在Kubernetes中創建和管理。」在Docker,這些單元是單一的容器。然而在Kubernetes中pods可以包含更多容器。一個pod中的所有容器都好像聯合運行在單一主機上,共享Linux命名空間、IP地址和埠空間。作為一組或多個容器,pod通過標準進程間通信(IPC)命名空間進行通信,並訪問相同的共享卷。By itself, a pod is ephemeral and will not be rescheduled to a new node if it dies.單靠自身,Pod並非持久化。如果它掛了,將不會重新安排到一個新的node上。但可以通過保持一個或多個pod的實例與副本集一起活動來克服這一問題。後面會做詳述。

Labels & Selectors

label標籤是可以分配給對象(包括pod或node)的價值屬性。他們定義區分對用戶有意義及合適的對象特性。label可以在創建對象時分配,也可以稍後貼上或修改。使用label可以識別、組織、選擇對象子集並在開發渠道的多種維度創建順序。發布啟動(beta,穩定)環境類型(dev,prod)和或體系結構層(前端/後端)等信息都可以在label中識別。label和selector作為核心方式協同工作以管理對象和組。Kubernetes selector有兩種類型:基於等式的selector和基於集合的selector。基於等式的selector使用key-value pairs根據基本相等(或不相等)對對象、組進行排序。基於集合的selector按值集排序key。

Replica Sets

如前所述,如果node出現故障,則運行其上面的pod將不會被重新安排。Replica sets克服了Kube中的這一問題,確保在任何給定時間都有指定數量的pod實例(或副本集)一起運行。因此為了保持您的pod活著,請確保至少有一個replicate sets分配給它。除了管理單一pod,Replica sets還可以管理並擴展到由一個共同label分類的pod組。由於在部署過程中大部分功能都是自動化的,因此您無需進行主動管理,但還是應該對系統功能有所了解以便更好地管理您的應用程序。

Networking

在Kube內部,networking就是連接網路端點(pod)。由於不同的IP地址,不同pod中的容器必須通過另一種方式與IPC通信。 Kubernetesnetworking解決了這種跨node節點的pod與pod連接,以及實現服務發現和pod與pod的負載平衡。pod安全性是通過網路劃分限制訪問而實現的。網路策略定義了如何允許pod子集相互之間以及與其他網路端點進行交互。配置基於每個命名空間進行。

Services

Kubernetesservice是一種抽象,它根據標籤勾勒出了pod的邏輯子集(參見上文)。Kube的服務根據其所分配的服務來識別和利用pod組的label selector。通過服務來管理端點的方便性完全取決於label。除了服務發現功能之外,服務的這種抽象還為集群中的pod進一步提供內部負載平衡。Kubernetes提供了兩種查找服務的主要方法。在節點上運行pod時,kubelet(節點代理)根據預定義為每個活動服務添加環境變數。另一種方法是使用內置DNS服務。DNS伺服器監視所有新服務的Kubernetes API,並為每個服務分配一組DNS記錄。當DNS在整個集群中啟用時,所有的pod都應該能夠自動完成服務的名稱解析。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 金藍海 的精彩文章:

TAG:金藍海 |