天天看點

雲原生必備知識: Kubernetes

所屬技術領域:

雲原生

| 名詞定義 |

Kubernetes是一個開源的,用于管理雲平台中多個主機上的容器化的應用,Kubernetes的目标是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。

Kubernetes一個核心的特點就是能夠自主的管理容器來保證雲平台中的容器按照使用者的期望狀态運作着(比如使用者想讓apache一直運作,使用者不需要關心怎麼去做,Kubernetes會自動去監控,然後去重新開機,建立,總之,讓apache一直提供服務),管理者可以加載一個微型服務,讓規劃器來找到合适的位置,同時,Kubernetes也系統提升工具以及人性化方面,讓使用者能夠友善的部署自己的應用(就像canary deployments)。

現在Kubernetes着重于不間斷的服務狀态(比如web伺服器或者緩存伺服器)和原生雲平台應用(Nosql),在不久的将來會支援各種生産雲平台中的各種服務,例如,分批,工作流,以及傳統資料庫。

在Kubenetes中,所有的容器均在Pod中運作,一個Pod可以承載一個或者多個相關的容器,在後邊的案例中,同一個Pod中的容器會部署在同一個實體機器上并且能夠共享資源。一個Pod也可以包含O個或者多個磁盤卷組(volumes),這些卷組将會以目錄的形式提供給一個容器,或者被所有Pod中的容器共享,對于使用者建立的每個Pod,系統會自動選擇那個健康并且有足夠容量的機器,然後建立類似容器的容器,當容器建立失敗的時候,容器會被node agent自動的重新開機,這個node agent叫kubelet,但是,如果是Pod失敗或者機器,它不會自動的轉移并且啟動,除非使用者定義了 replication controller。

使用者可以自己建立并管理Pod,Kubernetes将這些操作簡化為兩個操作:基于相同的Pod配置檔案部署多個Pod複制品;建立可替代的Pod當一個Pod挂了或者機器挂了的時候。而Kubernetes API中負責來重新啟動,遷移等行為的部分叫做“replication controller”,它根據一個模闆生成了一個Pod,然後系統就根據使用者的需求建立了許多備援,這些備援的Pod組成了一個整個應用,或者服務,或者服務中的一層。一旦一個Pod被建立,系統就會不停的監控Pod的健康情況以及Pod所在主機的健康情況,如果這個Pod因為軟體原因挂掉了或者所在的機器挂掉了,replication controller 會自動在一個健康的機器上建立一個一摸一樣的Pod,來維持原來的Pod備援狀态不變,一個應用的多個Pod可以共享一個機器。

我們經常需要選中一組Pod,例如,我們要限制一組Pod的某些操作,或者查詢某組Pod的狀态,作為Kubernetes的基本機制,使用者可以給Kubernetes Api中的任何對象貼上一組key:value的标簽,然後,我們就可以通過标簽來選擇一組相關的Kubernetes Api對象,然後去執行一些特定的操作,每個資源額外擁有一組(很多) keys 和 values,然後外部的工具可以使用這些keys和vlues值進行對象的檢索,這些Map叫做annotations(注釋)。

Kubernetes支援一種特殊的網絡模型,Kubernetes建立了一個位址空間,并且不動态的配置設定端口,它可以允許使用者選擇任何想使用的端口,為了實作這個功能,它為每個Pod配置設定IP位址。

現代網際網路應用一般都會包含多層服務構成,比如web前台空間與用來存儲鍵值對的記憶體伺服器以及對應的存儲服務,為了更好的服務于這樣的架構,Kubernetes提供了服務的抽象,并提供了固定的IP位址和DNS名稱,而這些與一系列Pod進行動态關聯,這些都通過之前提到的标簽進行關聯,是以我們可以關聯任何我們想關聯的Pod,當一個Pod中的容器通路這個位址的時候,這個請求會被轉發到本地代理(kube proxy),每台機器上均有一個本地代理,然後被轉發到相應的後端容器。Kubernetes通過一種輪訓機制選擇相應的後端容器,這些動态的Pod被替換的時候,Kube proxy時刻追蹤着,是以,服務的 IP位址(dns名稱),從來不變。

所有Kubernetes中的資源,比如Pod,都通過一個叫URI的東西來區分,這個URI有一個UID,URI的重要組成部分是:對象的類型(比如pod),對象的名字,對象的命名空間,對于特殊的對象類型,在同一個命名空間内,所有的名字都是不同的,在對象隻提供名稱,不提供命名空間的情況下,這種情況是假定是預設的命名空間。UID是時間和空間上的唯一。

| 發展曆程 |

Kubernetes作為容器叢集管理工具,于2015年7月22日疊代到 v 1.0并正式對外公布,這意味着這個開源容器編排系統可以正式在生産環境使用。與此同時,谷歌聯合Linux基金會及其他合作夥伴共同成立了CNCF基金會( Cloud Native Computing Foundation),并将Kuberentes作為首個編入CNCF管理體系的開源項目,助力容器技術生态的發展進步。Kubernetes項目凝結了Google過去十年間在生産環境的經驗和教訓,從Borg的多任務Alloc資源塊到Kubernetes的多副本Pod,從Borg的Cell叢集管理,到Kubernetes設計理念中的聯邦叢集,在Docker等進階引擎帶動容器技術興起和大衆化的同時,為容器叢集管理提供獨了到見解和新思路。

| 技術特點 |

•可移植: 支援公有雲,私有雲,混合雲,多重雲(multi-cloud)

•可擴充: 子產品化, 插件化, 可挂載, 可組合

•自動化: 自動部署,自動重新開機,自動複制,自動伸縮/擴充

• Kubernetes是Google 2014年建立管理的,是Google 10多年大規模容器管理技術Borg的開源版本。

## 資料來源:

https://www.jianshu.com/p/198eb16b1902