【編者的話】 目前很多的容器云平臺(tái)通過Docker及Kubernetes等技術(shù)提供應(yīng)用運(yùn)行平臺(tái),,從而實(shí)現(xiàn)運(yùn)維自動(dòng)化,快速部署應(yīng)用,、彈性伸縮和動(dòng)態(tài)調(diào)整應(yīng)用環(huán)境資源,,提高研發(fā)運(yùn)營效率。 從宏觀到微觀(從抽象到具體)的思路來理解:云計(jì)算→PaaS→ App Engine→XAE[XXX App Engine] (XAE泛指一類應(yīng)用運(yùn)行平臺(tái),,例如GAE,、SAE、BAE等),。 本文簡要介紹了與容器云相關(guān)的幾個(gè)重要概念:PaaS,、App Engine、Docker,、Kubernetes,。 1. PaaS概述1.1. PaaS概念
1.2. IaaS/PaaS/SaaS說明
1.3. PaaS的特點(diǎn)(三種層次)
2. App Engine概述2.1. App Engine概念App Engine是PaaS模式的一種實(shí)現(xiàn)方式,,App Engine將應(yīng)用運(yùn)行所需的 IT 資源和基礎(chǔ)設(shè)施以服務(wù)的方式提供給用戶,包括了中間件服務(wù),、資源管理服務(wù),、彈性調(diào)度服務(wù)、消息服務(wù)等多種服務(wù)形式,。App Engine的目標(biāo)是對(duì)應(yīng)用提供完整生命周期(包括設(shè)計(jì),、開發(fā)、測(cè)試和部署等階段)的支持,,從而減少了用戶在購置和管理應(yīng)用生命周期內(nèi)所必須的軟硬件以及部署應(yīng)用和IT 基礎(chǔ)設(shè)施的成本,,同時(shí)簡化了以上工作的復(fù)雜度。常見的App Engine有:GAE(Google App Engine),,SAE(Sina App Engine),,BAE(Baidu App Engine)。 App Engine利用虛擬化與自動(dòng)化技術(shù)實(shí)現(xiàn)快速搭建部署應(yīng)用運(yùn)行環(huán)境和動(dòng)態(tài)調(diào)整應(yīng)用運(yùn)行時(shí)環(huán)境資源這兩個(gè)目標(biāo),。一方面實(shí)現(xiàn)即時(shí)部署以及快速回收,,降低了環(huán)境搭建時(shí)間,避免了手工配置錯(cuò)誤,,快速重復(fù)搭建環(huán)境,,及時(shí)回收資源,, 減少了低利用率硬件資源的空置,。另一方面,,根據(jù)應(yīng)用運(yùn)行時(shí)的需求對(duì)應(yīng)用環(huán)境進(jìn)行動(dòng)態(tài)調(diào)整,實(shí)現(xiàn)了應(yīng)用平臺(tái)的彈性擴(kuò)展和自優(yōu)化,,減少了非高峰時(shí)硬件資源的空置,。 簡而言之,App Engine主要目標(biāo)是:Easy to maintain(維護(hù)), Easy to scale(擴(kuò)容), Easy to build(構(gòu)建),。 2.2. 架構(gòu)設(shè)計(jì) 2.3. 組成模塊說明
3. 容器云平臺(tái)技術(shù)棧
4. Docker概述更多詳情請(qǐng)參考:Docker整體架構(gòu)圖 4.1. Docker介紹
4.2. Docker的基本概念4.2.1. 鏡像Docker 鏡像就是一個(gè)只讀的模板,,可以把鏡像理解成一個(gè)模子(模具),由模子(鏡像)制作的成品(容器)都是一樣的(除非在生成時(shí)加額外參數(shù)),,修改成品(容器)本身并不會(huì)對(duì)模子(鏡像)產(chǎn)生影響(除非將成品提交成一個(gè)模子),,容器重建時(shí),即由模子(鏡像)重新制作成一個(gè)成品(容器),,與其他由該模子制作成的成品并無區(qū)別,。 例如:一個(gè)鏡像可以包含一個(gè)完整的 ubuntu 操作系統(tǒng)環(huán)境,里面僅安裝了 Apache 或用戶需要的其它應(yīng)用程序,。鏡像可以用來創(chuàng)建 Docker 容器,。Docker 提供了一個(gè)很簡單的機(jī)制來創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來直接使用,。 4.2.2. 容器Docker 利用容器來運(yùn)行應(yīng)用,。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng),、開始,、停止、刪除,。每個(gè)容器都是相互隔離的,、保證安全的平臺(tái)??梢园讶萜骺醋鍪且粋€(gè)簡易版的 Linux 環(huán)境(包括root用戶權(quán)限,、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。 4.2.3. 倉庫倉庫是集中存放鏡像文件的場(chǎng)所,。有時(shí)候會(huì)把倉庫和倉庫注冊(cè)服務(wù)器(Registry)混為一談,,并不嚴(yán)格區(qū)分。實(shí)際上,,倉庫注冊(cè)服務(wù)器上往往存放著多個(gè)倉庫,,每個(gè)倉庫中又包含了多個(gè)鏡像,,每個(gè)鏡像有不同的標(biāo)簽(tag),。 4.3. Docker的優(yōu)勢(shì)
5. Kubernetes概述更多詳情請(qǐng)參考:Kubernetes總架構(gòu)圖 5.1. Kubernetes介紹Kubernetes是Google開源的容器集群管理系統(tǒng)。它構(gòu)建Docker技術(shù)之上,,為容器化的應(yīng)用提供資源調(diào)度,、部署運(yùn)行、服務(wù)發(fā)現(xiàn),、擴(kuò)容縮容等整一套功能,,本質(zhì)上可看作是基于容器技術(shù)的Micro-PaaS平臺(tái),即第三代PaaS的代表性項(xiàng)目,。 5.2. Kubernetes的基本概念5.2.1. PodPod是若干個(gè)相關(guān)容器的組合,,是一個(gè)邏輯概念,Pod包含的容器運(yùn)行在同一個(gè)宿主機(jī)上,這些容器使用相同的網(wǎng)絡(luò)命名空間,、IP地址和端口,,相互之間能通過localhost來發(fā)現(xiàn)和通信,共享一塊存儲(chǔ)卷空間,。在Kubernetes中創(chuàng)建,、調(diào)度和管理的最小單位是Pod。一個(gè)Pod一般只放一個(gè)業(yè)務(wù)容器和一個(gè)用于統(tǒng)一網(wǎng)絡(luò)管理的網(wǎng)絡(luò)容器,。 5.2.2. Replication ControllerReplication Controller是用來控制管理Pod副本(Replica,,或者稱實(shí)例),Replication Controller確保任何時(shí)候Kubernetes集群中有指定數(shù)量的Pod副本在運(yùn)行,,如果少于指定數(shù)量的Pod副本,,Replication Controller會(huì)啟動(dòng)新的Pod副本,反之會(huì)殺死多余的以保證數(shù)量不變,。另外Replication Controller是彈性伸縮,、滾動(dòng)升級(jí)的實(shí)現(xiàn)核心。 5.2.3. ServiceService是真實(shí)應(yīng)用服務(wù)的抽象,,定義了Pod的邏輯集合和訪問這個(gè)Pod集合的策略,,Service將代理Pod對(duì)外表現(xiàn)為一個(gè)單一訪問接口,外部不需要了解后端Pod如何運(yùn)行,,這給擴(kuò)展或維護(hù)帶來很大的好處,,提供了一套簡化的服務(wù)代理和發(fā)現(xiàn)機(jī)制。 5.2.4. LabelLabel是用于區(qū)分Pod,、Service,、Replication Controller的Key/Value鍵值對(duì),實(shí)際上Kubernetes中的任意API對(duì)象都可以通過Label進(jìn)行標(biāo)識(shí),。每個(gè)API對(duì)象可以有多個(gè)Label,,但是每個(gè)Label的Key只能對(duì)應(yīng)一個(gè)Value。Label是Service和Replication Controller運(yùn)行的基礎(chǔ),,它們都通過Label來關(guān)聯(lián)Pod,,相比于強(qiáng)綁定模型,這是一種非常好的松耦合關(guān)系,。 5.2.5. NodeKubernets屬于主從的分布式集群架構(gòu),,Kubernets Node(簡稱為Node,早期版本叫做Minion)運(yùn)行并管理容器,。Node作為Kubernetes的操作單元,,將用來分配給Pod(或者說容器)進(jìn)行綁定,Pod最終運(yùn)行在Node上,,Node可以認(rèn)為是Pod的宿主機(jī),。 5.3. Kubernetes架構(gòu) |
|