前言
本文為日前在 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 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 測試環境
參考資源
- OpenStack Docs: OpenStack-Helm Development
- Xfce Desktop Environment
- docker_container: create_host_config() got an unexpected keyword argument 'init' · Issue #42162 · ansible/ansible
- Bug #1779709 “Helm deployment script fails for Ansible 2.6.0 due...” : Bugs : Juniper Openstack
- TACO All-In-One 설치 - Hello, We're SK Telecom Virtualization SW Lab & SW COE
- Openstack Helm All-in-one Demonstration - YouTube