在AWS中部署OpenShift平臺

黃博文發表於2017-08-23

OpenShift是RedHat出品的PAAS平臺。OpenShift做為PAAS平臺最大的特點是它是完全容器化的PAAS平臺,底層封裝了Docker和Kubernetes,上層暴露了對開發者友好的介面來完成對應用程式的整合、部署、彈性伸縮等任務。

Docker提供了對打包和建立基於Linux的輕量級容器的抽象。而Kubernetes提供了多主機叢集管理和Docker容器編排。OpenShift基於Docker和Kubernetes加入了新的功能:

  • 原始碼管理、構建和部署
  • 在系統中整合映象的管理
  • 按需擴充套件的應用程式管理
  • 在大型開發者組織中進行團隊管理和使用者追蹤

OpenShift直接提供支援的應用程式映象有:

在AWS中部署OpenShift平臺

OpenShift直接提供支援的資料庫映象有:

在AWS中部署OpenShift平臺

除此之外,OpenShift還讓你通過一鍵點選便生成相應的應用,比如幾秒之內搭建好一個Jenkins服務。包括以下:

在AWS中部署OpenShift平臺

OpenShift架構概覽

在AWS中部署OpenShift平臺

從上圖可以看出,OpenShift的典型使用者分為兩種,開發人員和運維人員。開發人員可以通過現有的程式碼管理工具和持續整合、交付工具利用OpenShift完成對應用程式的打包、部署、擴容操作。而運維人員可以利用現有的自動化工具實現對OpenShift平臺的維護。

OpenShift中的Kubernetes用來管理跨宿主機(或容器)的容器化應用程式,並提供部署、維護和應用程式擴容機制。對於一個Kubernetes叢集來說,它包括一個或多個master以及一組node。

Master主機託管了API伺服器、controller manager伺服器以及etcd例項。Master管理Kubernetes叢集中的節點並控制執行在節點上的pod。

Node則提供了容器的執行時環境。Kubernetes節點中的每個node會執行受Master管理的服務,當然也包括Docker、Kubelet及serverice proxy服務。node可以為雲機器、物理系統或者虛擬系統。Kubelet用來更新node上的執行的容器狀態。Service Proxy用於執行一個簡單的網路代理,來反映定義在node的API中的服務,從而使node可以跨後端進行簡單的TCP和UDP流轉發。

OpenShift架設要求

如果想自己架設OpenShift平臺作為商業用途,必須要獲取OpenShift Enterprise的付費訂閱。目前OpenShift Enterprise的最新版本為3.6版。對於Master和Node節點的系統要求如下。

Master:

  • 物理或虛擬機器,或者執行於公有云或私有云之上的例項
  • 基礎作業系統為Red Hat企業版Linux(RHEL)7.1,幷包含最小的安裝選項
  • 2核CPU
  • 最小8GB記憶體
  • 最小30GB硬碟空間

Node:

  • 物理或虛擬機器,或者執行於公有云或私有云之上的例項
  • 基礎作業系統為Red Hat企業版Linux(RHEL)7.1,幷包含最小的安裝選項
  • Docker 1.6.2及以上版本
  • 1核CPU
  • 最小8GB記憶體
  • 最小15GB硬碟空間
  • 另外最小15GB的未分配空間,需要通過docker-storage-setup進行配置

環境要求:

  • 需要一個DNS zone來解析OpenShift router的IP地址。比如*.cloudapps.example.com. 300 IN A 192.168.133.2
  • Master和Node之間必須要有共享的網路,兩者之間可以互相通訊。
  • 需要一個Git Server和能夠訪問該Server的賬號。

AWS中部署OpenShift平臺

下圖是一個在AWS中的OpenShift叢集的示例。

在AWS中部署OpenShift平臺

  • Master節點:包含3個Master例項,實現高可用,上面執行etcd、通過一個external load balancer向外暴露服務。

  • Infra Node: 由三個例項組成,這三個例項用來執行支撐OpenShift叢集服務的一系列容器。

  • App Node:用於執行應用程式容器的例項,可以按需進行擴充套件。

  • Bastion:用於限制對叢集中例項的ssh訪問,增強安全性。

  • 儲存:OpenShift使用EBS作為例項的檔案系統並用於持久化容器的儲存;另外還使用S3這個物件儲存服務作為OpenShift registry的儲存。 ELB:總共有三個.一個用來在叢集外訪問OpenShift API、OpenShift console。一個在叢集內訪問OpenShift API。另一個用來訪問通過route暴露的部署在叢集中的應用程式服務。最後通過AWS的Route53來管理DNS。

部署OpenShift叢集的三個階段

在AWS中部署OpenShift叢集包括三個階段:

  • 第一階段:在AWS中設定好基礎設施
  • 第二階段: 在AWS上部署OpenShift Container平臺
  • 第三階段: 部署後的環境檢查

關於整個部署活動絕大多數都是可以自動化的。RedHat提供了一個GitHub repo:openshift-ansible-contrib。openshift-ansible-contrib提供了將OpenShift叢集部署到不同的Cloud供應商的解決方案,當然也包括了AWS。裡面包含了相應的文件、程式碼以及指令碼。RedHat提供了一個叫做openshift-ansible-playbooks的RPM包,openshift-ansible-contrib利用該RPM包來完成階段1和階段2,在階段3中我們可以利用一些現有的指令碼工具實現環境檢查和認證。

對AWS環境的要求

選擇部署的AWS區域需要至少有三個可用區以及2個EIP。該OpenShift平臺需要新建三個公共子網和三個私有子網。 由於需要新建一大批的AWS資源,所以必須要提供一個有適當許可權的AWS使用者,包括建立賬號、使用S3、Route53、ELB、EC2等。

六個子網需要在一個VPC中。Ansible指令碼會建立一個NAT Gateway用來供內部的EC2例項訪問外網。同時也會建立8個Security Groups來限制不同的例項、ELB和外部網路間的訪問。

openshift-ansible-contrib提供了部署基礎設施、安裝和配置OpenShift以及擴充套件router和registry的功能。執行Ansible的機器必須是RHEL7作業系統。具體的安裝過程可參見https://access.redhat.com/documentation/en-us/reference_architectures/2017/html/deploying_openshift_container_platform_3.5_on_amazon_web_services/deploying_openshift%E3%80%82

安裝完畢後的環境檢查可以參見https://access.redhat.com/documentation/en-us/reference_architectures/2017/html/deploying_openshift_container_platform_3.5_on_amazon_web_services/operational-management%E3%80%82

總結

在AWS上部署OpenShift平臺並不是一件輕鬆的事情,一方面需要對AWS的各種服務瞭如執掌,一方面也需要對OpenShift的架構和核心概念有所瞭解。雖然RedHat提供了一些Ansible指令碼和RPM包來簡化安裝,但整個過程也絕非一片坦途。安裝完備之後,如何和企業現有的應用程式開發流程、持續交付流水線結合起來無縫過度,也是一件非常考驗人的事情。下一篇文章會對這些方面進行揭祕。

相關文章