基於docker技術的容器雲(PaaS)平臺基本理解

 作者:胡偉煌;原文:http://blog.csdn.net/huwh_/article/details/75935700 

【編者的話】

目前很多的容器雲平臺通過Docker及Kubernetes等技術提供應用運行平臺,從而實現運維自動化,快速部署應用、彈性伸縮和動態調整應用環境資源,提高研發運營效率。

從宏觀到微觀(從抽象到具體)的思路來理解:雲計算→PaaS→ App Engine→XAE[XXX App Engine] (XAE泛指一類應用運行平臺,例如GAE、SAE、BAE等)。

本文簡要介紹了與容器雲相關的幾個重要概念:PaaS、App Engine、Docker、Kubernetes。

1. PaaS概述

1.1. PaaS概念

  1. PaaS(Platform as a service),平臺即服務,指將軟件研發的平臺(或業務基礎平臺)作爲一種服務,以SaaS的模式提交給用戶。
  2. PaaS是雲計算服務的其中一種模式,雲計算是一種按使用量付費的模式的服務,類似一種租賃服務,服務可以是基礎設施計算資源(IaaS),平臺(PaaS),軟件(SaaS)。租用IT資源的方式來實現業務需要,如同水力、電力資源一樣,計算、存儲、網絡將成爲企業IT運行的一種被使用的資源,無需自己建設,可按需獲得。
  3. PaaS的實質是將互聯網的資源服務化爲可編程接口,爲第三方開發者提供有商業價值的資源和服務平臺。簡而言之,IaaS就是賣硬件及計算資源,PaaS就是賣開發、運行環境,SaaS就是賣軟件。

1.2. IaaS/PaaS/SaaS說明

 

類型

說明

比喻

例子

IaaS:Infrastructure-as-a-Service(基礎設施即服務) 提供的服務是計算基礎設施 地皮,需要自己蓋房子 Amazon EC2(亞馬遜彈性雲計算)
PaaS: Platform-as-a-Service(平臺即服務) 提供的服務是軟件研發的平臺或業務基礎平臺 商品房,需要自己裝修 GAE(谷歌開發者平臺)
SaaS: Software-as-a-Service(軟件即服務) 提供的服務是運行在雲計算基礎設施上的應用程序 酒店套房,可以直接入住 谷歌的Gmail郵箱

 

1.3. PaaS的特點(三種層次)

特點

說明

平臺即服務 PaaS提供的服務就是個基礎平臺,一個環境,而不是具體的應用
平臺及服務 不僅提供平臺,還提供對該平臺的技術支持、優化等服務
平臺級服務 “平臺級服務”即強大穩定的平臺和專業的技術支持團隊,保障應用的穩定使用

2. App Engine概述

2.1. App Engine概念

App Engine是PaaS模式的一種實現方式,App Engine將應用運行所需的 IT 資源和基礎設施以服務的方式提供給用戶,包括了中間件服務、資源管理服務、彈性調度服務、消息服務等多種服務形式。App Engine的目標是對應用提供完整生命週期(包括設計、開發、測試和部署等階段)的支持,從而減少了用戶在購置和管理應用生命週期內所必須的軟硬件以及部署應用和IT 基礎設施的成本,同時簡化了以上工作的複雜度。常見的App Engine有:GAE(Google App Engine),SAE(Sina App Engine),BAE(Baidu App Engine)。

App Engine利用虛擬化與自動化技術實現快速搭建部署應用運行環境和動態調整應用運行時環境資源這兩個目標。一方面實現即時部署以及快速回收,降低了環境搭建時間,避免了手工配置錯誤,快速重複搭建環境,及時回收資源, 減少了低利用率硬件資源的空置。另一方面,根據應用運行時的需求對應用環境進行動態調整,實現了應用平臺的彈性擴展和自優化,減少了非高峯時硬件資源的空置。

簡而言之,App Engine主要目標是:Easy to maintain(維護), Easy to scale(擴容), Easy to build(構建)。

2.2. 架構設計

 

2.3. 組成模塊說明

組成模塊

模塊說明

App Router[流量接入層] 接收用戶請求,並轉發到不同的App Runtime。
App Runtime[應用運行層] 應用運行環境,爲各個應用提供基本的運行引擎,從而讓app能夠運行起來。
Services[基礎服務層] 各個通用基礎服務,主要是對主流的服務提供通用的接入,例如數據庫等。
Platform Control[平臺控制層] 整個平臺的控制中心,實現業務調度,彈性擴容、資源審計、集羣管理等相關工作。
Manage System[管理界面層] 提供友好可用的管理操作界面方便平臺管理員來控制管理整個平臺。
Platform Support[平臺支持層] 爲應用提供相關的支持,比如應用監控、問題定位、分佈式日誌重建、統計分析等。
Log Center[日誌中心] 實時收集相關應用及系統的日誌(日誌收集),提供實時計算和分析平臺(日誌處理)。
Code Center[代碼中心] 完成代碼存儲、部署上線相關的工作。

3. 容器雲平臺技術棧

功能組成部分

使用工具

