OpenStack 安装 DevStack 多节点

OpenStack   2024-12-06 10:53   220   0  

多节点实验室

这是OpenStack在具有多个物理服务器的现实测试配置中的示例。

先决条件:Linux 和网络

最小安装

您需要一台全新安装的 Linux 系统。可以下载 Minimal CD 以用于 Ubuntu 版本,因为 DevStack 将下载并安装所有额外的依赖项。Fedora 的网络安装 ISO 可在 Fedora 获取,而 CentOS/RHEL 的网络安装 ISO 可在 CentOS/RHEL 获取。

安装几个软件包以启动配置:

apt-get install -y git sudo || yum install -y git sudo

网络配置

实验的第一阶段使用 OpenStack 的 FlatDHCP 网络控制器,因此只需要一个网络。该网络应位于自己的子网中,并且不应使用 DHCP;主机 IP 和浮动 IP 池将来自此块。此示例使用以下配置:

  • 网关:172.30.0.1

  • 物理节点:172.30.12.11-172.30.12.99

  • 浮动 IPs:172.30.12.200-172.30.12.254

为每个节点配置静态 IP。对于 Ubuntu,您可以编辑 /etc/network/interfaces 文件,示例如下:

auto eth0
iface eth0 inet static
   address 172.30.12.11
   netmask 255.255.0.0
   gateway 172.30.0.1

对于 Fedora and CentOS/RHEL edit /etc/sysconfig/network-scripts/ifcfg-eth0:

BOOTPROTO=static
IPADDR=172.30.12.11
NETMASK=255.255.0.0
GATEWAY=172.30.0.1

安装准备

添加 DevStack 用户

OpenStack 以具有 sudo 权限的非 root 用户身份运行。用户名称没有特别要求,这里我们使用 stack。每个节点都必须使用相同的名称,并且最好具有相同的 UID。如果您在操作系统安装期间创建了用户,可以使用该用户并赋予其 sudo 权限。否则,请按照以下步骤创建 stack 用户:

useradd -s /bin/bash -d /opt/stack -m stack

确保 stack 用户的主目录对所有用户具有可执行权限,因为基于 RHEL 的发行版通常将其创建为 700,而 Ubuntu 21.04 及更高版本则为 750,这可能会在部署过程中导致问题。

chmod +x /opt/stack

该用户在安装和操作过程中将对系统进行许多更改,因此需要拥有无需密码即可获得 root 权限的 sudo 权限。

echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

从这里开始使用 stack 用户。注销并以 stack 用户身份登录。

设置 SSH

为每个节点上的 stack 用户配置 SSH 密钥以便进行访问,步骤如下:

mkdir ~/.ssh; chmod 700 ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys

下载 DevStack

获取 DevStack 的最新版本,请按照以下步骤操作:

git clone https://opendev.org/openstack/devstack
cd devstack

到目前为止,所有步骤都适用于集群中的每个节点。从这里开始,集群控制器(又名“头节点”)和计算节点之间存在一些差异。

配置群集控制器

集群控制器运行所有OpenStack服务。在local.conf中配置集群控制器的DevStack:

[[local|localrc]]
HOST_IP=172.30.12.11
FIXED_RANGE=10.10.0.0/16
FLOATING_RANGE=172.30.12.200/25
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=admin
DATABASE_PASSWORD=admin
RABBIT_PASSWORD=admin
SERVICE_PASSWORD=admin
SYSLOG=True
SYSLOG_HOST=172.30.12.11
VOLUME_BACKING_FILE_SIZE=20G
enable_service s-proxy s-object s-container s-account
SWIFT_DATA_DIR=/opt/stack/data/swift
SWIFT_CONF_DIR=/etc/swift
# 设置循环挂载盘的大小
SWIFT_LOOPBACK_DISK_SIZE=10G
# 使用循环挂载文件来存储卷
VOLUME_BACKING_FILE_SIZE=30G
# 禁用 LVM 卷组
VOLUME_GROUP_NAME=

在多节点配置中,私有子网中的前10个左右的IP通常是保留的。将此添加到local.sh中,使其在每次stack.sh运行后运行:

stack@openstack-01:~/devstack$ cat /opt/stack/devstack/local.sh
#!/bin/bash

# 保留前10个IP地址
for i in `seq 1 10`; do
    /opt/stack/nova/bin/nova-manage fixed reserve 10.10.0.$i
done

启动OpenStack:

./stack.sh

