我使用 Kolla Ansible 建立了一个全一体化的 OpenStack(Xena) 环境

由于在我的家中多了一台机架服务器,我尝试使用全功能OpenStack(Xena)架构来搭建环境。

我尝试了一些简单的东西,如microstack,但当我想处理上游网络的VLAN或者想要进行一些深入的操作时,遇到了一些困难,所以我选择了使用Kolla Ansible进行构建。

本文介绍的方法只是用于创建开发和实验的OpenStack环境,不适用于生产用途。

本次我们的目标是构建一个既具备一体化配置又能处理上层网络VLAN的系统。

部署目标机器的配置

    • OS: Ubuntu Server 20.04 LTS

 

    • ベアボーン: ASRock Rack 1U2-X570/2T

 

    • CPU: AMD Ryzen 7 5800X

 

    • メモリ: SO-DIMM DDR4 3200MHz PC4-25600 64GB

 

    • NIC: Intel X550-AT2 10GBASE-T x 2 ※今回は1つだけ使用

 

    ストレージ: NVMe SSD 1TB

通常情况下,OpenStack要求使用两个以上的物理网卡,但在具备上行网络VLAN功能和网卡支持VLAN的环境下,只使用一个物理网卡也可以运行,所以我们选择了这种配置。

由于10GBASE-T的SFP+模块与连接至高级L2SW的成本较高,根据经济情况,我们选择了这种配置。

这次部署的环境中,已经预先进行了以下VLAN的配置。

这只是说明即使有这样的设定也能工作,并不表示推荐使用。

    • OpenStack側で使用するインタフェース: enp36s0f1

IPアドレスの割り当て無し
タグ付きのVLANを扱えるように上流のL2SWを設定済み

VLANインタフェース(仮想): vlan2

IPアドレス: 192.168.0.113/24
VID: 2
ホストの管理用・OpenStackの管理に使用
親インタフェース: enp36s0f1

此外,我们将尽可能使用像Git等版本控制系统来管理设置文件的方式进行设置。

通常,kolla-ansible会将配置文件放置在部署源主机的 /etc/kolla/ 目录下,但这样做会导致管理上的不便。因此,我们将进行设置,使其能够将配置文件放置在本地用户目录中已创建的任意目录中,以便用于开发。

构建Python虚拟环境(venv)

请事先在部署源主机上安装Python3。

python -m venv venv
# venv環境をactivateする
source venv/bin/activate

请使用以下命令将kolla-ansible安装到venv环境中。

pip install kolla-ansible

另外,即使安装了kolla-ansible,也不会自动安装Ansible,因此请按照以下页面的指南安装相应版本的Ansible(请注意,安装不支持的版本将导致错误)。

快速入门 — kolla-ansible 13.1.0.dev187 文档

因为kolla-ansible的最新版本是13.1.0,所以我们将安装Ansible 5.x。

pip install 'ansible==5.*'

安装完成后,将依赖关系保存在requirements.txt文件中。

pip freeze > requirements.txt

下次创建部署环境时,请先创建venv环境,然后运行pip install -r requirements.txt进行恢复。

准备配置文件

通过修改配置文件,Kolla-ansible可以部署各种不同的OpenStack配置。

由于该设置选项可以考虑诸如HA配置等方面的设置,可提供非常多的选项,所以为了追求最低限度的简单运行状态,我们将进行最小限度的更改。

生成密码并加密保存

mkdir kolla-ansible-etc/
cp venv/share/kolla-ansible/etc_examples/kolla/passwords.yml kolla-ansible-etc/
kolla-genpwd -p kolla-ansible-etc/passwords.yml

使用ansible-vault工具来进行强密码加密,确保安全性。请务必记住该密码,因为在部署时需要使用!

ansible-vault encrypt kolla-ansible-etc/passwords.yml

请参考Ansible官方文档了解ansible-vault的机制和用法!

使用Ansible Vault对内容进行加密- Ansible文档

准备globals.yml文件

cp venv/share/kolla-ansible/etc_examples/kolla/globals.yml ./kolla-ansible-etc/

这次将进行如下设置更改。(仅摘取更改的部分)

请将部署目标主机的IP地址和界面进行相应的修正。

