CentOS 7.5 透過 Helm 安裝 OpenStack Queens


前言

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

簡單來說,我們可以透過 OpenStack 中的 OpenStack-Helm,在 Kubernetes 容器調度環境中搭配  Helm 機制,部署 OpenStack Queens 運作元件達到快速佈建 OpenStack Queens 運作環境的目的。





建立支援 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-OpenStackHelmLab --location southeastasia

# Create CentOS 7.5 Virtual Machine
$ az vm create \
--resource-group 
RG-OpenStackHelmLab \
--name vm-helmqueens \
--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-OpenStackHelmLab --name vm-helmqueens


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

圖、建立 CentOS 7.5 虛擬主機

圖、組態設定 CentOS 7.5 虛擬主機的 NSG 允許 Port 3389 流量





CentOS 7.5 基礎設定

有關 CentOS 的基礎設定就不再贅述,有興趣的朋友可以參考站內文章 CentOS 7.4 攻略 - 基礎設定系列文章。順利建立 CentOS 虛擬主機可以透過 SSH 登入,也可以從 Azure Cloud Shell 進行登入 (但是,必須注意 20 分鐘 Idle 自動登出的情況),請執行下列指令進行安裝桌面環境 (屆時,才方便透過瀏覽器連結 Kubernetes Dashboard):
$ 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 桌面環境。

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





Kubernetes 環境基礎設定

由於,在稍後的自動化安裝流程中,將會有某些 Python 套件版本相依性導致自動化安裝流程中斷,所以我們可以先執行相關套件版本安裝及升級的動作。
$ sudo pip install -U six
$ sudo pip install PyYAML --ignore-installed PyYAML
$ sudo pip install requests --ignore-installed requests
$ sudo pip install ipaddress --ignore-installed ipaddress


圖、執行相關套件版本安裝及升級

請執行下列指令,以便執行「Clone the OpenStack-Helm Repos」的動作。
$ git clone https://git.openstack.org/openstack/openstack-helm-infra.git
$ git clone https://git.openstack.org/openstack/openstack-helm.git

圖、執行 Clone the OpenStack-Helm Repos 的動作

順利透過 git 指令下載 OpenStack-Helm Repos 之後,切換到 OpenStack-Helm Repos 資料夾,執行部署 Kubernetes 及 Helm 的動作。
$ cd openstack-helm
$ ./tools/deployment/developer/common/010-deploy-k8s.sh

圖、執行部署 Kubernetes 及 Helm 的動作

圖、部署 Kubernetes 及 Helm 的動作完成

執行安裝 OpenStack-Helm 的動作。
$ ./tools/deployment/developer/common/020-setup-client.sh
圖、執行安裝 OpenStack-Helm 的動作

執行部署 Ingress Controller 的動作。
$ ./tools/deployment/developer/common/030-ingress.sh
圖、執行部署 Ingress Controller 的動作





佈署 OpenStack Queens 運作環境

請執行下列 Script 依序部署 NFS、MariaDB、RabbitMQ、Memcached、Keystone、Heat、Horizon、Glance、OpenvSwitch、Libvirt、Nova、Neutron、Gateway (for the public network)
$ ./tools/deployment/developer/nfs/040-nfs-provisioner.sh
$ ./tools/deployment/developer/nfs/050-mariadb.sh
$ ./tools/deployment/developer/nfs/060-rabbitmq.sh
$ ./tools/deployment/developer/nfs/070-memcached.sh
$ ./tools/deployment/developer/nfs/080-keystone.sh
$ ./tools/deployment/developer/nfs/090-heat.sh
$ ./tools/deployment/developer/nfs/100-horizon.sh
$ ./tools/deployment/developer/nfs/120-glance.sh
$ ./tools/deployment/developer/nfs/140-openvswitch.sh
$ ./tools/deployment/developer/nfs/150-libvirt.sh
$ ./tools/deployment/developer/nfs/160-compute-kit.sh
$ ./tools/deployment/developer/nfs/170-setup-gateway.sh

圖、部署 NFS

圖、部署 MariaDB

圖、部署 RabbitMQ

圖、部署 Memcached

圖、部署 Keystone

圖、部署 Heat

圖、部署 Horizon

圖、部署 Glance

圖、部署 OpenvSwitch

圖、部署 Libvirt

圖、部署 Nova 及 Neutron

圖、部署 Gateway (for the public network)





檢查 OpenStack Queens 環境

順利部署 OpenStack-Helm 之後,便可以執行下列指令開始使用 OpenStack Client 建立 OpenStack 範例運作環境:
$ ./tools/deployment/developer/common/900-use-it.sh
圖、建立 OpenStack 範例運作環境

執行「helm list」指令,查看透過 Helm 機制所部署的 OpenStack 運作元件。

圖、查看透過 Helm 機制所部署的 OpenStack 運作元件

執行「docker ps」指令,查看目前運作的容器清單。

圖、查看目前運作的容器清單

執行下列 Kubernetes 指令,查看 Kubernetes Namespace、Pods 等資訊。
$ kubectl get ns
$ kubectl get pods -n openstack --field-selector=status.phase=Running
$ kubectl get pods -o wide --all-namespaces --field-selector=status.phase=Running

圖、查看 Kubernetes Namespace、Pods 資訊

圖、查看 Kubernetes Namespace、Pods 資訊

執行下列指令,透過 python-openstackclient CLI 啟用 auth 使用者身份驗證機制。
$ export OS_CLOUD=openstack_helm
$ export OS_USERNAME='admin'
$ export OS_PASSWORD='password'
$ export OS_PROJECT_NAME='admin'
$ export OS_PROJECT_DOMAIN_NAME='default'
$ export OS_USER_DOMAIN_NAME='default'
$ export OS_AUTH_URL='http://keystone.openstack.svc.cluster.local/v3'
$ openstack service list
$ openstack stack list

圖、透過 python-openstackclient CLI 啟用 auth 使用者身份驗證機制





使用 OpenStack Queens 環境

佈署作業完成後,請開啟瀏覽器連結至「http://localhost:31000」網址,即可看到 OpenStack Horizon Dashboard 登入畫面。然後鍵入下列 Domain、User Name、Password 等欄位資訊
Domain: default
User Name: admin
Password: password

圖、連結至 OpenStack Horizon 登入畫面

圖、順利登入 OpenStack Horizon 管理環境





安裝 Kubernetes Dashboard 運作環境

由於本文實作環境有結合 Kubernetes 容器調度平台,所以我們也安裝 Kubernetes Dashboard 運作環境來協助我們了解整體環境及相關資訊。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
$ kubectl describe svc kubernetes-dashboard -n kube-system
$ kubectl get services kubernetes-dashboard -n kube-system
$ kubectl proxy

圖、安裝 Kubernetes Dashboard 運作環境

圖、登入 Kubernetes Dashboard

圖、透過 Kubernetes Dashboard 查看相關資訊





刪除 OpenStack Queens 測試環境

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

圖、刪除 Azure VM 測試環境





參考資源