一系列活动随之展开。完成后,您将看到 stack.sh 工作的总结,包括相关的 URL、账户和密码,以便访问您崭新的 OpenStack。最近的日志文件可在 stack.sh.log 中找到。

配置计算节点

计算节点只运行OpenStack工作服务。对于其他机器,使用以下命令创建一个local.conf

[[local|localrc]]
HOST_IP=172.30.12.12 # 按计算节点更改此设置
FIXED_RANGE=10.10.0.0/16
FLOATING_RANGE=172.30.12.200/25
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=admin
DATABASE_PASSWORD=admin
RABBIT_PASSWORD=admin
SERVICE_PASSWORD=admin
DATABASE_TYPE=mysql
SERVICE_HOST=172.30.12.11
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,c-vol,placement-client,ovn-controller,ovs-vswitchd,ovsdb-server,q-ovn-metadata-agent
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_lite.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
SYSLOG=True
SYSLOG_HOST=172.30.12.11
VOLUME_BACKING_FILE_SIZE=20G
enable_service s-proxy s-object s-container s-account
SWIFT_DATA_DIR=/opt/stack/data/swift
SWIFT_CONF_DIR=/etc/swift
# 设置循环挂载盘的大小
SWIFT_LOOPBACK_DISK_SIZE=10G
# 使用循环挂载文件来存储卷
VOLUME_BACKING_FILE_SIZE=30G
# 禁用 LVM 卷组
VOLUME_GROUP_NAME=

启动OpenStack:

./stack.sh

一系列活动随之展开。完成后,您将看到 stack.sh 工作的总结,包括相关的 URL、账户和密码,以便访问您崭新的 OpenStack。最近的日志文件可以在 stack.sh.log 中找到。

从 Ocata 版本开始,Nova 需要进行 Cells v2 部署。在可以使用计算节点服务之前,必须将计算节点服务映射到一个单元。 在每个计算节点被堆叠后,请验证它是否出现在 nova service-list --binary nova-compute 的输出中。计算服务是异步注册到单元数据库中的,因此可能需要轮询。 一旦计算节点服务出现,请从控制节点运行 ./tools/discover_hosts.sh 脚本,将计算主机映射到单个单元。 主控节点上运行的计算服务将在堆叠控制节点时自动发现,因此这实际上只需要为子节点执行。

卸载 DevStack

关闭 OpenStack 现在只需运行包含的 unstack.sh 脚本即可:

./unstack.sh

可以使用 clean.sh 进行更彻底的清理。它会删除某些麻烦的包,并尝试将系统恢复到一个状态,以便可以可靠地更改数据库或队列管理器。

./clean.sh

有时,正在运行的实例不会被清理。DevStack在运行时尝试这样做,但有时仍需要手动完成:

sudo rm -rf /etc/libvirt/qemu/inst*
sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy

进一步了解

附加用户

DevStack 创建了两个 OpenStack 用户(admin 和 demo)以及两个项目(同样是 admin 和 demo)。admin 用户显而易见,是一个具有特权的管理账户,同时是 admin 和 demo 项目的成员。demo 用户是一个普通用户账户,仅是 demo 项目的成员。可以通过仪表板创建额外的 OpenStack 用户,但有时通过脚本批量创建会更方便,尤其是因为每次运行 stack.sh 时这些用户都会被清除。以下步骤适合脚本化:

# 获取管理员权限
. openrc admin admin

# 列出现有项目
openstack project list

# 列出现有用户
openstack user list

# 添加用户和项目
NAME=bob
PASSWORD=BigSecret
PROJECT=$NAME
openstack project create $PROJECT
openstack user create $NAME --password=$PASSWORD --project $PROJECT
openstack role add Member --user $NAME --project $PROJECT
# 成员角色由stack.sh创建
# openstack角色分配列表

Swift

Swift,即 OpenStack 对象存储,要求占用大量资源,并且在 DevStack 中默认是禁用的。DevStack 中的支持旨在实现最小安装,但可以用于测试。要实现真正的多节点 Swift 测试,需要额外的步骤。启用它的方法很简单,只需在 local.conf 中启用 Swift 服务:

enable_service s-proxy s-object s-container s-account

Swift(OpenStack 对象存储)将其数据文件放在 SWIFT_DATA_DIR(默认路径为 /opt/stack/data/swift)。创建的数据“分区”(实际上是一个循环挂载的文件)的大小由 SWIFT_LOOPBACK_DISK_SIZE 设置。Swift 的配置文件位于 SWIFT_CONF_DIR(默认路径为 /etc/swift)。所有这些设置都可以在(wait for it ……)local.conf 中进行覆盖。