應用載體 Docker
編排工具 Kubernetes
配置管理 Etcd
網絡管理 Flannel
存儲管理 Ceph
底層實現 Linux內核的Namespace[資源隔離]和CGroups[資源控制]
  • Namespace[資源隔離]
    Namespaces機制提供一種資源隔離方案。PID,IPC,Network等系統資源不再是全局性的,而是屬於某個特定的Namespace。每個namespace下的資源對於其他namespace下的資源都是透明,不可見的。
  • CGroups[資源控制]
    CGroup(control group)是將任意進程進行分組化管理的Linux內核功能。CGroup本身是提供將進程進行分組化管理的功能和接口的基礎結構,I/O或內存的分配控制等具體的資源管理功能是通過這個功能來實現的。CGroups可以限制、記錄、隔離進程組所使用的物理資源(包括:CPU、memory、IO等),爲容器實現虛擬化提供了基本保證。CGroups本質是內核附加在程序上的一系列鉤子(hooks),通過程序運行時對資源的調度觸發相應的鉤子以達到資源追蹤和限制的目的。

4. Docker概述

更多詳情請參考:Docker整體架構圖

4.1. Docker介紹

  1. Docker - Build, Ship, and Run Any App, Anywhere
  2. Docker是一種Linux容器工具集,它是爲“構建(Build)、交付(Ship)和運行(Run)”分佈式應用而設計的。
  3. Docker相當於把應用以及應用所依賴的環境完完整整地打成了一個包,這個包拿到哪裏都能原生運行。因此可以在開發、測試、運維中保證環境的一致性。
  4. Docker的本質:Docker=LXC(Namespace+CGroups)+Docker Images,即在Linux內核的Namespace[資源隔離]和CGroups[資源控制]技術的基礎上通過鏡像管理機制來實現輕量化設計。

4.2. Docker的基本概念

4.2.1. 鏡像

Docker 鏡像就是一個只讀的模板,可以把鏡像理解成一個模子(模具),由模子(鏡像)製作的成品(容器)都是一樣的(除非在生成時加額外參數),修改成品(容器)本身並不會對模子(鏡像)產生影響(除非將成品提交成一個模子),容器重建時,即由模子(鏡像)重新製作成一個成品(容器),與其他由該模子製作成的成品並無區別。

例如:一個鏡像可以包含一個完整的 ubuntu 操作系統環境,裏面僅安裝了 Apache 或用戶需要的其它應用程序。鏡像可以用來創建 Docker 容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶可以直接從其他人那裏下載一個已經做好的鏡像來直接使用。

4.2.2. 容器

Docker 利用容器來運行應用。容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。

4.2.3. 倉庫

倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)。

4.3. Docker的優勢

 

  1. 容器的快速輕量

    容器的啓動,停止和銷燬都是以秒或毫秒爲單位的,並且相比傳統的虛擬化技術,使用容器在CPU、內存,網絡IO等資源上的性能損耗都有同樣水平甚至更優的表現。

  2. 一次構建,到處運行

    當將容器固化成鏡像後,就可以非常快速地加載到任何環境中部署運行。而構建出來的鏡像打包了應用運行所需的程序、依賴和運行環境, 這是一個完整可用的應用集裝箱,在任何環境下都能保證環境一致性。

  3. 完整的生態鏈

    容器技術並不是Docker首創,但是以往的容器實現只關注於如何運行,而Docker站在巨人的肩膀上進行整合和創新,特別是Docker鏡像的設計,完美地解決了容器從構建、交付到運行,提供了完整的生態鏈支持。

5. Kubernetes概述

更多詳情請參考:Kubernetes總架構圖

5.1. Kubernetes介紹

Kubernetes是Google開源的容器集羣管理系統。它構建Docker技術之上,爲容器化的應用提供資源調度、部署運行、服務發現、擴容縮容等整一套功能,本質上可看作是基於容器技術的Micro-PaaS平臺,即第三代PaaS的代表性項目。

5.2. Kubernetes的基本概念

5.2.1. Pod

Pod是若干個相關容器的組合,是一個邏輯概念,Pod包含的容器運行在同一個宿主機上,這些容器使用相同的網絡命名空間、IP地址和端口,相互之間能通過localhost來發現和通信,共享一塊存儲卷空間。在Kubernetes中創建、調度和管理的最小單位是Pod。一個Pod一般只放一個業務容器和一個用於統一網絡管理的網絡容器。

5.2.2. Replication Controller

Replication Controller是用來控制管理Pod副本(Replica,或者稱實例),Replication Controller確保任何時候Kubernetes集羣中有指定數量的Pod副本在運行,如果少於指定數量的Pod副本,Replication Controller會啓動新的Pod副本,反之會殺死多餘的以保證數量不變。另外Replication Controller是彈性伸縮、滾動升級的實現核心。

5.2.3. Service

Service是真實應用服務的抽象,定義了Pod的邏輯集合和訪問這個Pod集合的策略,Service將代理Pod對外表現爲一個單一訪問接口,外部不需要了解後端Pod如何運行,這給擴展或維護帶來很大的好處,提供了一套簡化的服務代理和發現機制。

5.2.4. Label

Label是用於區分Pod、Service、Replication Controller的Key/Value鍵值對,實際上Kubernetes中的任意API對象都可以通過Label進行標識。每個API對象可以有多個Label,但是每個Label的Key只能對應一個Value。Label是Service和Replication Controller運行的基礎,它們都通過Label來關聯Pod,相比於強綁定模型,這是一種非常好的鬆耦合關係。

5.2.5. Node

Kubernets屬於主從的分佈式集羣架構,Kubernets Node(簡稱爲Node,早期版本叫做Minion)運行並管理容器。Node作爲Kubernetes的操作單元,將用來分配給Pod(或者說容器)進行綁定,Pod最終運行在Node上,Node可以認爲是Pod的宿主機。

5.3. Kubernetes架構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章