Kolla-ansible部署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 gnocchi1

rbd 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脚本

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值