Kolla-ansible部署OpenStack集群

news/2024/5/19 12:59:40/ 标签: openstack

0. OpenStack 部署

系统要求

单机部署最低配置:

  • 2张网卡
  • 8G内存
  • 40G硬盘空间

主机系统:

  • CentOS Stream 9
  • Debian Bullseye (11)
  • openEuler 22.03 LTS
  • Rocky Linux 9- Ubuntu Jammy (22.04)

官方不再支持CentOS 7作为主机系统,我这里使用的是Rocky Linux 9.2(最小化安装)

如果这些主机中,有网卡名称不一致的问题,则可以通过team来使网卡名称一致

关闭所有节点的防火墙和selinux

systemctl disable --now firewalld

setenforce 0;sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config

1. deploy节点安装依赖

1.1 安装基础依赖

dnf install git python3-devel libffi-devel gcc openssl-devel python3-libselinux

1.2 安装Ansible额外需要的包

官方文档中没有说明,实际部署过程中,没有这两个包会无法使用pip安装的ansible

dnf install python3-resolvelib sshpass

1.3 设置Python-venv虚拟环境

为了防止与系统的python环境冲突,这里使用虚拟环境安装ansible与kolla-ansible /path/to/venv是虚拟环境的目录,可以自己指定

创建虚拟环境

python3 -m venv /path/to/venv

进入虚拟环境

source /path/to/venv/bin/activate

在虚拟环境中输入deactivate命令,即可退出虚拟环境

更换pip国内源,更新pip

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install -U pip

1.4 安装Ansible

Kolla-ansible需要ansible-core2.13~2.14的版本,这里需要指定版本安装

pip install ansible==7.7.0 ansible-core==2.14.11

1.5 所有节点安装docker

控制节点、网络节点、存储节点和计算节点

2. deploy节点安装Kolla-ansible

2.1 安装本体

pip install git+https://opendev.org/openstack/kolla-ansible@stable/2023.1

2.2 获取Kolla配置文件

创建配置文件夹

mkdir /etc/kolla

复制global.ymlpassword.yml到配置文件夹

cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla

2.3 获取Ansible清单文件

复制all-in-onemultinode两个清单文件,分别对应了单机部署与多节点部署

