Kubernetes是什麼?
你可能聽說過Kubernetes,但是它到底是什麼? 說真的,你能向你的老闆,同事或者你家的狗(玩笑)解釋清楚這件事情嗎?
Kubenetes是一款由Google開發的開源的容器編排工具(GitHub源碼,https://github.com/kubernetes/kubernetes),在Google已經使用超過15年(譯者註:Kubernetest前身Borg)。但這意味著什麼? 為什麼你需要關心它?
首先我們先簡要說明一下在容器集群中運行應用時會面臨到的一些問題,然後我會告訴你Kubernetes不是什麼。 最後,我將會讓你了解到Kubernetes是如何解決以上這些問題的。
那最後你應該能夠說清楚Kubernetes到底是什麼,這時他們(老闆、同事)應該都會聽你的了吧。
問題
在這節當中,我們將會看到三個當你在集群環境中運行容器應用程序時所會面臨到的問題。 任何(容器集群)解決方案都需要解決這些問題(劇透警告:Kubernetes就是這樣的)。
調度
你已經得到了這個很棒的基於容器的應用程序? 太棒了!現在你需要確保它能夠運行在它應該運行的地方。將應用運行在集群中正確的主機上對你的應用程序而言是很重要的一件事情,因為並不是集群中所有主機都是一樣的。
負載均衡
你的應用程序已經啟動並且成功運行起來了。 好樣的! 現在你需要保證來自客戶端的負載(請求)能夠均勻的分布到集群的節點當中。這對於你的應用程序能夠以最佳的方式利用每台主機的資源來處理客戶端負載是非常重要的。你並不希望當中一些容器正在滿負荷的工作,而另外一些卻處在空閑的狀態。
應用伸縮
這時你的容器已經運行起來了,並且客戶端負載能夠在這些容器當中很好的取得平衡。好極了!而現在你需要能夠啟動一些新的容器來處理負載(當請求高峰時),同時可以清理掉一些(容器)當不再需要這些容器的時候。這很重要,因為這樣才能夠有效的(按需的)處理客戶端請求的峰值。
集群管理和監控
現在你的應用程序已經可以在這個龐大的集群中高效的運行,這時你必須要管理它。 你需要明確知道它們 (集群中的相關服務)都是正常運行的,如部署,彈性伸縮,負載均衡以及容器的健康狀態。當然這並不是一個輕鬆的活兒。
Kubernetes不是什麼?
平台即服務(PaaS)
儘管Kubernetes提供了很多與PaaS相似的功能,如存儲管理,集群日誌以及監控等。 但是Kubernetes並不是一個真正的PaaS,因為它並不提供諸如操作系統之類的組件,或者提供對Docker或者Java的支持工具,然而Kubernetes卻可以和像Bluemix以及OpenShift這樣的PaaS平台產品完美融合。
數據處理框架
Kubernetes毫無疑問是一個非常適合於運行大數據應用的框架,但是它並不能執行或者提供與數據處理的框架(如Apache Spark和Hadoop Map/Reduce)相同的功能。然而Kubernetes與Sprak以及Hadoop都能夠很好的集成(這裡僅舉兩個例子)。
持續集成
Kubernetes並不能像Jenkins或者其它CI工具一樣去構建你的應用程序容器,但(令人驚喜的是)它可以與CI協同工作,以幫助管理應用程序在其生命周期中的更新升級。
解決方案
Kubernetes解決了上面列舉的每一個問題(你不會震驚,是嗎?)。在接下來的部分,我將會講述Kubernetes是如何解決這些問題的,同時也會介紹Kubernetes相關的一些術語(加粗的斜體部分)。
調度
在Kubernetes中Pod是指一組容器,它們一起工作,並且對外提供一個(或者一組)功能,Pod是Kubernetes中的調度的(最小)單元。
當一個pod被創建,調度器將會尋找最適合運行它的Node節點(集群當中的主機)。這個(調度)過程主要由kube-scheduler組件負責完成,它會在集群中選擇備選節點,並且確保其(節點)提供的資源能夠滿足pod中容器的需求。
負載均衡
Kubernetes中Service服務是邏輯上的一組Pod(也被稱為Replicas副本),這組Pod提供了相同的功能,Service服務解除了這些Pod副本與它們客戶端之間的耦合(譯者註:這裡指當客戶端需要訪問Pod所提供的功能或服務時,直接訪問Service即可,而不同知道具體是哪一個Pod實例在提供服務)。
在Kubernetes中,負載均衡在默認情況下是由Service來處理。 對於每一個Service實例你可以提供一個lable selector(標籤選擇器),用於標識(與該服務關聯的)Pod的Replica副本。由於Service服務與Replica副本的物理位置並不相關,因此當客戶端使用它門(Pod副本)所提供的功能時,客戶端既不知道也不關心它們實際運行的位置。調度器使用標籤選擇器為請求選擇正確的服務,並且確保客戶端負載始終均衡。
在某些受支持的雲環境中,比如在IBM Bluemix容器服務, Google Compute Engine(GCE)以及Amazon Web Services(AWS)中,你可以通過指定服務類型為LoadBalancer來將服務配置為雲供應商的負載均衡器。
應用伸縮
Kubernetes的Replication控制器可以確保在集群中始終運行制定數量的Pod副本。
Replication控制器通過確保要運行的副本數量來實現應用程序的擴展伸縮。如果副本數量(可能有一個或者多個副本因為某些原因死掉),Replication控制器則會啟動更多的實例,直到達到目標數量。而如果當存在過多的副本時(在彈性伸縮的情況下),則會自動關閉部分實例。
集群管理和監控
Kubernetest Dashboard是一個基於Web的集群監控UI,包括管理運行中的pod實例,以及查看CPU,內存使用情況等指標。 在默認情況下Kubernetest並不會部署Dashboard,但通過kubectl命令你可以快速部署Dashboard,並開始使用它:
kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml
總結
你應該已經更好的理解Kubernetes所要解決的問題,以及是如何解決的。
好了,當在下一次員工會議時,讓你的老闆和同事驚訝於你對Kubernetes的(深入)了解。如果當你介紹完Kubernetes,他們還沒有打算聽你的,那你可能需要一份新的工作了,但是至少你的狗還是愛你的(玩笑)。
燒腦式Kubernetes實戰訓練營
本次培訓理論結合實踐,主要包括:Kubernetes架構和資源調度原理、Kubernetes DNS與服務發現、基於Kubernetes和Jenkins的持續部署方案 、Kubernetes網路部署實踐、監控、日誌、Kubernetes與雲原生應用、在CentOS中部署Kubernetes集群、Kubernetes中的容器設計模式、開發Kubernetes原生應用步驟介紹等,點擊識別下方二維碼加微信好友了解具體培訓內容。
※如何開發部署Kubernetes Native應用
※DC/OS 1.10:一個面向容器化未來的平台
※為什麼我們要開源自己研發的高性能容器編排系統 Eru2
※功能即服務介紹
※Kubernetes可以為容器編排做點什麼?
TAG:Docker |