環境
通過OpenStack-Ansible
安裝All-in-one (AIO) 用於:
- 開發環境
- 理解OpenStack服務是如何組合在一起的
- 一個簡單的實驗環境
盡管這種方式不適合在生產部署,但是比較適合實驗開發環境。
最小配置:
- 8 vCPU’s
- 50GB root部分
- 8GB RAM
推薦的服務器配置:
- CPU/主板 支持硬件輔助虛擬化
- 8核心CPU
- 80G root空間,或者60G空盤。如果使用第二塊盤,需要配置
bootstrap_host_data_disk_device
參數。 - 16GB 內存
可以在虛機中進行AIO安裝進行,但是如果你的虛機不支持嵌套虛擬化的話,性能將會很差。如果是生產環境,推薦使每個角色進行多節點部署。
創建一個AIO
概述
下面是創建AIO的步驟,如果要自定義構建,則需要配置好第一步:
- 准備主機環境
- ansible 啟動腳本和所需的roles
- AIO配置的啟動腳本
- 運行Playbook
准備主機環境
當在一個新服務器上創建AIO版本的時候,建議升級系統包到最新版本,並且重啟到新內核。
注:
- 使用root權限運行
- 在重啟之前,確保SELINUX處於關閉。
/etc/sysconfig/selinux
應該被置為SELINUX=disabled
。CentOS/RHEL中OpenStack-Ansible
目前不支持SELinux。 - 如果你是在連接受限的情況下安裝,需要看一下連接受限情況的相關手冊再繼續。
## Ubuntu / Debian
# apt-get update
# apt-get dist-upgrade
# reboot
## CentOS
# dnf upgrade
# dnf install git-core
# systemctl stop firewalld
# systemctl mask firewalld
# reboot
Ansible啟動腳本和需要的角色
復制OpenStack-Ansible
repo並且切換到gen種方式不適合在生產部署,但是比較適合實驗開發環境。
最小配置:
- 8 vCPU’s
- 50GB root部分
- 8GB RAM
推薦的服務器配置:
- CPU/主板 支持硬件輔助虛擬化
- 8核心CPU
- 80G root空間,或者60G空盤。如果使用第二塊盤,需要配置
bootstrap_host_data_disk_device
參數。 - 16GB 內存
可以在虛機中進行AIO安裝進行,但是如果你的虛機不支持嵌套虛擬化的話,性能將會很差。如果是生產環境,推薦使每個角色進行多節點部署。
創建一個AIO
概述
下面是創建AIO的步驟,如果要自定義構建,則需要配置好第一步:
- 准備主機環境
- ansible 啟動腳本和所需的roles
- AIO配置的啟動腳本
- 運行Playbook
准備主機環境
當在一個新服務器上創建AIO版本的時候,建議升級系統包到最新版本,並且重啟到新內核。
注:
- 使用root權限運行
- 在重啟之前,確保SELINUX處於關閉。
/etc/sysconfig/selinux
應該被置為SELINUX=disabled
。CentOS/RHEL中OpenStack-Ansible
目前不支持SELinux。 - 如果你是在連接受限的情況下安裝,需要看一下連接受限情況的相關手冊再繼續。
## Ubuntu / Debian
# apt-get update
# apt-get dist-upgrade
# reboot
## CentOS
# dnf upgrade
# dnf install git-core
# systemctl stop firewalld
# systemctl mask firewalld
# reboot
Ansible啟動腳本和需要的角色
復制OpenStack-Ansible
repo並且切換到repo的根目錄。
# git clone https://opendev.org/openstack/openstack-ansible \
/opt/openstack-ansible
# cd /opt/openstack-ansible
下一步切換到要部署的適用的branch/tag中。從一個分支的head進行部署可能會導致安裝有問題。如果是用於測試,最好先使用最新的標記的版本。
# # 列出所有目前的標簽.
# git tag -l
## 找出穩定分支和最新標簽
# git chec kout master
# git describe --abbrev=0 --tags
# # 取回最新標簽
# git checkout master
注:Wallaby版本只和Debian 10 (buster), Ubuntu 18.04 (Bionic Beaver), Ubuntu 20.04 (Focal Fossa) 還有CentOS 8兼容。目前無法在CentOS Stream上安裝.許多關鍵依賴項來自於EPEL資源庫,並且不能用於CentOS Stream主機. 注意一下在CentOS 8上部署的生命周期問題。
下一步就是使用ansible啟動腳本和roles來搭建環境。
注:執行前請先配置好NTP時鍾同步,否則后面會有https證書的報錯。
運行以下ansible啟動腳本和所需的roles:
# scripts/bootstrap-ansible.sh
注:你在使用ANSIBLE腳本構建PYTHON擴展功能的時候(例如pycrypto),可能會遇到以下報錯:
configure: error: cannot run C compiled programs.
原因可能在於是由於與/tmp
關聯的文件系統使用了noexec掛載標志,可以通過運行以下命令來檢查該標志:
# mount | grep $(df /tmp | tail -n +2 | awk '{print $1}') | grep noexec
你也可以指定一個沒有此掛載選項的備用路徑:
# TMPDIR=/var/tmp scripts/bootstrap-ansible.sh
啟動AIO配置
為了使所有服務啟動,主機必須要配置適當的磁盤分區,安裝包,網絡配置和OpenStack開發配置。
默認AIO啟動腳本會以一些默認的配置值去部署一些列的OpenStack服務,以滿足一些環境要求和構建開發測試系統。可以查看bootstrap-host role defaults默認文件來了解一些變量的配置。開發人員可以選擇更改引導方式。當你希望AIO使用第二塊磁盤或者使用相同roles去啟動多節點的開發環境時,這些信息將很有用。
啟動腳本已經將環境變量BOOTSTRAP_OPTS
作為一個附加選項傳遞給啟動進程中。比如,如果你希望將啟動腳本在第二塊盤(/dev/sdb
)上進行重分區,可以執行以下命令,這也將會導致設備上的數據被擦除:
# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"
其他的選項都可以通過空格簡單的連接起來執行,比如:
# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"
# export BOOTSTRAP_OPTS="${BOOTSTRAP_OPTS} bootstrap_host_data_disk_fs_type=xfs"
如果你安裝時沒有網絡連接或者沒有默認路由,你需要手動指定一個接口或者出向的連接。
# export BOOTSTRAP_OPTS="bootstrap_host_public_interface=eth1"
對於默認的AIO方案,可以通過執行以下命令進行配置:
# scripts/bootstrap-aio.sh
在合適的bootstrap-aio
默認服務之上添加OpenStack服務,可以復制以.aio
為擴展名的conf.d
文件到/etc/openstack_deploy
中,然后將擴展名改為.yml
文件。例如要啟動openstack的Telemetry服務:
# cd /opt/openstack-ansible/
# cp etc/openstack_deploy/conf.d/{aodh,gnocchi,ceilometer}.yml.aio /etc/openstack_deploy/conf.d/
# for f in $(ls -1 /etc/openstack_deploy/conf.d/*.aio); do mv -v ${f} ${f%.*}; done
可以在運行啟動腳本和運行前更改這些SCENARIO環境變量。關鍵詞aio
會確保一系列基礎OPENSTACK配置會被部署(cinder塊存儲, glance鏡像服務, horizon面板, neutron網絡服務, nova計算服務)。關鍵詞lxc
和nspawn
能夠被用於設置容器后端,而關鍵詞metal
會在沒有容器的情況下部署所有的服務。為了部署其他的服務,請將conf.d
文件的名字(去掉.yml.aio
擴展名)添加到SCENARIO環境變量中。每個關鍵字都應該用下划線限定,以下命令會實施一個帶有barbican(key管理服務), cinder, glance, horizon, neutron, 和nova的AIO。它將會設置cinder存儲后端為ceph
並且會使用LXC作為容器后端。
# export SCENARIO='aio_lxc_barbican_ceph'
# scripts/bootstrap-aio.sh
注:如果metal
和aio
關鍵詞在一起使用的話,horizon不會被部署,因為haproxy和horizon的監聽端口是沖突的。
如果要在默認配置基礎上添加其他更適用的global overrides,需要編輯/etc/openstack_deploy/user_variables.yml
的內容。為了了解可以替換roles,playbook和組變量中列出的默認值的各種方法,請參閱override默認配置。
如果想用個性化配置而不是使用AIO引導程序,詳細說明請參閱《 Deployment Guide 》。
運行Playbook
最后,運行Playbook
# cd /opt/openstack-ansible/playbooks
# openstack-ansible setup-hosts.yml
# openstack-ansible setup-infrastructure.yml
# openstack-ansible setup-openstack.yml
這個安裝過程可能需要一些時間,下面是正常情況下的時間消耗:
- SSD盤的裸金屬系統 ~ 30-50 分鍾
- SSD盤的虛擬機 ~ 45-60分鍾
- 機械盤的主機 ~ 90-120分鍾
一旦playbooks全部執行完畢,可以嘗試在/etc/openstack_deploy/user_variables.yml
中進行各種設置更改,並且只需要運行這一個playbook。
例如,通過playbook運行keystone服務:
# cd /opt/openstack-ansible/playbooks
# openstack-ansible os-keystone-install.yml
重啟AIO
由於AIO包括MariaDB/Galera的所有三個集群成員,因此在重新引導主機后必須重新初始化集群。
命令:
# cd /opt/openstack-ansible/playbooks
# openstack-ansible -e galera_ignore_cluster_state=true galera-install.yml
如果數據庫集群啟動失敗,請查看Galera Cluster Recovery手冊。
重建一個AIO
有時候需要刪除所有容器重建AIO。但是一般無法完整地摧毀AIO。可以執行以下命令:
# # 移動到playbooks目錄.
# cd /opt/openstack-ansible/playbooks
# # 摧毀所有容器
# openstack-ansible lxc-containers-destroy.yml
# # 停止所有本地不在容器里的服務
# for i in \
$(ls /etc/init \
| grep -e "nova\|swift\|neutron\|cinder" \
| awk -F'.' '{print $1}'); do \
service $i stop; \
done
# # 卸載核心服務.
# for i in $(pip freeze | grep -e "nova\|neutron\|keystone\|swift\|cinder"); do \
pip uninstall -y $i; done
# # 刪除其余目錄
# rm -rf /openstack /etc/{neutron,nova,swift,cinder} \
/var/log/{neutron,nova,swift,cinder}
# # 刪除PIP配置文件
# rm -rf /root/.pip
# # 移除APT包管理
# rm /etc/apt/apt.conf.d/00apt-cacher-proxy
刪除AIO最好的方式就是重新安裝系統,所以最好在虛擬機中或者雲環境中創建。
AIO參考圖里
這里有個基礎圖示去嘗試展示AIO部署。
此圖未按比例繪制,甚至沒有100%准確,該圖僅出於提供信息的目的而構建,僅供參考。
------->[ ETH0 == Public Network ]
|
V [ * ] Socket Connections
[ HOST MACHINE ] [ <>v^ ] Network Connections
* ^ *
| | |-------------------------------------------------------
| | |
| |---------------->[ HAProxy ] |
| ^ |
| | |
| V |
| (BR-Interfaces)<------ |
| ^ * | |
*-[ LXC ]*--*----------------------|-----|------|----| |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | V * | |
| * | | [ Galera x3 ] |
| [ Memcached ]<------------| | | |
*-------*[ Rsyslog ]<--------------|--| | * |
| [ Repos Server x3 ]<------| ---|-->[ RabbitMQ x3 ] |
| [ Horizon x2 ]<-----------| | | |
| [ Nova api ec2 ]<---------|--| | |
| [ Nova api os ]<----------|->| | |
| [ Nova console ]<---------| | | |
| [ Nova Cert ]<------------|->| | |
| [ Cinder api ]<-----------|->| | |
| [ Glance api ]<-----------|->| | |
| [ Heat apis ]<------------|->| | [ Loop back devices ]*-*
| [ Heat engine ]<----------|->| | \ \ |
| ------>[ Nova api metadata ] | | | { LVM } { XFS x3 } |
| | [ Nova conductor ]<-------| | | * * |
| |----->[ Nova scheduler ]--------|->| | | | |
| | [ Keystone x3 ]<----------|->| | | | |
| | |--->[ Neutron agents ]*-------|--|---------------------------*
| | | [ Neutron server ]<-------|->| | | |
| | | |->[ Swift proxy ]<----------- | | | |
*-|-|-|-*[ Cinder volume ]*----------------------* | |
| | | | | | |
| | | ----------------------------------------- | |
| | ----------------------------------------- | | |
| | -------------------------| | | | |
| | | | | | |
| | V | | * |
---->[ Compute ]*[ Neutron linuxbridge ]<---| |->[ Swift storage ]-