cp /path/to/venv/share/kolla-ansible/ansible/inventory/* /etc/kolla

3. 安装Ansible Galaxy依赖

kolla-ansible install-deps    #可能偶现ERROR,多尝试

4. 配置Ansible

单机部署时,可以跳过这一步

编辑/etc/ansible/ansible.cfg,如果没有则需要先创建,将下面的内容添加到配置文件中

[defaults]
host_key_checking=False
pipelining=True
forks=100

5. 准备初始化配置 deploy

5.1 修改hosts

单机部署时,可以跳过这一步

在部署机的hosts中添加需要部署的主机的主机名,后续会自动同步到所有节点 编辑/etc/hosts文件,我这里准备部署3台控制节点与3台计算节点 (共用)

还需要配置deploy节点到这几个节点的 SSH互信

10.0.0.10 control01.openstack.instack.cloud control01
10.0.0.20 control02.openstack.instack.cloud control02
10.0.0.21 control03.openstack.instack.cloud control03

5.2 准备清单文件

  • 单机部署时,使用all-in-one清单文件- 多节点部署时,使用multinode清单文件

单机部署时,可以不用修改all-in-one清单文件

下面是我的multinode清单文件的开头部分,供参考

[all]
control01
control02
control03[control]
# 指定root密码、管理网卡
control01 # ansible_ssh_pass="root"  network_interface="ens192"
control02 # ansible_ssh_pass="root"  network_interface="ens192"
control03 # ansible_ssh_pass="root"  network_interface="ens192"[network:children]
# 可在组名后添加:children来对组进行嵌套
control[compute]
# 指定root密码、管理网卡、外部网卡
control [monitoring:children]
control[deployment]
localhost       ansible_connection=local

详细的配置规则见 Ansible文档(opens new window)

配置完成后,使用下面的命令测试Ansible的连通性

ansible -i multinode all -m ping

5.3 生成密码

kolla-genpwd

密码存储在/etc/kolla/passwords.yml

推荐自己修改一下某些密码,比如keystone_admin_password

5.4 配置 global.yml

镜像选择

Kolla可以选择多种镜像版本:

  • CentOS Stream (centos)- Debian (debian)- Rocky (rocky)- Ubuntu (ubuntu) 官方推荐新安装的使用rocky或ubuntu,这里使用和主机相同的rocky发行版

提示

默认不用修改

kolla_base_distro: "rocky"

镜像仓库

国内可能访问quay.io比较慢,可以指定国内的quay.io源

docker_registry: "quay.nju.edu.cn"

自建仓库

docker_registry: "hub.huahuayun.cloud"

登录

docker_registry_insecure: "yes"
docker_registry_username: "admin"
# docker_registry_password在password.yml中配置
#docker_registry: "quay.nju.edu.cn"
docker_registry: "hub.huahuayun.cloud"

网络

管理网络的网卡,也用于主机之间的通信,若非所有主机网卡名都是一致的,可以使用bond或team技术

network_interface: "bond0"

连接外部网络的网卡,需要一个开启的,没有配置IP的网卡

neutron_external_interface: "bond1"

用于管理的浮动IP,由keepalived提供高可用性,必须是管理网络中没有被使用的地址

kolla_internal_vip_address: "10.0.0.250"
kolla_external_vip_address: "192.168.110.110"
kolla_external_vip_interface: "bond2"

监控

enable_prometheus

虚拟机高可用

enable_hacluster

中心日志

enable_central_logging: "yes"
enable_venus: "yes"

global.yml中所有的选项,都可以在清单文件中为每个主机单独配置。上面的multinode文件中,指定了每台主机的管理网卡与外部网卡。

[root@huahuadeploy kolla]# cat globals.yml | grep -v '^#' | grep -v '^$'
---
workaround_ansible_issue_8743: yes
kolla_internal_vip_address: "10.20.10.110" # 内部管理网络VIP,internal endpoint使用
kolla_external_vip_address: "192.168.110.110" # (可选)外部管理网络VIP, public endpoint使用
docker_registry: "hub.huahuayun.cloud" # 本地Harbor仓库,或使用quay.io或使用quay.nju.edu.cn
docker_registry_insecure: "yes"
docker_registry_username: "admin"
network_interface: "bond0"  # 内部管理网络网卡名称,使用bond可以统一不同节点的网卡名称或者提供网络高可用
kolla_external_vip_interface: "bond2" # (可选)有外部管理网VIP时填写
neutron_external_interface: "bond1" # 提供者网络,一般用于公网IP和弹性IP
keepalived_virtual_router_id: "110" # 同一网络下有多个集群时需要不同的router_id,类型为uint8
openstack_region_name: "ChengDuTest"
enable_hacluster: "yes" # 是否启用实例高可用,节点故障时迁移
enable_barbican: "yes"
enable_ceilometer: "yes"
enable_ceilometer_ipmi: "yes"
enable_central_logging: "yes"
enable_cinder: "yes"
enable_cinder_backup: "yes"
enable_fluentd: "yes"
enable_gnocchi: "yes"
enable_gnocchi_statsd: "yes"
enable_grafana: "yes"
enable_ironic: "yes" # 是否需要包括裸金属服务
enable_mariabackup: "yes"
enable_neutron_dvr: "yes"
enable_neutron_qos: "yes"
enable_prometheus: "yes"
enable_redis: "yes" # 是否使用redis提供缓存和gnocchi的incoming存储
enable_skyline: "yes"
enable_venus: "yes"
enable_ironic_ipxe: "no"
ironic_dnsmasq_serve_ipxe: false
ceph_glance_keyring: "ceph.client.glance1.keyring"  # ceph相关的默认就行,这里用户和池名称均添加了数字1
ceph_glance_user: "glance1"
ceph_glance_pool_name: "images1"
ceph_cinder_keyring: "ceph.client.cinder1.keyring"
ceph_cinder_user: "cinder1"
ceph_cinder_pool_name: "volumes1"
ceph_cinder_backup_keyring: "ceph.client.cinder-backup1.keyring"
ceph_cinder_backup_user: "cinder-backup1"
ceph_cinder_backup_pool_name: "backups1"
ceph_nova_keyring: "{{ ceph_cinder_keyring }}"
ceph_nova_user: "cinder1" # 重点
ceph_nova_pool_name: "vms1" # 重点
ceph_gnocchi_keyring: "ceph.client.gnocchi1.keyring"
ceph_gnocchi_user: "gnocchi1"
ceph_gnocchi_pool_name: "gnocchi1"
glance_backend_ceph: "yes"
gnocchi_backend_storage: "ceph"
cinder_backend_ceph: "yes"
nova_backend_ceph: "yes"
ironic_dnsmasq_interface: "bond0" # 裸金属dnsmasq默认使用内部管理网
ironic_dnsmasq_dhcp_ranges:- range: "10.20.10.241,10.20.10.250"routers: "10.20.10.254"
ironic_inspector_kernel_cmdline_extras: ['ipa-lldp-timeout=90.0', 'ipa-collect-lldp=1']
prometheus_cmdline_extras: "--web.enable-lifecycle"

6. 配置ceph

我们需要提前部署一个ceph集群,要求ceph的public network和计算节点网络相通

存储池的名称和用户名可以在/etc/kolla/globals.yml中找到并修改

nova_backend_ceph, cinder_backend_ceph, glance_backend_ceph, ceph_cinder_backup_pool_name

ceph_nova_user, ceph_cinder_user, ceph_glance_user, cinder-backup

# Glance
ceph_glance_keyring: "ceph.client.glance1.keyring"
ceph_glance_user: "glance1"
ceph_glance_pool_name: "images1"
# Cinder
ceph_cinder_keyring: "ceph.client.cinder1.keyring"
ceph_cinder_user: "cinder1"
ceph_cinder_pool_name: "volumes1"
ceph_cinder_backup_keyring: "ceph.client.cinder-backup1.keyring"
ceph_cinder_backup_user: "cinder-backup1"
ceph_cinder_backup_pool_name: "backups1"
# Nova  # 重点是cinder1不是nova1
ceph_nova_keyring: "{{ ceph_cinder_keyring }}"
ceph_nova_user: "cinder1"
ceph_nova_pool_name: "vms1"
# Gnocchi
ceph_gnocchi_keyring: "ceph.client.gnocchi1.keyring"
ceph_gnocchi_user: "gnocchi1"
ceph_gnocchi_pool_name: "gnocchi1"

以下均在cephadm节点执行

6.1 创建存储池

ceph osd pool create volumes1
ceph osd pool create images1
ceph osd pool create backups1
ceph osd pool create vms1
ceph osd pool create gnocchi1rbd pool init volumes1
rbd pool init images1
rbd pool init backups1
rbd pool init vms1
ceph osd pool application enable gnocchi1 rgw # 在页面上去设置也可,pools>gnocchi>edit>application>rgw# optional
ceph osd pool create cephfs_data 64 64
ceph osd pool create cephfs_metadata 64 64
ceph osd pool application enable cephfs_data cephfs
ceph osd pool application enable cephfs_metadata cephfs
ceph fs new myfs cephfs_metadata cephfs_data

6.2 创建glance cinder cinder-backup账户

ceph auth get-or-create client.glance1 mon 'profile rbd' osd 'profile rbd pool=images1' mgr 'profile rbd pool=images1'ceph auth get-or-create client.cinder1 mon 'profile rbd' osd 'profile rbd pool=volumes1, profile rbd pool=vms1, profile rbd-read-only pool=images1' mgr 'profile rbd pool=volumes1, profile rbd pool=vms1'ceph auth get-or-create client.cinder-backup1 mon 'profile rbd' osd 'profile rbd pool=backups1' mgr 'profile rbd pool=backups1'ceph auth get-or-create client.gnocchi1 mon "allow r" osd "allow rwx pool=gnocchi1"

6.3 复制keyring

ceph auth get-or-create client.glance1 > /etc/ceph/ceph.client.glance1.keyring
ceph auth get-or-create client.cinder1 > /etc/ceph/ceph.client.cinder1.keyring
ceph auth get-or-create client.cinder-backup1 > /etc/ceph/ceph.client.cinder-backup1.keyring
ceph auth get-or-create client.gnocchi1 > /etc/ceph/ceph.client.gnocchi1.keyring

将上述文件copy到deploy节点的/etc/kolla/config下

.
├── cinder
│   ├── cinder-backup
│   │   ├── ceph.client.cinder-backup.keyring
│   │   ├── ceph.client.cinder.keyring
│   │   └── ceph.conf -> /etc/kolla/config/custom/ceph.conf
│   └── cinder-volume
│       ├── ceph.client.cinder.keyring
│       └── ceph.conf -> /etc/kolla/config/custom/ceph.conf
├── custom
│   └── ceph.conf
├── glance
│   ├── ceph.client.glance.keyring
│   └── ceph.conf -> /etc/kolla/config/custom/ceph.conf
├── gnocchi
│   ├── ceph.client.gnocchi1.keyring
│   └── ceph.conf -> /etc/kolla/config/custom/ceph.conf
├── haproxy
├── ironic
│   ├── ironic-agent.initramfs
│   ├── ironic-agent.kernel
│   └── pxelinux.0
├── nova
│   ├── ceph.client.cinder.keyring
│   └── ceph.conf -> /etc/kolla/config/custom/ceph.conf
└── nova.conf

nova.conf

[DEFAULT]
block_device_allocate_retries = 6000
block_device_allocate_retries_interval = 30
# config drive 能够在 instance 启动时将网络配置信息动态注入到操作系统中
flat_injected = true
[libvirt]
inject_password = true
[filter_scheduler]
enabled_filters = SimpleCIDRAffinityFilter,DifferentHostFilter,JsonFilter,SameHostFilter

7. 配置Ironic(可选)

vim /etc/kolla/globals.yml

enable_ironic: "yes"
enable_ironic_neutron_agent: "{{ enable_neutron | bool and enable_ironic | bool }}"
ironic_dnsmasq_interface: "{{ network_interface }}"
ironic_cleaning_network: "ext_net_test"
ironic_dnsmasq_dhcp_ranges:- range: "192.168.131.10,192.168.131.50"routers: "192.168.2.1"
ironic_dnsmasq_boot_file: "pxelinux.0"
ironic_inspector_kernel_cmdline_extras: ['ipa-lldp-timeout=90.0', 'ipa-collect-lldp=1']

下载镜像 (我们自己有——virt-custom制作的initramfs,允许root登录)

$ curl https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-stable-2023.1.kernel \-o /etc/kolla/config/ironic/ironic-agent.kernel$ curl https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-stable-2023.1.initramfs \-o /etc/kolla/config/ironic/ironic-agent.initramfs

8. 部署

我这里采用多节点部署,使用的是multinode清单文件,单机部署请使用all-in-one清单文件

引导服务器

kolla-ansible -i ./multinode bootstrap-servers  # 检查是否干净,关闭防火墙,安装一些包,这是需要联网的

部署前检查

kolla-ansible -i ./multinode prechecks

开始部署 莫慌,先去掉所有节点外网IP

kolla-ansible -i ./multinode deploy

9. 使用OpenStack

9.1 命令行(OpenStack CLI)

安装CLI客户端

pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/2023.1
pip install python-ironicclient
pip install python-ironic-inspector-client

生成openrc文件

kolla-ansible post-deploy

使用openrc文件

. /etc/kolla/admin-openrc.sh

接下来就可以使用OpenStack CLI了

9.2 网页(Horizon)

浏览器中访问kolla_internal_vip_address or kolla_external_vip_address

skyline默认端口 9999

horizon默认端口80

输入账号密码即可

账号密码可在password.yml中找到

10 另外

若需要多个flat网络,可以通过neutron_bridge_name这个配置选项来配置网卡名称,globals.yaml中不提供此配置,需要自己写,请先跟踪一下ansible脚本


http://www.ppmy.cn/news/1424565.html

相关文章

Linux_CentOS7/8系统 - 关闭图形界面新增用户机制手册

Linux_CentOS7/8系统 - 关闭图形界面新增用户机制手册 在系统完成图形界面安装后重新启动后第一次登入,在图形界面会有新增用户页面,那如果取消关闭可以按以下操作: CTRLALTF2 root账号登录 yum remove gnome-initial-setup -y init 3 init …

正则表达式中?=、?!、?<=、?<!、?:的理解与应用举例

正则表达式就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串表达对字符串的一种过滤逻辑,这篇文章主要给大家介绍了关于正则表达式中?、?!、?<、?<!、?:的理解与应用举例的相关资料,需要的朋友可以参考下 …

深度 | 践行绿色健康可持续发展,这家企业提供了价值范本

文 | 螳螂观察 作者 | 余一 近段时间以来,小米SU7热度一直不减,在展露小米强大品牌号召力的同时,也侧面体现出了当前消费者对于新能源汽车的喜爱。 而消费者选择新能源汽车时,环保因素也起到了至关重要的作用。像前几日&#x…

【2024官方文档版】React-描述IU

系列文章目录 一、快速入门【基础】 二、描述IU 文章目录 系列文章目录二、描述IU1.第一个组件1.1 组件是什么?1.2 构建组件的方法1.3嵌套和组织组件1.4课后作业1.5 小结: 2.组件的导入导出2.1根组件文件2.2 导入导出文件 3. 使用JSX书写标签语言3.1 将HTML转化为JSX3.2作业 …

2024年大唐杯备考

努力更新中…… 第一章 网络架构和组网部署 1.1 5G的网络整体架构 5G网络中的中传、回传、前传(这里属于承载网的概念) CU和DU之间是中传 BBU和5GC之间是回传 BBU和AAU之间是前传(这个好记) 这里竟然还藏了MEC(…

Excel/WPS超级处理器,提取汉字/字母/数字

在职场工作中,经常会遇到单元格中有汉字,数字,字母三者的自由组合,但往往只需要其中的一者,如何快速提取呢,超级处理器,提供了4个功能可选。 超级处理器下载与安装 1)分离字符 将…

数据结构--顺序栈

一.相关概念: 1.栈和队列是操作受限的线性表,是限定性的数据结构; 2.栈分为顺序栈和链式栈 3.栈只能在一端进行操作(插入,删除); 4.栈是限定仅在表尾进行插入或删除操作的线性表.因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom). 5.不含元素地…

IP证书申请流程

目录 域名与IP的关系 SSL证书绑定域名还是绑定IP? IP证书支持免费申请吗? 如何申请IP地址证书 IP类型的SSL证书,又称之为IP SSL,这种SSL证书是专门用于公网IP地址验证的一种数字证书。 主要功能就是解决IP地址明文传输的安全…

Python基础:【练手小实验系列】字符串及正则表达式

文章目录 题目练习题1: 反转字符串练习题2: 字符频率统计练习题3: 验证电子邮件地址练习题4: 寻找字符串中的所有数字练习题5: 简单的Markdown解析器参考答案练习题1: 反转字符串练习题2: 字符频率统计练习题3: 验证电子邮件地址练习题4: 寻找字符串中的所有数字练习题5: 简单的…

CSS单位选择的艺术:何时何地选用何种单位

CSS单位作为网页样式设计的基石,直接影响着元素尺寸、间距、字体大小等视觉呈现。选择合适的单位对于构建响应式、跨设备兼容且易于维护的界面至关重要。本文将深入分析各类CSS单位,并探讨在不同场景下应选用何种单位,同时揭示各单元的优缺点…

自动化运维工具Ansible模块的介绍与使用

文章目录 第1章 ansible介绍1.什么是ansible2.为什么需要ansible3.如何学习ansible 第2章 Ansible安装部署第3章 Ansible主机清单1.什么是主机清单2.主机分组执行3.所有的主机都执行4.SSH使用密码连接并且端口号不是225.同组主机SSH端口号不一样,账号密码也不一样6.…

责任链模式学习进阶--一起学习吧之数据库

上一篇学习了责任链的基本定义和特点 https://mp.csdn.net/mp_blog/creation/editor?not_checkout1&spm1015.2103.3001.8012 本文继续对责任链模式进行深入学习 一、实现过程 责任链模式的实现过程可以分为以下几个步骤: 定义抽象处理者角色(Ha…

国产32位高性价比单片机 XL32F003,最高64 K flash和8 K SRAM

XL32F003系列单片机是32 位 ARMCortex- M0 内核单片机,1.7 V~5.5 V宽工作电压,工作温度范围为-40 C~85 C。最高64 Kbytes flash和8 Kbytes SRAM存储器,主频最高32 MHz。有SOP8/SOP14/SOP16/TSSOP20/SSOP24/QFN20/QFN32多种封装可以选择。XL32…

python把字典值转成浮点型数据

python把字典值转成浮点型数据 1、流程 1、读完数据,转成字典 2、遍历字典,使用正则判断字典值是否为浮点型字符串 3、使用eval把字符串转成浮点型2、代码 """ @contact: 微信 1257309054 @file: test.py @time: 2024/4/19 18:30 @author: LDC ""…

记一次普通的单表查询sql优化,去掉文件排序

一现象: 有空观察了线上某个sql语句执行计划,发现在500多毫秒左右,打算进行下优化。 二步骤: 对查询列assessment_periodic_id、assessment_user_id、create_time添加了组合索引并指定了倒叙。加入create_time 使查询结果不需要在…

汽车充电桩充电效率的四大决定因素

随着电动汽车的快速普及,交流充电桩作为电动汽车的充电基础设施,其充电效率受到了广泛的关注。接下来,我们将深入探讨交流充电桩的充电效率,包括充电效率的定义、影响因素以及提升方法。 充电效率的定义 交流充电桩的充电效率指的…

web3项目自动连接小狐狸以及小狐狸中的各种“地址”详解

刚做web3的时候,比较迷糊的就是人们口中说的各种地址,小狐狸钱包地址,私钥地址,跳转地址,接口地址,交易地址,等等XX地址,常常感觉跟做链的同事们说话不在一个频道。 这一小节&#x…

ActiveMQ 任意文件上传漏洞复现

一、使用弱口令登陆 ​ 访问 http://ip:8161/admin/ 进入admin登陆页面,使用弱口令登陆,账号密码皆为 admin,登陆成功后,headers中会出现验证信息 ​ 如: Authorization: Basic YWRtaW46YWRtaW4 # 二、利用PUT协议上…

博客文章:AWS re:Invent 2023 新产品深度解析 - 第四部分

TOC 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 写在最前面 去年发布文章的一部分,由于内…

深度解析CSS clip-path属性:塑造网页元素的无界形态

在网页设计领域,CSS clip-path 属性犹如一把无形的剪刀,赋予设计师精准裁剪元素可视区域的能力。它通过定义一个路径来决定元素内容的显示范围,突破矩形边界的束缚,实现各种富有创意和动态变化的形状展示。本文将深入剖析 clip-pa…