歡迎光臨
每天分享高質量文章

初學者的Kubernetes聖經

 

在開始撰寫本文之前,我想問你幾個問題。 你或你的團隊是否需要使用Kubernetes進行容器編排?你想學習Kubernetes是否很困惑從哪裡開始? 你願意改變你的組織嗎?你想簡化容器軟體編排嗎?然後我想告訴你,這篇文章是所有這些問題的答案。
Kubernetes旨在簡化事情,本文旨在為您簡化Kubernetes!Kubernetes是一個由Google開發的強大的開源系統。它是為在叢集環境中管理容器化應用程式而開發的。Kubernetes已經獲得了普及,並且正在成為在雲上部署軟體的新標準。
學習Kubernetes並不困難(如果導師很好),它提供了強大的能力。學習曲線有點陡峭。因此,讓我們以簡化的方式學習Kubernetes。本文介紹了Kubernetes的基本概念,架構,它是如何解決問題的等。

 

Kubernetes是什麼?

 

實際上Kubernetes本身就是一個用於在多臺機器上執行和協調應用程式的系統。該系統管理容器化應用程式和服務的生命週期。為了管理生命週期,它使用不同的方法來提高可預測性,可伸縮性和高可用性。
Kubernetes使用者可以自由決定應用程式的執行和通訊方式。還允許使用者擴充套件/縮減服務,執行滾動更新,在不同應用程式版本之間切換流量等。Kubernetes還提供用於定義/管理應用程式的不同介面和平臺原語。

 

Kubernetes硬體

 

Kubernetes需要不同型別的硬體。我們需要瞭解的是Kubernetes本身是不需要硬體的,但功能系統需要硬體。
Nodes
Kubernetes中的節點是什麼?Kubernetes中最小的計算單位之一被稱為節點。它是一臺機器,位於一個叢集中。節點不一定需要是物理機器或硬體的一部分。它可以是物理機器或虛擬機器。對於資料中心,節點是物理機器。對於Google Cloud Platform,節點是虛擬機器。目前,我們正在討論Kubernetes的硬體,所以讓我們相應地考慮一下。但是不要將節點限製為“硬體”。
任何機器中總是有一個抽象層。但在這裡,沒有必要擔心機器的特性。實際上,我們可以簡單地將每臺機器視為一組CPU和RAM資源。這些計算機位於群集中,可以根據需要使用其資源。當我們談到Kubernetes,你自然地這樣想!在你自由地利用任何機器資源的那一刻,系統變得無比靈活。現在任何機器都可以成為Kubernetes叢集中的一個節點。
Cluster
我們已經討論了節點,對嗎?他們似乎是小而可愛的處理單位。他們在自己的小房子裡工作。所有這些聽起來都很完美,但它還不是Kubernetes的方式!所以叢集來了。您無需擔心單個節點的狀態,因為它們是叢集的一部分。例如,如果單個節點表現不佳,則應該有人來管理所有這些。此外,叢集是多個節點的集合。將所有節點的資源集中在一起,共同構成一個強大的機器。
叢集是很智慧的。你知道為什麼嗎?當程式部署到叢集上時,它會動態處理分發。簡而言之,它將任務分配給各個節點。在該過程之間,如果新增或刪除任何節點,則叢集會根據需要移動任務。程式員不需要專註於諸如單個機器執行的程式碼之類的東西等等。哦,我還記得一些非常有趣的東西。你還記得星際迷航中的“Borg”嗎?這個名字來自哪裡?Google內部的Kubernetes專案的名字就是這個。
Persistent Volumes
如上所述,程式在叢集上執行並由節點提供支援。但它們不在特定節點上執行。程式動態地執行。因此,需要儲存資訊,並且不能將其隨機儲存在任何檔案系統中。為什麼?例如,程式將資料儲存到檔案中。但是後來,該程式被重新定位到另一個節點。下次程式需要該檔案時,它不會在預期的位置。位置地址已經改變。為瞭解決這個問題,與每個節點相關的傳統本地儲存被認為是用於儲存程式的臨時快取。但是,任何本地儲存的資料都不會持續存在。
那麼誰來永久儲存資料呢?是的,永續性捲來永久儲存它。叢集管理所有節點的CPU和RAM資源。但是,叢集不負責將資料永久儲存在持久捲中。本地驅動器和雲驅動器可以像持久捲一樣附加到叢集。這很類似於將外部驅動器插入叢集。持久捲提供檔案系統。它可以掛載到叢集,而不與任何特定節點進行關聯。
這是Kubernetes的硬體部分。 現在讓我們轉到軟體部分。

 

Kubernetes軟體

 

