OpenShift是RedHat出品的PAAS平臺岳掐。OpenShift做為PAAS平臺最大的特點是它是完全容器化的PAAS平臺魔吐,底層封裝了Docker和Kubernetes航缀,上層暴露了對開發(fā)者友好的接口來完成對應用程序的集成序调、部署芳誓、彈性伸縮等任務余舶。
Docker提供了對打包和創(chuàng)建基于Linux的輕量級容器的抽象。而Kubernetes提供了多主機集群管理和Docker容器編排兆沙。OpenShift基于Docker和Kubernetes加入了新的功能:
- 源代碼管理欧芽、構(gòu)建和部署
- 在系統(tǒng)中集成鏡像的管理
- 按需擴展的應用程序管理
- 在大型開發(fā)者組織中進行團隊管理和用戶追蹤
OpenShift直接提供支持的應用程序鏡像有:
OpenShift直接提供支持的數(shù)據(jù)庫鏡像有:
除此之外,OpenShift還讓你通過一鍵點擊便生成相應的應用葛圃,比如幾秒之內(nèi)搭建好一個Jenkins服務千扔。包括以下:
OpenShift架構(gòu)概覽
從上圖可以看出憎妙,OpenShift的典型用戶分為兩種,開發(fā)人員和運維人員曲楚。開發(fā)人員可以通過現(xiàn)有的代碼管理工具和持續(xù)集成厘唾、交付工具利用OpenShift完成對應用程序的打包、部署龙誊、擴容操作抚垃。而運維人員可以利用現(xiàn)有的自動化工具實現(xiàn)對OpenShift平臺的維護。
OpenShift中的Kubernetes用來管理跨宿主機(或容器)的容器化應用程序趟大,并提供部署鹤树、維護和應用程序擴容機制。對于一個Kubernetes集群來說逊朽,它包括一個或多個master以及一組node罕伯。
Master主機托管了API服務器、controller manager服務器以及etcd實例叽讳。Master管理Kubernetes集群中的節(jié)點并控制運行在節(jié)點上的pod追他。
Node則提供了容器的運行時環(huán)境。Kubernetes節(jié)點中的每個node會運行受Master管理的服務岛蚤,當然也包括Docker邑狸、Kubelet及serverice proxy服務。node可以為云機器涤妒、物理系統(tǒng)或者虛擬系統(tǒng)单雾。Kubelet用來更新node上的運行的容器狀態(tài)。Service Proxy用于運行一個簡單的網(wǎng)絡代理届腐,來反映定義在node的API中的服務铁坎,從而使node可以跨后端進行簡單的TCP和UDP流轉(zhuǎn)發(fā)。
OpenShift架設要求
如果想自己架設OpenShift平臺作為商業(yè)用途犁苏,必須要獲取OpenShift Enterprise的付費訂閱硬萍。目前OpenShift Enterprise的最新版本為3.6版。對于Master和Node節(jié)點的系統(tǒng)要求如下围详。
Master:
- 物理或虛擬機朴乖,或者運行于公有云或私有云之上的實例
- 基礎操作系統(tǒng)為Red Hat企業(yè)版Linux(RHEL)7.1,并包含最小的安裝選項
- 2核CPU
- 最小8GB內(nèi)存
- 最小30GB硬盤空間
Node:
- 物理或虛擬機助赞,或者運行于公有云或私有云之上的實例
- 基礎操作系統(tǒng)為Red Hat企業(yè)版Linux(RHEL)7.1买羞,并包含最小的安裝選項
- Docker 1.6.2及以上版本
- 1核CPU
- 最小8GB內(nèi)存
- 最小15GB硬盤空間
- 另外最小15GB的未分配空間,需要通過docker-storage-setup進行配置
環(huán)境要求:
- 需要一個DNS zone來解析OpenShift router的IP地址雹食。比如*.cloudapps.example.com. 300 IN A 192.168.133.2
- Master和Node之間必須要有共享的網(wǎng)絡畜普,兩者之間可以互相通訊。
- 需要一個Git Server和能夠訪問該Server的賬號群叶。
AWS中部署OpenShift平臺
下圖是一個在AWS中的OpenShift集群的示例吃挑。
{% img /images/refarch-ocp-on-aws-v3.png 700 %}
Master節(jié)點:包含3個Master實例钝荡,實現(xiàn)高可用,上面運行etcd舶衬、通過一個external load balancer向外暴露服務埠通。
Infra Node: 由三個實例組成,這三個實例用來運行支撐OpenShift集群服務的一系列容器逛犹。
App Node:用于運行應用程序容器的實例端辱,可以按需進行擴展。
Bastion:用于限制對集群中實例的ssh訪問虽画,增強安全性舞蔽。
存儲:OpenShift使用EBS作為實例的文件系統(tǒng)并用于持久化容器的存儲;另外還使用S3這個對象存儲服務作為OpenShift registry的存儲狸捕。
ELB:總共有三個.一個用來在集群外訪問OpenShift API喷鸽、OpenShift console众雷。一個在集群內(nèi)訪問OpenShift API灸拍。另一個用來訪問通過route暴露的部署在集群中的應用程序服務。最后通過AWS的Route53來管理DNS砾省。
部署OpenShift集群的三個階段
在AWS中部署OpenShift集群包括三個階段:
- 第一階段:在AWS中設置好基礎設施
- 第二階段: 在AWS上部署OpenShift Container平臺
- 第三階段: 部署后的環(huán)境檢查
關(guān)于整個部署活動絕大多數(shù)都是可以自動化的鸡岗。RedHat提供了一個GitHub repo:openshift-ansible-contrib。openshift-ansible-contrib提供了將OpenShift集群部署到不同的Cloud供應商的解決方案编兄,當然也包括了AWS轩性。里面包含了相應的文檔、代碼以及腳本狠鸳。RedHat提供了一個叫做openshift-ansible-playbooks的RPM包揣苏,openshift-ansible-contrib利用該RPM包來完成階段1和階段2,在階段3中我們可以利用一些現(xiàn)有的腳本工具實現(xiàn)環(huán)境檢查和認證件舵。
對AWS環(huán)境的要求
選擇部署的AWS區(qū)域需要至少有三個可用區(qū)以及2個EIP卸察。該OpenShift平臺需要新建三個公共子網(wǎng)和三個私有子網(wǎng)。
由于需要新建一大批的AWS資源铅祸,所以必須要提供一個有適當權(quán)限的AWS用戶坑质,包括創(chuàng)建賬號、使用S3临梗、Route53涡扼、ELB、EC2等盟庞。
六個子網(wǎng)需要在一個VPC中吃沪。Ansible腳本會建立一個NAT Gateway用來供內(nèi)部的EC2實例訪問外網(wǎng)。同時也會建立8個Security Groups來限制不同的實例什猖、ELB和外部網(wǎng)絡間的訪問票彪。
openshift-ansible-contrib提供了部署基礎設施萎津、安裝和配置OpenShift以及擴展router和registry的功能。運行Ansible的機器必須是RHEL7操作系統(tǒng)抹镊。具體的安裝過程可參見https://access.redhat.com/documentation/en-us/reference_architectures/2017/html/deploying_openshift_container_platform_3.5_on_amazon_web_services/deploying_openshift锉屈。
安裝完畢后的環(huán)境檢查可以參見https://access.redhat.com/documentation/en-us/reference_architectures/2017/html/deploying_openshift_container_platform_3.5_on_amazon_web_services/operational-management。
總結(jié)
在AWS上部署OpenShift平臺并不是一件輕松的事情垮耳,一方面需要對AWS的各種服務了如執(zhí)掌颈渊,一方面也需要對OpenShift的架構(gòu)和核心概念有所了解。雖然RedHat提供了一些Ansible腳本和RPM包來簡化安裝终佛,但整個過程也絕非一片坦途俊嗽。安裝完備之后,如何和企業(yè)現(xiàn)有的應用程序開發(fā)流程铃彰、持續(xù)交付流水線結(jié)合起來無縫過度绍豁,也是一件非常考驗人的事情牙捉。下一篇文章會對這些方面進行揭秘竹揍。