Volumes

DevStack 将自动使用名为 stack-volumes 的现有 LVM 卷组来存储云创建的卷。如果 stack-volumes 不存在,DevStack 将设置一个循环挂载的文件来包含它。如果默认大小不足以满足所需卷的数量和大小,可以通过在 local.conf 中设置 VOLUME_BACKING_FILE_SIZE 来覆盖(大小采用与 truncate 兼容的格式,例如 24G)。

stack-volumes 可以在任何受 Linux LVM 支持的物理卷上预先创建。可以通过在 localrc 中设置 VOLUME_GROUP_NAME 来更改卷组的名称。stack.sh 在清理之前的运行时,会删除 VOLUME_GROUP_NAME 中以 VOLUME_NAME_PREFIX 开头的所有逻辑卷。建议不要将根卷组用作 VOLUME_GROUP_NAME

创建卷组的具体细节取决于所涉及的服务器硬件,但大致如下:

pvcreate /dev/sdc
vgcreate stack-volumes /dev/sdc

Syslog

DevStack 能够使用 rsyslog 来聚合集群中的日志。默认情况下该功能是关闭的;要启用它,请在 local.conf 中设置 SYSLOG=TrueSYSLOG_HOST 默认设置为 HOST_IP;在计算节点上,必须将其设置为集群控制器的 IP,以便将 syslog 输出发送到那里。在上面的示例中,请将以下内容添加到计算节点的 local.conf 中:

SYSLOG_HOST=172.30.12.11

使用替代的仓库/分支

所有 OpenStack 服务的 git 仓库在 stackrc 中定义。由于此文件是 DevStack 包的一部分,对其进行的更改可能会在应用更新时被覆盖。stackrc 中的每个设置都可以在 local.conf 中重新定义。

要更改某个特定 OpenStack 服务所创建的仓库或分支,只需更改与该服务对应的 *_REPO*_BRANCH 的值。

在对仓库或分支进行更改后,如果 localrc 中未设置 RECLONE,可能需要从 /opt/stack 中删除相应的目录,以强制 git 重新克隆该仓库。

例如,要从主 nova 仓库中提取 nova(OpenStack Compute)的提议发布候选版本:

NOVA_BRANCH=rc-proposed

要从一个实验性分支中提取 glance(OpenStack 镜像服务):

GLANCE_BRANCH=try-something-big
GLANCE_REPO=https://github.com/mcuser/glance.git

你可能需要知道的事项

设置 MySQL 密码

如果你忘记设置 root 密码,可以执行以下操作:

mysqladmin -u root -pnova password 'supersecret'

在线迁移

为了使在线迁移能够通过默认的在线迁移 URI 工作:

[libvirt]
live_migration_uri = qemu+ssh://stack@%s/system

SSH 密钥需要在每个计算节点之间交换:

  1. 源节点的 root 用户的公钥 RSA(通常位于 /root/.ssh/id_rsa.pub)需要添加到目标节点的 stack 用户的 authorized_keys 文件中(~stack/.ssh/authorized_keys)。可以通过手动将源节点文件的内容复制到目标节点来完成此操作。如果你为 stack 用户配置了密码,则可以使用以下命令来完成相同的操作:

    ssh-copy-id -i /root/.ssh/id_rsa.pub stack@DESTINATION
  2. 目标主机的公钥 ECDSA (/etc/ssh/ssh_host_ecdsa_key.pub) 需要添加到源节点的 root 用户的 known_hosts 文件中 (/root/.ssh/known_hosts)。可以通过在源节点上运行以下命令来完成此操作(必须使用主机名):

    ssh-keyscan -H DEST_HOSTNAME | sudo tee -a /root/.ssh/known_hosts
  3. 验证通过 SSH 登录是否可以无密码进行:

    ssh -i /root/.ssh/id_rsa stack@DESTINATION

本质上,这意味着每个计算节点的 root 用户的公钥 RSA 必须存在于其他每个计算节点的 stack 用户的 authorized_keys 文件中,同时每个计算节点的公钥 ECDSA 需要在其他每个计算节点的 root 用户的 known_hosts 文件中。请注意,如果 root 用户或 stack 用户没有 SSH 密钥,可以使用以下命令生成一个:

ssh-keygen -t rsa

上述步骤是必要的,因为当 live_migration_uri 使用 “qemu:///system” 系列 URI 时,libvirtd 以 root 身份运行。有关更多信息,请参见 libvirt 文档


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。