Openshift是一個開源容器云平臺,是一個基于主流的容器技術Docker和K8s構建的云平臺。Openshift底層以Docker作為容器引擎驅動,以K8s作為容器編排引擎組件,并提供了開發(fā)語言,中間件,DevOps自動化流程工具和web console用戶界面等元素,提供了一套完整的基于容器的應用云平臺。
Red Hat是Openshift的最大貢獻者。
Openshift包括社區(qū)版和企業(yè)版
社區(qū)版: Openshift Origin
企業(yè)版: Openshift Online/Openshift Enterprise
【重要概念】
system:admin為默認的集群管理員,擁有最高的權限。該用戶沒有密碼,登陸依賴于證書密鑰。
Service Account 是 Openshift 中專門供程序和組件使用的賬號。不同的用戶或組關聯(lián)不同的角色,同時關聯(lián)不同的SCC(security context constriant)安全上下文
【架構】
自底而上包括幾個層次:基礎架構層,容器引擎層,容器編排層,PaaS服務層,界面及工具層。
基礎架構層:為Openshift平臺的運行提供基礎的運行環(huán)境。Openshift支持運行在物理機,虛擬機(kvm,vmware,virtual box等),公有云(阿里云,AWS等),私有云,混合云上。
容器引擎層:以當前主流的Docker作為容器引擎。
容器編排層:以Google的k8s進行容器編排。
PaaS服務層:容器云平臺的最終目的是為上層應用服務提供支持,提高開發(fā),測試,部署,運維的速度和效率。用戶在Openshift云平臺上可以快速的獲取和部署一個數(shù)據(jù)庫,緩存等。
界面及工具層:Openshift提供了多種用戶的接入渠道:Web控制臺,命令行,RestFul接口等
【核心組件】
1. Master節(jié)點
主控節(jié)點。集群內的管理組件都運行在Master節(jié)點上。Master節(jié)點負責集群的配置管理,維護集群的狀態(tài)。Master節(jié)點運行的服務組件:
API Server:負責提供Web console和RESTful API。集群內所有節(jié)點都會訪問API Server,更新節(jié)點的狀態(tài)及其上的容器狀態(tài)。
數(shù)據(jù)源(Data store):集群內所有狀態(tài)信息都會存儲在后端的一個etcd的分布式數(shù)據(jù)庫中。
調度控制器(Scheduler):負責按用戶輸入的要求尋找合適的計算節(jié)點。
復制控制器(Replication Controller):負責監(jiān)控當前容器實例的數(shù)量和用戶部署指定的數(shù)量是否匹配,若有容器異常退出,復制控制器發(fā)現(xiàn)實際數(shù)少于部署定義數(shù),從而觸發(fā)部署新的實例。
2. Node節(jié)點
計算節(jié)點。接收Master節(jié)點的指令,運行和維護Docker容器。Master節(jié)點也可以是Node節(jié)點,只是在一般環(huán)境中,其運行容器的功能是關閉的。
3. Project:在k8s中使用命名空間來分隔資源。同一個命名空間中,某一個對象的名稱在其分類中必須唯一,但在不同命名空間中的對象則可以同名。Openshift集成了k8s命名空間的概念,而且在其上定義了Project對象的概念,每一個Project會和一個namespace相關聯(lián)。
4. Pod:在Openshift中的容器都會Pod包裹,即容器都運行在Pod內部,一個Pod可以運行一個或多個容器,絕大多少情況下,一個Pod內部運行一個容器。
5. Service:由于容器是一個非持久化的對象,所有對容器的修改再容器銷毀后都會丟失,而且每個容器的IP地址會不斷變化。k8s提供了Service組件,當部署某個應用時,會創(chuàng)建一個Service對象,該對象與一個或多個Pod關聯(lián),同時每個Service分配一個相對恒定的IP,通過訪問該IP及相應的端口,請求就會轉發(fā)到對應Pod端口。除了可通過IP,也可以通過域名訪問Service,格式為:..svc.cluster.local
6. Router和Route:Service提供了一個通往后端Pod集群的穩(wěn)定入口,但是Service的IP地址只是集群內部的節(jié)點和容器可見。外部需通過Router(路由器)來轉發(fā)。Router組件是Openshift集群中一個重要的組件,它是外界訪問集群內容器應用的入口。用戶可以創(chuàng)建Route(路由規(guī)則)對象,一個Route會與一個Service關聯(lián),并綁定一個域名。Route規(guī)則被Router加載。當集群外部的請求通過指定域名訪問應用時,域名被解析并指向Router所在的計算機節(jié)點上,Router獲取該請求,然后根據(jù)Route規(guī)則定義轉發(fā)給與這個域名對應的Service后端所關聯(lián)的Pod容器實例。上述轉發(fā)流程類似于nginx。Router負責將集群外的請求轉發(fā)到集群的容器,Service則負責把來自集群內部的請求轉發(fā)到指定的容器中。
7. Persistent Storage:容器默認是非持久化的,所有的修改在容器銷毀時都會丟失。Docker提供了持久化卷掛載的能力,Openshift除了提供持久化卷掛載的能力,還提供了一種持久化供給模型即PV(Persistent Volume)和PVC(Persistent Volume Claim)。在PV和PVC模型中,集群管理員會創(chuàng)建大量不同大小和不同特性的PV。用戶在部署應用時顯示的聲明對持久化的需求,創(chuàng)建PVC,在PVC中定義所需要的存儲大小,訪問方式。Openshift集群會自動尋找符合要求的PV與PVC自動對接。
8. Registry:Openshift內部的鏡像倉庫,主要用于存放內置的S2I構建流程所產生的鏡像。
9. S2I:Source to Image,負責將應用源碼構建成鏡像。
步驟:
1)用戶輸入源代碼倉庫的地址
2)選擇S2I構建的基礎鏡像
3)觸發(fā)構建
4)S2I構建執(zhí)行器從指定的源碼倉庫地址下載代碼
5)S2I構建執(zhí)行器實例化Builder鏡像,并將代碼注入到Builder鏡像
6)S2I構建執(zhí)行器按照預定義的邏輯執(zhí)行源代碼的編譯,構建
7)生成新的鏡像
8)S2I構建執(zhí)行器將新鏡像Push到Registry
9)更新相關的Image Stream信息
【核心流程】
1)創(chuàng)建應用:用戶通過web控制臺或oc命令創(chuàng)建應用,Openshift平臺根據(jù)用戶輸入的源碼地址和Builder鏡像,生成構建配置Builder config和部署配置Deployment config,Service,Route等。
2)觸發(fā)構建
3)實例化構建:平臺根據(jù)Builder config實例化Builder對象,下載代碼,并將代碼注入到Builder對象,執(zhí)行編譯,構建
4)生成新鏡像并Push到Registry
5)更新相關的Image Stream信息
6)觸發(fā)部署:當Image Stream更新后,觸發(fā)平臺部署鏡像
7)實例化鏡像部署:平臺根據(jù)Deployment config實例化部署,生成Deploy對象
8)生成Replication Controller
9)部署容器:通過Replication Controller,平臺將pod及容器部署到各個節(jié)點上
10)用戶訪問:用戶通過瀏覽器訪問Route對象中定義的應用域名
11)請求處理并返回:請求到達Router組件后,通過Route轉發(fā)給相關聯(lián)的Service,最終到對應的容器實例。
參考:開源容器云Openshift