1. 程式人生 > >Docker學習總結(19)——Google開源的容器叢集管理系統Kubernetes介紹

Docker學習總結(19)——Google開源的容器叢集管理系統Kubernetes介紹

Kubernetes是Google開源的容器叢集管理系統。它構建Ddocker技術之上,為容器化的應用提供資源排程、部署執行、服務發現、擴容縮容等整一套功能,本質上可看作是基於容器技術的mini-PaaS平臺。

Kubernetes is an open-source platform for automating deployment, scaling, and operations of application containers across clusters of hosts, providing container-centric infrastructure.

With Kubernetes, you are able to quickly and efficiently respond to customer demand:

Deploy your applications quickly and predictably.

Scale your applications on the fly.

Seamlessly roll out new features.

Optimize use of your hardware by using only the resources you need.

Our goal is to foster an ecosystem of components and tools that relieve the burden of running applications in public and private clouds.

Kubernetes介紹

Kubernetes是Google開源的容器叢集管理系統,其提供應用部署、維護、 擴充套件機制等功能,利用Kubernetes能方便地管理跨機器執行容器化的應用,其主要功能如下:

1) 使用Docker對應用程式包裝(package)、例項化(instantiate)、執行(run)。

2) 以叢集的方式執行、管理跨機器的容器。

3) 解決Docker跨機器容器之間的通訊問題。

4) Kubernetes的自我修復機制使得容器叢集總是執行在使用者期望的狀態。

當前Kubernetes支援GCE、vShpere、CoreOS、OpenShift、Azure等平臺,除此之外,也可以直接執行在物理機上。

Kubernetes以RESTFul形式開放介面,使用者可操作的REST物件有三個:

pod:是Kubernetes最基本的部署排程單元,可以包含container,邏輯上表示某種應用的一個例項。比如一個web站點應用由前端、後端及資料庫構建而成,這三個元件將執行在各自的容器中,那麼我們可以建立包含三個container的pod。

service:是pod的路由代理抽象,用於解決pod之間的服務發現問題。因為pod的執行狀態可動態變化(比如切換機器了、縮容過程中被終止了等),所以訪問端不能以寫死IP的方式去訪問該pod提供的服務。service的引入旨在保證pod的動態變化對訪問端透明,訪問端只需要知道service的地址,由service來提供代理。

replicationController:是pod的複製抽象,用於解決pod的擴容縮容問題。通常,分散式應用為了效能或高可用性的考慮,需要複製多份資源,並且根據負載情況動態伸縮。通過replicationController,我們可以指定一個應用需要幾份複製,Kubernetes將為每份複製建立一個pod,並且保證實際執行pod數量總是與該複製數量相等(例如,當前某個pod宕機時,自動建立新的pod來替換)。

master執行三個元件:

apiserver:作為kubernetes系統的入口,封裝了核心物件的增刪改查操作,以RESTFul介面方式提供給外部客戶和內部元件呼叫。它維護的REST物件將持久化到etcd(一個分散式強一致性的key/value儲存)。

scheduler:負責叢集的資源排程,為新建的pod分配機器。這部分工作分出來變成一個元件,意味著可以很方便地替換成其他的排程器。

controller-manager:負責執行各種控制器,目前有兩類:

endpoint-controller:定期關聯service和pod(關聯資訊由endpoint物件維護),保證service到pod的對映總是最新的。

replication-controller:定期關聯replicationController和pod,保證replicationController定義的複製數量與實際執行pod的數量總是一致的。

slave(稱作minion)執行兩個元件:

kubelet:負責管控docker容器,如啟動/停止、監控執行狀態等。它會定期從etcd獲取分配到本機的pod,並根據pod資訊啟動或停止相應的容器。同時,它也會接收apiserver的HTTP請求,彙報pod的執行狀態。

proxy:負責為pod提供代理。它會定期從etcd獲取所有的service,並根據service資訊建立代理。當某個客戶pod要訪問其他pod時,訪問請求會經過本機proxy做轉發。