CentOS 7.5 透過 RDO 安裝 OpenStack Queens


前言

本文為日前在 OpenInfra Days Taiwan 2018 大會上,進行線上實際展示的 SOP 實作內容,有興趣的朋友可以參考看看,或參考 Packstack - OpenStack 官方文件說明。

簡單來說,我們可以透過 RDO Project - OpenStack, packaged for and tested on CentOS 機制,在 CentOS 7.5 主機中搭配 Puppet 工具,達到快速部署 OpenStack Queens 運作元件及運作環境的目的。

圖、RDO Packaging 運作架構示意圖

圖、Evaluating OpenStack Single-Node 運作架構示意圖





建立支援 Nested Virtualization 的 CentOS  7.5 虛擬主機

本文,將實作在 CentOS 7.5 主機中安裝 OpenStack Queens 運作環境,當然這台 CentOS 7.5 主機可以在「地端」也可以在「雲端」環境中。值得注意的是,這台 CentOS 7.5 主機必須要支援「巢狀式虛擬化技術」(Nested Virtualization),屆時才能順利建立 OpenStack Queens 運作環境。

有關地端主機啟用 Nested Virtualization 機制的詳細資訊,請參考站內文章 網管人雜誌 133 期 - 實作 Hyper-V 巢狀虛擬化測試研發效率大提升

圖、Hyper-V 虛擬化平台巢狀式虛擬化運作架構示意圖

有關 Microsoft Azure 雲端主機啟用 Nested Virtualization 機制的詳細資訊,請參考站內文章 ASDK Journey (2) - 實戰 Azure Stack Development Kit on Azure

圖、Nested Virtualization in Azure

Microsoft Azure 雲端環境中,需要支援 CentOS 7.5 主機啟用 Nested Virtualization 機制時,請記得選擇的 VM 虛擬主機必須是「Dv3 或 Ev3」系列才行。舉例來說,本文採用 D16s v3 系列的 VM 虛擬主機。

由於本文並非著重於 Microsoft Azure 議題,所以如何建立 CentOS 虛擬主機就不詳述。請透過下列的 Azure CLI 指令,先在東南亞的資料中心建立資源群組,然後再建立具備 Nested Virtualization 機制的 CentOS 7.5 虛擬主機。
# Create Resource Group in Azure SouthEast Asia DataCenter
$ az group create --name RG-RDOLab --location southeastasia

# Create CentOS 7.5 Virtual Machine
$ az vm create \
--resource-group 
RG-RDOLab \
--name rdo-queens \
--image OpenLogic:CentOS:7.5:latest \
--size Standard_D16s_v3 \
--admin-username weithenn \
--admin-password OpenInfraDaysTaiwan2018


# Open CentOS 7.5 NSG port 3389 traffic
$ az vm open-port --port 3389 --priority 1200 --resource-group RG-RDOLab --name rdo-queens


圖、在 Azure 東南亞資料中心建立資源群組

圖、建立 CentOS 7.5 虛擬主機





CentOS 7.5 基礎設定

有關 CentOS 的基礎設定就不再贅述,有興趣的朋友可以參考站內文章 CentOS 7.4 攻略 - 基礎設定系列文章。順利建立 CentOS 虛擬主機可以透過 SSH 登入,也可以從 Azure Cloud Shell 進行登入 (但是,必須注意 20 分鐘 Idle 自動登出的情況),請執行下列指令進行安裝桌面環境 :
$ sudo yum -y update
$ sudo yum -y install epel-release
$ sudo yum -y groupinstall "Xfce"


完成後,記得在使用者家目錄新增「.Xclients」檔案,以便屆時 xrdp 能夠在連接時知道採用 Xfce 桌面環境
$ cat ~/.Xclients
#!/bin/bash
XFCE="$(which xfce4-session 2>/dev/null)"
exec "$XFCE"
$ chmod +x ~/.Xclients


接著,安裝相關套件、組態設定 SELinux、啟用相關服務,以便稍後可以透過 Remote Deskop 連接至 CentOS 7.5 虛擬主機:
$ sudo yum -y install xrdp tigervnc-server firefox
$ sudo chcon --type=bin_t /usr/sbin/xrdp
$ sudo chcon --type=bin_t /usr/sbin/xrdp-sesman
$ sudo systemctl enable xrdp && systemctl start xrdp
$ sudo systemctl enable xrdp-sesman && systemctl start xrdp-sesman
$ sudo netstat -tunpl | grep xrdp


在連接至 CentOS 7.5 虛擬主機之前,除了 CentOS 主機本身的防火牆之外,因為本文實作環境採用 Microsoft Azure 公有雲環境,所以記得確認這台 CentOS 7.5 虛擬主機已經允許「TCP Port 3389」流量能夠通過 NSG 防火牆。本文實作 CentOS 7.5 虛擬主機的 FQDN 為「openstackhelmlab.southeastasia.cloudapp.azure.com」。

圖、透過 Remote Desktop 連結至 CentOS 7.5 虛擬主機

順利透過 Remote Desktop 連結至 CentOS 7.5 虛擬主機後,鍵入使用者帳號及密碼後準備登入剛才安裝的 Xfce 桌面環境。

圖、鍵入使用者帳號及密碼

由於,屆時建立的 OpenStack Networking 機制,與 CentOS 7.5 主機內建的 NetworkManager 網路功能互斥,所以必須先把 NetworkManager 功能停用,然後請確保 CentOS 主機的 network 網路功能啟動及運作中。 (詳細資訊,請參考 RedHat - Evaluating OpenStack: Single-Node Deployment 文章內容)
$ sudo systemctl disable NetworkManager
$ sudo systemctl stop NetworkManager
$ sudo systemctl status NetworkManager
$ sudo systemctl status network


圖、確保停用 NetworkManager 網路功能服務

圖、確保 network 網路功能服務運作中





安裝 OpenStack Queens

接下來,便是透過 Packstack 安裝 OpenStack Queens 的動作,詳細資訊請參考 Packstack: Create a proof of concept cloud 官方文件內容 (最後,packstack --allinone 的動作,本文實作環境約 30 分鐘後部署完畢)。
$ sudo yum install -y centos-release-openstack-queens
$ sudo yum update -y
$ sudo yum install -y openstack-packstack
$ sudo packstack --allinone


圖、安裝 centos-release-openstack-queens

圖、執行 YUM Update

圖、安裝 openstack-packstack

圖、建立及啟動 OpenStack Queens 運作環境

圖、建立及啟動 OpenStack Queens 完成

順利運作 OpenStack Queens 運作環境後,便可以查看登入 OpenStack 頁面的相關資訊。
  • keystonerc_admin: 管理者帳號密碼資訊
  • keystonerc_demo: 展示用途帳號密碼資訊

圖、查看帳號密碼資訊

圖、執行環境參數設定

圖、登入 OpenStack

圖、順利登入 OpenStack






刪除 OpenStack Queens 測試環境

當測試作業完畢或環境玩爛需要打掉重練時,由於本文是在 Microsoft Azure 公有雲環境上進行實作,其實可以透過簡單的 Azure CLI 快速刪除整個測試環境。
# Delete OpenStack-Helm Queens environment
$ az group delete --name RG-RDOLab --yes --no-wait







參考資源