Kubernetes的整體概念基於軟體。所以這是Kubernetes的主要部分。
Containers
在Kubernetes中,程式執行在Linux容器。這些容器基於預編譯的映象。映象可以部署在Kubernetes上。你知道什麼是容器化嗎?它允許你建立Linux執行環境。
程式及其依賴項打包在單個映象中,併在網上共享。因此,任何人都可以按照需求下載映象並將其部署在基礎設施上。只需一點設定即可輕鬆部署。可以在程式的幫助下建立容器。這使得能夠形成有效的CI/CD管道。
容器能夠處理多個程式。但建議每個容器限制一個行程,因為這有助於排除故障。更新容器很容易,如果它很小,部署也很容易。最好有許多小容器,而不是大容器。
Pod
Kubernetes有一些獨特的特性,其中之一是它不直接執行容器。它將一個或多個容器包裝成一個Pod。 Pod的理念是同一Pod中的任何容器使用相同的資源和相同的本地網路。
好處是容器可以容易地相互通訊。它們是孤立的,但隨時可以通訊。
Pod可以在Kubernetes中複製。例如,應用程式變得流行並且單個Pod無法承受負載。此時,可以根據需要配置Kubernetes以部署Pod的新副本。
但是,只有在重負載期間才需要進行複製。Pod也可以在正常條件下複製。這有助於統一負載平衡和抵抗故障。
Pod能夠容納多個容器,但如果可能的話,應該限製為一個或兩個容器。原因是Pod作為一個單元向上和向下擴充套件。Pod內的容器也必須與Pod一起縮放。在這個階段,單個容器的需求並不重要。另一方面,這會導致資源浪費和昂貴的賬單。
為避免這些,請將Pod限製為少數幾個容器。如果你遇到過“sidecar”這個詞,那就意味著輔助容器。所以有主行程容器,可能有一些輔助容器。
Depoloyment
你已經註意到,Pod是Kubernetes的基本單位。但它們不是直接在群集上啟動的。它們由多個抽象層進行管理,這就是Deployment存在的原因。主要目的是宣告一次執行的副本數。
新增Deployment之後,它會監控Pod的數量。同樣,如果Pod不存在,則Deployment會重新建立它。
有趣的是,透過Deployment,可以無需處理Pod。 同時,透過宣告系統狀態,可以自動管理所有內容。
透過Ingress向成功進軍
我們已經討論了Kubernetes的所有基本概念。使用它們,你可以建立節點、叢集。建立叢集後,就可以在叢集上啟動Pod的部署。但是,你如何允許外部流量到你的應用程式?我們還沒有討論過這個問題。
根據Kubernetes的概念,它提供了Pod和外部世界之間的隔離。要與在Pod中執行的服務進行通訊,需要開啟一個通道。通道是溝通的媒介。它被稱為“Ingress”。
有許多方法可以向叢集新增Ingress。最常見的是透過Ingress Controller或負載均衡器。我們可以討論這兩種方法之間的區別,但目前不需要,因為它太具技術性。
現在,您應該瞭解Ingress對於嘗試Kubernetes非常重要。雖然你其他都做得很對,但是如果你不考慮Ingress,你將無法到達任何地方!

 

Kubernetes如何解決問題?

 

在討論了Kubernetes的部署部分之後,有必要瞭解Kubernetes的重要性。
容器編排和Kubernetes
容器是虛擬機器。它們輕巧,可擴充套件且獨立。容器放在一起需要設定安全策略,限制資源利用率等。如果您的應用程式基礎結構類似於下麵共享的映象,則容器編排是必要的。
它可能是在幾個容器上執行的Nginx/Apache + PHP/Python/Ruby/Node.js應用程式,透過資料庫副本通訊。容器編排(Container orchestration)將幫助您自己管理所有內容。

請考慮你的應用程式不斷增長。例如,你繼續新增更多特性/功能,並且在某個時間點,你意識到它突然變成了巨大的單體應用。
現在,管理龐大的應用程式是不可能的,因為它會佔用太多CPU和RAM。所以你最終決定將應用程式分成更小的塊。他們每個人都有一個特定的任務。現在,你的基礎架構如下所示:

因此,你需要一個帶有佇列系統的快取層,以獲得更好的非同步效能。現在你會發現,存在服務發現,負載平衡,執行狀況檢查,儲存管理,自動擴充套件等挑戰。
在所有這些情況下,誰會來幫助你?是的,容器編排將成為你的救星!原因是容器編排功能非常強大,可以解決大部分挑戰。
那有什麼選擇呢?
主要候選者是Kubernetes,AWS ECS和Docker Swarm。在所有這些中,Kubernetes是最受歡迎的!Kubernetes提供最大的社群。Kubernetes解決了所描述的所有主要問題。它是可移植的,可執行在大多數雲提供商,裸機,混合環境以及所有這些的組合上。此外,它也是可配置和模組化的。它提供自動放置,自動重啟,自動複製和容器自動修複等功能。

 

要點

 

最重要的是,Kubernetes擁有一個活躍的線上社群。這個社群的成員在網上以及在世界主要城市線下聚會。國際會議“KubeCon”已經證明是一個巨大的成功。Kubernetes還有一個官方的Slack小組。Google雲平臺,AWS,Azure,DigitalOcean等主要雲提供商也提供其支援渠道。 你還在等什麼?
學習Kubernetes並不像你想象的那麼困難。我推薦YouTube上Kubernetes影片教程(https://www.youtube.com/playlist?list=PLot-YkcC7wZ9xwMzkzR_EkOrPahSofe5Q)。它提供逐步,詳細的Kubernetes學習。
原文連結:https://www.level-up.one/kubernetes-bible-beginners/

 

 

Kubernetes應用實戰培訓

 

Kubernetes應用實戰培訓將於2018年11月9日在北京開課,3天時間帶你係統學習Kubernetes本次培訓包括:容器特性、映象、網路;Docker特性、架構、元件、概念、Runtime;Docker安全;Docker實踐;Kubernetes架構、核心元件、基本功能;Kubernetes設計理念、架構設計、基本功能、常用物件、設計原則;Kubernetes的實踐、執行時、網路、外掛已經落地經驗;微服務架構、DevOps等,點選下方圖片檢視詳情。

    贊(0)

    分享創造快樂