# OpenStackの管理用IPアドレス(他と被らないIPアドレスを指定。デプロイすると管理用IFに割り当てられます。)
kolla_internal_vip_address: "192.168.0.140"
# OpenStack管理用に使用するホストのIFを指定
network_interface: "vlan2"
# OpenStackから使用するIF(VLANなどもここを通る)
neutron_external_interface: "enp36s0f1"
# kolla-ansible-etc/以下に配置したconfigを読めるように設定する(相対パスでは動かない)
node_custom_config: "{{ lookup('env', 'PWD') }}/kolla-ansible-etc/config/"
# Dockerのイメージファイルのベースになるディストリビューション(今回はUbuntuを指定)
kolla_base_distro: "ubuntu"
# デプロイするOpenStackのバージョン(今回はXenaを指定)
openstack_release: "xena"
# ボリュームの格納先にCinderを使う
enable_cinder: "yes"
enable_cinder_backend_nfs: "yes"
# VLANを使用できるようにする
neutron_tenant_network_types: "vxlan,vlan"

准备Cinder和Neutron的设置。

我会指定存储卷所在的NFS服务器和路径。

如果使用外部NFS服务器,请提供该服务器的IP地址;如果在一体化配置中部署服务器本身,请提供管理用接口(IF)的IP地址。(在这种情况下,请确保根据接下来的步骤设置NFS服务器配置)

192.168.0.113:/share/cinder

为了使VLAN可用,我们将更改Neutron的设置。

[ml2_type_vlan]
network_vlan_ranges = physnet1

提供具备一体化构造的库存。

mkdir inventory
cp venv/share/kolla-ansible/ansible/inventory/* inventory/

只提取更改的部分

# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.

[control]
noka ansible_connection=local

[network]
noka ansible_connection=local

[compute]
noka ansible_connection=local

[storage]
noka ansible_connection=local

[monitoring]
noka ansible_connection=local

[deployment]
noka ansible_connection=local

# You can explicitly specify which hosts run each project by updating the
# groups in the sections below. Common services are grouped together.

如果要在执行Ansible的主机上进行部署,请将ansible_connection设为local。如果要在其他主机上进行部署,则需要进行单独的SSH认证配置。

连接方法和详细信息 — Ansible 文档

配置NFS服务器

这次我们采用全部一体的结构,将部署的服务器本身设为NFS服务器,将卷存储在此处。

我认为原本应该使用Ansible来配置这些设置,但是由于需要编写额外的playbook,并且为了不偏离主题,只记录简单的步骤。

sudo apt install nfs-kernel-server
mkdir -p /share/cinder
chown nobody:nogroup /share/cinder
/share/cinder 192.168.0.0/24(rw,sync,no_subtree_check)
sudo systemctl enable nfs-kernel-server
sudo systemctl restart nfs-kernel-server

在Ubuntu 20.04上设置NFS挂载的方法 | DigitalOcean

进行部署

部署会按照 bootstrap -> check -> deploy 的顺序进行。如果在中途遇到错误,请仔细检查并确认错误。

一旦开始部署就请耐心等待,因为整个过程大约需要20分钟左右。

ANSIBLE_BECOME_ASK_PASS=TRUE kolla-ansible -i inventory/all-in-one --configdir $(pwd)/kolla-ansible-etc/ --passwords kolla-ansible-etc/passwords.yml --ask-vault-pass bootstrap-servers
ANSIBLE_BECOME_ASK_PASS=TRUE kolla-ansible -i inventory/all-in-one --configdir $(pwd)/kolla-ansible-etc/ --passwords kolla-ansible-etc/passwords.yml --ask-vault-pass prechecks
ANSIBLE_BECOME_ASK_PASS=TRUE kolla-ansible -i inventory/all-in-one --configdir $(pwd)/kolla-ansible-etc/ --passwords kolla-ansible-etc/passwords.yml --ask-vault-pass deploy

另外,虽然并非必须,但如果您要在命令行上操作OpenStack并生成用于初始化的脚本,请执行以下 post-deploy 命令。

生成的kolla-ansible-etc/admin-openrc.sh文件中包含了敏感信息,请小心处理,可以将其添加到.gitignore中。

ANSIBLE_BECOME_ASK_PASS=TRUE kolla-ansible -i inventory/all-in-one --configdir $(pwd)/kolla-ansible-etc/ --passwords kolla-ansible-etc/passwords.yml --ask-vault-pass post-deploy

最后

如果部署成功,OpenStack的控制面板(Horizon)应该出现在之前指定的管理用IP地址上。

image.png

(您可以使用存储在 kolla-ansible-etc/passwords.yml 中的管理员帐户登录)