CentOS 7.5 透過 Kolla 安裝 OpenStack Queens


前言

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

簡單來說,我們可以透過 OpenStack 中的 Kolla Project,透過 Kolla / Kolla-Ansible 將 OpenStack 運作元件打包成 Container 的方式,然後搭配 Ansible 進行自動化佈署的動作,達到快速佈建 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 虛擬主機,並且給予「kollaopenstackqueens.southeastasia.cloudapp.azure.com」的 DNS 名稱,以便屆時方便登入 OpenStack Horizon 頁面。
# Create Resource Group in Azure SouthEast Asia DataCenter
$ az group create --name RG-KollaDemo --location southeastasia

# Create CentOS 7.5 Virtual Machine
$ az vm create \
--resource-group RG-KollaDemo \
--name Kolla-OpenStackQueens \
--image OpenLogic:CentOS:7.5:latest \
--size Standard_D16s_v3 \
--public-ip-address-dns-name kollaopenstackqueens \
--admin-username weithenn \
--admin-password OpenInfraDaysTaiwan2018


# Open CentOS 7.5 NSG port 80 traffic
$ az vm open-port --port 80 --resource-group RG-KollaDemo --name Kolla-OpenStackQueens


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

圖、建立 CentOS 7.5 虛擬主機

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





CentOS 7.5 基礎設定

有關 CentOS 的基礎設定就不再贅述,有興趣的朋友可以參考站內文章 CentOS 7.4 攻略 - 基礎設定系列文章。順利建立 CentOS 虛擬主機可以透過 SSH 登入,也可以從 Azure Cloud Shell 進行登入 (但是,必須注意 20 分鐘 Idle 自動登出的情況):
$ : > /home/weithenn/.ssh/known_hosts
$ ssh weithenn@kollaopenstackqueens.southeastasia.cloudapp.azure.com
$ sudo yum -y update
$ curl -sSL https://get.docker.com | sh
$ systemctl start docker
$ systemctl enable docker
$ usermod -aG docker $(whoami)
$ docker version


圖、透過 Azure Cloud Shell 登入 CentOS 7.5 主機進行操作

事實上,採用 Kolla-Ansible 也會自動幫 CentOS 主機安裝 Docker,只是會採用舊版Docker 1.13,所以我先手動幫 CentOS 主機安裝最新版本的 Docker 18.06。有關 CentOS 安裝 Docker 的詳細作法,請參考站內文章 CentOS 7.5 安裝 Docker 18.06 容器環境

圖、CentOS 7.5 主機安裝最新版本 Docker 18.06





安裝 Ansible 及相關 Dependencies

請執行下列相關指令,以便為 CentOS 7.5 主機安裝 AnsibleDependencies,其它詳細資訊請參考 OpenStack Docs: Quick Start - Install dependencies 官方文件。
$ yum -y install epel-release
$ yum -y install python-pip
$ pip install -U pip
$ yum -y install python-devel libffi-devel gcc git openssl-devel libselinux-python
$ yum -y install ansible
$ pip install -U ansible


圖、安裝 Ansible 及相關 Dependencies

接著,修改 Ansible 組態設定檔「/etc/ansible/ansible.cfg」,在 [defaults] 下加上 3 個參數選項。
[defaults]
host_key_checking=False
pipelining=True
forks=300


圖、修改 Ansible 組態設定檔





安裝及組態設定 Kolla-Ansible

請執行下列相關指令,以便為 CentOS 7.5 主機安裝 Kolla-Ansible。其它詳細資訊請參考 OpenStack Docs: Quick Start - Install Kolla-ansible 官方文件。
# Install Kolla-Ansible
$ cd /opt ; git clone https://github.com/openstack/kolla-ansible -b stable/queens
$ pip install -r kolla-ansible/requirements.txt --ignore-installed
$ cd /opt/kolla-ansible ; python setup.py install

# Configuration Files: global.yml, passwords.yml
$ cp -r /opt/kolla-ansible/etc/kolla /etc/kolla/

