私有云(三)双节点部署openstack
节点规划:
节点类型 | 主机名 | Ip |
控制节点 | Controller | 内部管理:192.168.45.10 实例通信:192.168.119.10 |
计算节点 | Compute1 | 内部管理:192.168.45.20 实例通信:192.168.119.20 |
环境准备:
在物理机上申请两台安装了 openEuler-22.09 操作系统的虚拟机分别作为 OpenStack 控
制节点和计算节点,处理器处勾选“虚拟化 IntelVT-x/EPT 或 AMD-V/RVI(V)”。控制节点
类型为 4 vCPU、4 GB内存、100 GB系统硬盘;计算节点类型为 4vCPU、4 GB内存、
100GB系统磁盘以及 4 个5GB额外磁盘;需要给虚拟机设置两个网络接口,网络接口 1 设
置为内部网络,其网卡使用仅主机模式,作为控制节点通信和管理使用,网络接口 2 设置
为外部网络,其网卡使用 NAT 模式,主要作为控制节点的数据网络,在集群部署完成后创
建的云主机使用网络接口 2 的网卡。
系统环境:
修改主机名
Controller节点:
hostnamectl set-hostname controller
bash
Compute1节点:
hostnamectl set-hostname compute1
bash
Controlle节点网卡配置如下:
ens33
ens34
重启网卡
nmcli c reload
nmcli c up ens33
nmcli c up ens34
yum源更新
yum update
在使用 Kolla-Ansible 部署 OpenStack 时,确保所有节点网卡名一致是非常重要的,这
有助于更加方便地进行脚本的维护和管理。
禁用网卡命名规则,在/etc/default/grub 文件里的 GRUB_CMDLINE_LINUX 后面追加
net.ifnames=0 biosdevname=0
vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/openeuler-swap rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap crashkernel=512M net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"
更新 GRUB2 引导加载程序配置,并将其写入系统的引导记录中
判断操作系统是基于UEFI模式引导的系统还是基于BIOS引导的系统
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
此处是BIOS,使用下面的命令
grub2-mkconfig -o /boot/grub2/grub.cfg
修改网卡名为 eth0、eth1
cd /etc/sysconfig/network-scripts/
mv ifcfg-ens33 ifcfg-eth0
mv ifcfg-ens34 ifcfg-eth1
sed -i "s#ens33#eth0#" ifcfg-eth0
sed -i "s#ens34#eth1#" ifcfg-eth1
重启系统,验证是否修改成功
可以看到修改成功
也可使用命令查看
nmcli c show
在两个节点上都进行如此操作,确保网卡名相同
安装 Ansible 和 Kolla-ansible
Controller节点:
下载并安装pip3
dnf -y install python3-pip
使用镜像源来加速 pip 安装包的下载速度
mkdir .pip
vi .pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
更新 Python3 中的 pip 工具到最新版本
pip3 install --ignore-installed --upgrade pip
安装 Ansible,并查看所安装的版本号
pip3 install -U 'ansible>=4,<6'
ansible --version
安装 Kolla-ansible 和 Kolla-ansible 环境必需的依赖项
dnf -y install git python3-devel libffi-devel gcc openssl-devel python3-libselinux
dnf -y install openstack-kolla-ansible
kolla-ansible --version
Compute1计算节点
dnf -y install python3-libselinux
控制节点controller:
创建 kolla-ansible 配置文件目录
mkdir -p /etc/kolla/{globals.d,config}
chown $USER:$USER /etc/kolla
将 inventory 文件复制到/etc/ansible 目录
mkdir /etc/ansible
cp /usr/share/kolla-ansible/ansible/inventory/* /etc/ansible
安装 Ansible Galaxy 的依赖项
pip3 install cryptography==38.0.4
找到/usr/share/kolla-ansible/requirements.yml文件,将其修改为以下内容
---
collections:
- name: https://jihulab.com/james-curtis/ansible-collection-kolla
type: git
version: stable/yoga
执行命令
kolla-ansible install-deps
Ansible运行配置优化:
在使用 Kolla-ansible 部署 OpenStack 时,它会执行大量的命令和任务,因此对 Ansible
进行调优可以加快执行速度,具体的优化如下
[root@controller ~]# vi /etc/ansible/ansible.cfg
[defaults]
#SSH 服务关闭密钥检测
host_key_checking=False
#如果不使用 sudo,建议开启
pipelining=True
#执行任务的并发数
forks=100
timeout=800
#禁用警告#
devel_warning = False
deprecation_warnings=False
#显示每个任务花费的时间
callback_whitelist = profile_tasks
#记录 Ansible 的输出,相对路径表示
log_path= wxic_cloud.log
#主机清单文件,相对路径表示
inventory = openstack_cluster
#命令执行环境,也可更改为/bin/bash
executable = /bin/sh
remote_port = 22
remote_user = root
#默认输出的详细程度
#可选值 0、1、2、3、4 等
#值越高输出越详细
verbosity = 0
show_custom_stats = True
interpreter_python = auto_legacy_silent
[colors]
#成功的任务绿色显示
ok = green
#跳过的任务使用亮灰色显示
skip = bright gray
#警告使用亮紫色显示
warn = bright purple
[privilege_escalation]
become_user = root
[galaxy]
display_progress = True
Kolla-ansible 环境初始配置:
进入/etc/ansible 目录,编辑 openstack_cluster 清单文件来指定集群节点的主机及其所属
组。在这个清单文件中还可以用来指定控制节点连接集群各个节点的用户名、密码等
cd /etc/ansible/
awk '!/^#/ && !/^$/' multinode > openstack_cluster
修改openstack_cluster文件,定义 control、network、compute、monitoring 和 storage 五个组,指定了各个节点需要承担的角色,并且在组 all:vars 中定义了全局变量,各组中会有一些变量配置信息,这些变量主要用来连接服务器。其中 ansible_password 用来指定登录服务器的密码,ansible_become 用来指定是否使用 sudo 来执行命令,其他组内的内容保持默认即可,不用修改
检查主机清单文件是否配置正确
dnf -y install sshpass
ansible all -m ping
配置 OpenStack 各服务组件密码
在使用 Kolla-ansible 部署 OpenStack Yoga 平台时建议使用随机密码生成器来生成各个
服务的密码
kolla-genpwd
修改 Horizon 界面登录密码为 123456
sed -i 's/keystone_admin_password: .*/keystone_admin_password: 123456/g' /etc/kolla/passwords.yml
grep keystone_admin /etc/kolla/passwords.yml
可以看到修改成功
编辑 globals.yml 文件
在使用 Kolla-ansible 部署 OpenStack Yoga 平台时,最重要的便是 globals.yml 文件的修
改,通过阅读 OpenStack 官方文档的服务指南,按照自己的需求选择安装相关的组件。
本次部署时安装了较多组件,具体的组件列表可查看以下修改后的 globals.yml 文件,
其中要注意一个选项是 kolla_internal_vip_address 的地址,该地址为 192.168.45.0/24 网段里的任何一个未被使用的 IP(本次部署使用 192.168.45.10),部署完成后使用该地登
录 Horizon
cd /etc/kolla/
cp globals.yml{,_bak}
vi globals.yml
---
kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "yoga"
kolla_internal_vip_address: "192.168.45.10"
docker_registry: "quay.nju.edu.cn"
network_interface: "eth0"
neutron_external_interface: "eth1"
neutron_plugin_agent: "openvswitch"
openstack_region_name: "RegionWxic"
enable_haproxy: "no"
enable_aodh: "yes"
enable_barbican: "yes"
enable_ceilometer: "yes"
enable_ceilometer_ipmi: "yes"
enable_cinder: "yes"
enable_cinder_backup: "yes"
enable_cinder_backend_lvm: "yes"
enable_cloudkitty: "yes"
enable_gnocchi: "yes"
enable_gnocchi_statsd: "yes"
enable_manila: "yes"
enable_manila_backend_generic: "yes"
enable_neutron_vpnaas: "yes"
enable_neutron_qos: "yes"
enable_neutron_bgp_dragent: "yes"
enable_neutron_provider_networks: "yes"
enable_redis: "yes"
enable_swift: "yes"
glance_backend_file: "yes"
glance_file_datadir_volume: "/var/lib/glance/wxic/"
barbican_crypto_plugin: "simple_crypto"
barbican_library_path: "/usr/lib/libCryptoki2_64.so"
cinder_volume_group: "cinder-wxic"
cloudkitty_collector_backend: "gnocchi"
cloudkitty_storage_backend: "influxdb"
nova_compute_virt_type: "kvm"
swift_devices_name: "KOLLA_SWIFT_DATA"
在/etc/kolla/config/目录自定义 Neutron 和 Manila 服务的一些配置,在部署集群时使用
自定义的配置覆盖掉默认的配置
cd /etc/kolla/config/
mkdir neutron
[root@controller config]# cat neutron/dhcp_agent.ini
[DEFAULT]
dnsmasq_dns_servers = 8.8.8.8,223.6.6.6,119.29.29.29
[root@controller config]# cat neutron/ml2_conf.ini
[ml2]
tenant_network_types = flat,vxlan,vlan
[ml2_type_vlan]
network_vlan_ranges = provider:10:1000
[ml2_type_flat]
flat_networks = provider
[root@controller config]# cat neutron/openvswitch_agent.ini
[securitygroup]
firewall_driver = openvswitch
[ovs]
bridge_mappings = provider:br-ex
cat manila-share.conf
存储节点磁盘初始化
初始化 Cinder 服务磁盘
在 compute01 节 点 使 用 一 块 5GB 磁 盘 创 建 cinder-volumes 卷 组 , 该 卷 组 名 和globals.yml 里面“cinder_volume_group”指定的参数一致
Compute1节点:
使用如下命令查看新增的硬盘名
fdisk -l
此处用sdb
pvcreate /dev/sdb
vgcreate cinder-wxic /dev/sdb
vgs cinder-wxic
初始化 Swift 服务磁盘
在 compute01 节点使用三块5 GB磁盘用于 Swift 存储设备的磁盘,并添加特殊的分区
名 称 和 文 件 系 统 标 签 , 编 写 Swift_disk_init.sh 脚 本 初 始 化 磁 盘 。 其 中 设 备 名KOLLA_SWIFT_DATA 和 globals.yml 文件里面”swift_devices_name”指定的参数一致
编写脚本
vi Swift_disk_init.sh
index=0
for d in sdc sdd sde; do
parted /dev/$d -s -- mklabel gpt mkpart KOLLA_SWIFT_DATA 1 -1
sudo mkfs.xfs -f -L $d /dev/${d}1
((index++))
done
chmod +x Swift_disk_init.sh
./Swift_disk_init.sh
lsblk
parted /dev/sdc print
部署集群环境
dnf -y install python3-openstackclient
为了使部署的控制节点网络路由正常工作,需要在 Linux 系统中启用 IP 转发功能,修
改 controller 和 compute01 节点的/etc/sysctl.conf 文件,并配置在系统启动时自动加载
br_netfilter 模块
控制节点controller:
cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
临时加载模块,重启后失效
modprobe br_netfilter
重新加载配置
sysctl -p /etc/sysctl.conf
创建 yoga.service 文件,设置系统开机自动加载 br_netfilter 模块
cat << EOF > /usr/lib/systemd/system/yoga.service
[Unit]
Description=Load br_netfilter and sysctl settings for OpenStack
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/modprobe br_netfilter
ExecStart=/usr/sbin/sysctl -p
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now yoga.service
Compute1节点:
cat << MXD >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
MXD
modprobe br_netfilter
sysctl -p /etc/sysctl.conf
cat << MXD > /usr/lib/systemd/system/yoga.service
[Unit]
Description=Load br_netfilter and sysctl settings for OpenStack
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/modprobe br_netfilter
ExecStart=/usr/sbin/sysctl -p
[Install]
WantedBy=multi-user.target
MXD
systemctl enable --now yoga.service
在控制节点使用命令安装 OpenStack 集群所需要的基础依赖项和修改一些配置文件
(如安装 Docker 和修改 Hosts 文件等)
kolla-ansible bootstrap-servers
修改docker加速器
vi /etc/docker/daemon.json
{
"bridge": "none",
"default-ulimits": {
"nofile": {
"hard": 1048576,
"name": "nofile",
"soft": 1048576
}
},
"ip-forward": false,
"iptables": false,
"registry-mirrors": [
"https://ig1vljsx.mirror.aliyuncs.com",
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
重启服务
systemctl restart docker
在 控 制 节 点 生 成 Swift 服 务 所 需 要 的 环 , 编 写 Swift-init.sh 脚 本 , 其 中
STORAGE_NODES 的 IP 为 Swift 磁盘所在节点的 IP。
拉取镜像
docker pull kolla/oraclelinux-source-swift-base:4.0.0
编写脚本
vi Swift-init.sh
STORAGE_NODES=(192.168.45.20)
KOLLA_SWIFT_BASE_IMAGE="kolla/oraclelinux-source-swift-base:4.0.0"
mkdir -p /etc/kolla/config/swift
# Object ring
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/object.builder create 10 3 1
for node in ${STORAGE_NODES[@]}; do
for i in {0..2}; do
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/object.builder add r1z1-${node}:6000/d${i} 1;
done
done
# Account ring
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/account.builder create 10 3 1
for node in ${STORAGE_NODES[@]}; do
for i in {0..2}; do
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/account.builder add r1z1-${node}:6001/d${i} 1;
done
done
# Container ring
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/container.builder create 10 3 1
for node in ${STORAGE_NODES[@]}; do
for i in {0..2}; do
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/container.builder add r1z1-${node}:6002/d${i} 1;
done
done
for ring in object account container; do
docker run \
--rm \
-v /etc/kolla/config/swift/:/etc/kolla/config/swift/ \
$KOLLA_SWIFT_BASE_IMAGE \
swift-ring-builder \
/etc/kolla/config/swift/${ring}.builder rebalance;
done
执行脚本
sh Swift-init.sh
在控制节点进行部署前检查,openEuler22.09 系统执行过程中如果出现 " openEuler
release NA version 22.09 is not supported. Supported releases are: 20.03"提示,不必理会继续接
下来的操作,不会影响后面的部署
kolla-ansible prechecks
在控制节点使用以下命令下载 OpenStack 集群各个节点所需要的全部镜像
docker pull 99cloud/skyline:latest
kolla-ansible pull
kolla-ansible deploy