当前位置: 首页 > news >正文

私有云(三)双节点部署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

http://www.dtcms.com/a/107554.html

相关文章:

  • 自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
  • 111.在 Vue 3 中使用 OpenLayers 实现动态曲线流动图(类似 ECharts 迁徙状态)
  • 从代码学习深度学习 - 残差网络(ResNet)PyTorch版
  • MSVC编译遇到C2059、C2143、C2059、C2365、C2059等错误的解决方案
  • 打开pycharm显示编制索引后卡死
  • C++软件开发架构
  • llm-universe 踩坑记录
  • 数值与字典解决方案第二十五讲:数组的合并拆分及筛选
  • GNSS信号模拟器、导航信号模拟器、导航模拟信号源介绍
  • 如何解决 PyQt5 中的 `xcb` 插件加载错误
  • vue修饰符
  • ns-3使用animation出现文件小、无时间、打开后只有拓扑没有内容
  • 《静默与轰鸣的对决》
  • 什么是向量搜索Vector Search?
  • work03_1 实现一个简单的计算器,能够处理加法、减法、乘法和除法
  • 四、Bug篇+用例篇
  • Docker学习--容器操作相关命令--docker inspect 命令
  • C/C++指针核心难点全解析:从内存模型到实战避坑指南
  • AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
  • AI小白的第十天:影响模型泛化能力的因素以及对策
  • spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
  • 系统思考与时间管理
  • 在MFC中使用Qt(五):MFC和Qt的共存和交互
  • 经典算法 最长公共子序列问题
  • GPU与CUDA对应
  • 阿里云服务器对接高防的时候可能会出现的问题
  • 鸿蒙应用元服务开发-Account Kit 常见问题说明
  • BRC认证是什么?如何获得BRC认证?对企业发展的好处
  • 解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
  • 数据分析与知识发现 论文阅读【信息抽取】