# Inventory Files: all-in-one, multimode
$ cp /opt/kolla-ansible/ansible/inventory/* /etc/kolla/


圖、為 CentOS 7.5 主機安裝 Kolla-Ansible

預設情況下,記錄各項 OpenStack 運作元件的密碼為空值,在測試環境中我們可以使用指令「kolla-genpwd」快速產生各項隨機密碼,在本文實作環境中將稍後登入 Horizon 密碼修改為「OpenInfraDaysTaiwan2018」。其它詳細資訊請參考 OpenStack Docs: Quick Start - Kolla Passwords 官方文件。
# Generator Kolla passwords - /etc/kolla/passwords.yml
$ kolla-genpwd
$ vi /etc/kolla/passwords.yml
keystone_admin_password: OpenInfraDaysTaiwan2018


圖、手動指定 OpenStack Horizon 登入密碼

接著,調整 Kolla-Ansible 的通用組態設定檔「/etc/kolla/globals.yml」,請依照你的運作環境進行相對應的調整,其它詳細資訊請參考 OpenStack Docs: Quick Start - Kolla globals.yml 官方文件。
# Required to deploy Kolla-Ansible - /etc/kolla/globals.yml
$ cd /etc/kolla ; cp globals.yml globals.yml.orig
$ sed -i 's,#kolla_base_distro: "centos",kolla_base_distro: "centos",g' /etc/kolla/globals.yml
$ sed -i 's,#kolla_install_type: "binary",kolla_install_type: "source",g' /etc/kolla/globals.yml
$ sed -i 's,#openstack_release: "",openstack_release: "queens",g' /etc/kolla/globals.yml
$ sed -i 's,kolla_internal_vip_address: "10.10.10.254",kolla_internal_vip_address: "10.0.0.4",g' /etc/kolla/globals.yml
$ sed -i 's,#docker_registry: "172.16.0.10:4000",docker_registry: "",g' /etc/kolla/globals.yml
$ sed -i 's,#docker_namespace: "companyname",docker_namespace: "kolla",g' /etc/kolla/globals.yml
$ sed -i 's,#network_interface: "eth0",network_interface: "eth0",g' /etc/kolla/globals.yml
$ sed -i 's,#neutron_external_interface: "eth1",neutron_external_interface: "docker0",g' /etc/kolla/globals.yml
$ sed -i 's,#enable_haproxy: "yes",enable_haproxy: "no",g' /etc/kolla/globals.yml
$ egrep "^[^#]" /etc/kolla/globals.yml


圖、依照運作環境調整 OpenStack 通用組態設定檔





佈署 OpenStack Queens

前置作業完成後,接著就是重頭戲透過 Kolla-Ansible 執行佈署 OpenStack Queens 了,請執行下列指令進行「Bootstrap Servers」的動作,此動作大約花費 1 分鐘的時間。其它詳細資訊請參考 OpenStack Docs: Quick Start - Deployment 官方文件。
# Bootstrap Servers (1 min, ok=39, changed=21)
$ kolla-ansible -i all-in-one bootstrap-servers


圖、執行 OpenStack Bootstrap Servers 的動作

圖、執行 OpenStack Bootstrap Servers 的動作

請執行下列指令進行「Pre-Deployment Checks」的動作,此動作大約花費 1 分鐘的時間。其它詳細資訊請參考 OpenStack Docs: Quick Start - Deployment 官方文件。
# Pre-deployment checks (1 min, ok=58, changed=1)
$ kolla-ansible -i all-in-one prechecks


圖、執行 OpenStack Pre-Deployment Checks 的動作

請執行下列指令進行「Download Docker Images」的動作,此動作大約花費 10 ~ 15 分鐘的時間,完成後可以看到 CentOS 主機已經下載許多 Kolla on CentOS 上的 Docker Images。其它詳細資訊請參考 OpenStack Docs: Quick Start - Deployment 官方文件。
# Download docker images (10~15 min, ok=26, changed=11)
$ kolla-ansible -i all-in-one pull
$ docker images


圖、執行 Download Docker Images 的動作

圖、確認已下載相關 Docker Images

請執行下列指令進行「OpenStack Queens Deployment」的動作,此動作大約花費 10 ~ 15 分鐘的時間,完成後可以看到啟動許多 OpenStack 運作元件容器,並且這些容器的虛擬網路都是採用 Docker Host。其它詳細資訊請參考 OpenStack Docs: Quick Start - Deployment 官方文件。
# OpenStack Queens deployment (10~15 min, ok=225, changed=141)
$ kolla-ansible -i all-in-one deploy
$ docker ps ; docker network ls ; docker volume ls
$ docker inspect mariadb | grep NetworkMode


圖、執行 OpenStack Queens 佈署作業

圖、確認相關 OpenStack 運作元件容器已運作

圖、查詢 OpenStack 運作元件容器虛擬網路及儲存資源





使用 OpenStack Queens

佈署作業完成後,便可以進行 OpenStack Queens 運作環境的初始化作業及開始使用。請開啟瀏覽器連結至「http://kollaopenstackqueens.southeastasia.cloudapp.azure.com」網址,即可看到 OpenStack Horizon Dashboard 登入畫面。其它詳細資訊請參考 OpenStack Docs: Quick Start - Using OpenStack 官方文件。
# Install basic OpenStack CLI clients, openrc file
$ pip install python-openstackclient python-glanceclient python-neutronclient
$ kolla-ansible post-deploy
$ . /etc/kolla/admin-openrc.sh

# Create example networks, images
$ . /opt/kolla-ansible/tools/init-runonce

# OpenStack Horizon dashboard
Horizon 網址: http://kollaopenstackqueens.southeastasia.cloudapp.azure.com
登入帳號: admin
登入密碼: OpenInfraDaysTaiwan2018


圖、OpenStack 初始化作業

圖、連結至 OpenStack Horizon 登入畫面

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

圖、查看 OpenStack 虛擬網路環境





刪除 OpenStack Queens 測試環境

當測試作業完畢或環境玩爛需要打掉重練時,可以透過 Kolla-Ansible 內建的相關管理 Script 來處理運作環境。舉例來說,執行 stop-containers 可將所有容器停止運作、執行 cleanup-containers 刪除停止的容器、執行 cleanup-images 刪除下載的容器映像檔、執行 cleanup-host 為刪除 CentOS 主機上相關組態設定。
# Destroy OpenStack Queens environment
$ docker ps
$ /opt/kolla-ansible/tools/stop-containers
$ docker ps -a
$ /opt/kolla-ansible/tools/cleanup-containers
$ docker images
$ /opt/kolla-ansible/tools/cleanup-images --all
$ /opt/kolla-ansible/tools/cleanup-host


圖、停止所有 OpenStack 運作元件容器

圖、清理所有 OpenStack 運作元件容器

圖、刪除所有 所有 OpenStack 運作元件容器映像檔

圖、清理主機上 OpenStack 相關組態設定

由於本文是在 Microsoft Azure 公有雲環境上進行實作,最後也可以透過簡單的 Azure CLI 刪除整個測試環境。
# Delete Kolla OpenStack Queens environment
$ az group delete --name RG-KollaDemo --yes --no-wait
$ : > /home/weithenn/.ssh/known_hosts


圖、刪除 Azure VM 測試環境





參考資源