026.[轉] 基於Docker及Kubernetes技術構建容器雲平臺 (PaaS)

【編者的話】數據庫

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

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

 https://blog.csdn.net/huwh_/article/details/75935700後端

 

1. Kubernetes概述

1.1. Kubernetes介紹api

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

 

https://blog.csdn.net/bbwangj/article/details/81776532服務器

Kubernetes是一個輕便的和可擴展的開源平臺,用於管理容器化應用和服務。經過Kubernetes可以進行應用的自動化部署和擴縮容。網絡

在Kubernetes中,會將組成應用的容器組合成一個邏輯單元以更易管理和發現。Kubernetes積累了做爲Google生產環境運行工做負載15年的經驗,並吸取了來自於社區的最佳想法和實踐。架構

Kubernetes通過這幾年的快速發展,造成了一個大的生態環境,Google在2014年將Kubernetes做爲開源項目。Kubernetes的關鍵特性包括:app

  • 自動化裝箱:在不犧牲可用性的條件下,基於容器對資源的要求和約束自動部署容器。同時,爲了提升利用率和節省更多資源,將關鍵和最佳工做量結合在一塊兒。
  • 自愈能力:當容器失敗時,會對容器進行重啓;當所部署的Node節點有問題時,會對容器進行從新部署和從新調度;當容器未經過監控檢查時,會關閉此容器;直到容器正常運行時,纔會對外提供服務。
  • 水平擴容:經過簡單的命令、用戶界面或基於CPU的使用狀況,可以對應用進行擴容和縮容
  • 服務發現和負載均衡:開發者不須要使用額外的服務發現機制,就可以基於Kubernetes進行服務發現和負載均衡
  • 自動發佈和回滾:Kubernetes可以程序化的發佈應用和相關的配置。若是發佈有問題,Kubernetes將可以迴歸發生的變動。
  • 保密和配置管理:在不須要從新構建鏡像的狀況下,能夠部署和更新保密和應用配置。
  • 存儲編排:自動掛接存儲系統,這些存儲系統能夠來自於本地、公共雲提供商(例如:GCP和AWS)、網絡存儲(例如:NFS、iSCSI、Gluster、Ceph、Cinder和Floker等)。

  

1.2. Kubernetes的基本概念


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

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

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

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

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

 

1.3. Kubernetes架構

 

Kubernetes屬於主從分佈式架構,主要由Master Node和Worker Node組成,以及包括客戶端命令行工具kubectl和其它附加項。

  • Master Node:做爲控制節點,對集羣進行調度管理;Master Node由API Server、Scheduler、Cluster State Store和Controller-Manger Server所組成;
  • Worker Node:做爲真正的工做節點,運行業務應用的容器;Worker Node包含kubelet、kube proxy和Container Runtime;
  • kubectl:用於經過命令行與API Server進行交互,而對Kubernetes進行操做,實如今集羣中進行各類資源的增刪改查等操做;

 

1.4. Kubernetes主要由如下幾個核心組件組成:

  • etcd保存了整個集羣的狀態;
  • apiserver提供了資源操做的惟一入口,並提供認證、受權、訪問控制、API註冊和發現等機制;
  • controller manager負責維護集羣的狀態,好比故障檢測、自動擴展、滾動更新等;
  • scheduler負責資源的調度,按照預約的調度策略將Pod調度到相應的機器上;
  • kubelet負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理;
  • Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
  • kube-proxy負責爲Service提供cluster內部的服務發現和負載均衡;

除了核心組件,還有一些推薦的Add-ons (對Kubernetes核心功能的擴展,例如增長網絡和網絡策略等能力):

  • kube-dns負責爲整個集羣提供DNS服務
  • Ingress Controller爲服務提供外網入口
  • Heapster提供資源監控
  • Dashboard提供GUI
  • Federation提供跨可用區的集羣
  • Fluentd-elasticsearch提供集羣日誌採集、存儲與查詢

 

 

1.5  基於Docker及Kubernetes技術的容器雲平臺技術棧

應用載體 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),經過程序運行時對資源的調度觸發相應的鉤子以達到資源追蹤和限制的目的。

 

1.6. Docker概述

1.6.1. Docker介紹

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

 


1.6.2. Docker的基本概念


1.6.3. 鏡像
Docker 鏡像就是一個只讀的模板,能夠把鏡像理解成一個模子(模具),由模子(鏡像)製做的成品(容器)都是同樣的(除非在生成時加額外參數),修改爲品(容器)自己並不會對模子(鏡像)產生影響(除非將成品提交成一個模子),容器重建時,即由模子(鏡像)從新制做成一個成品(容器),與其餘由該模子製做成的成品並沒有區別。

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

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

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

  

1.6.6. Docker的優點

 

  • 容器的快速輕量

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

  • 一次構建,處處運行

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

  • 完整的生態鏈

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

 

 

2. PaaS概述


2.1. PaaS概念

PaaS(Platform as a service),平臺即服務,指將軟件研發的平臺(或業務基礎平臺)做爲一種服務,以SaaS的模式提交給用戶。
PaaS是雲計算服務的其中一種模式,雲計算是一種按使用量付費的模式的服務,相似一種租賃服務,服務能夠是基礎設施計算資源(IaaS),平臺(PaaS),軟件(SaaS)。

租用IT資源的方式來實現業務須要,如同水力、電力資源同樣,計算、存儲、網絡將成爲企業IT運行的一種被使用的資源,無需本身建設,可按需得到。
PaaS的實質是將互聯網的資源服務化爲可編程接口,爲第三方開發者提供有商業價值的資源和服務平臺。

 

簡而言之,IaaS就是賣硬件及計算資源,PaaS就是賣開發、運行環境,SaaS就是賣軟件。

 

2.2. IaaS/PaaS/SaaS說明
 

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

 

 

 

2.3. PaaS的特色(三種層次)

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

 

 

3. App Engine概述 ??


3.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(構建)。

 

3.2. 架構設計

  3.3. 組成模塊說明

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

  

相關文章
相關標籤/搜索