Openstack 官方对接ceph文档
Openstack 与 Ceph集群搭建(上): 规划与准备
Openstack 与 Ceph集群搭建(中): Ceph部署
Openstack 与 Ceph集群搭建(下): Openstack部署
Openstack 与 Ceph集群搭建(完结): 配置Ceph作为Openstack后端存储
前面文章对集群的规划已经做了详细说明,并完成了Ceph集群的部署,接下来就是最重要的Openstack集群部署了。
环境描述:
项目 | 描述 | 说明 |
---|---|---|
系统 | Ubuntu Server 22.04 LTS | OpenStack 2022调研显示:受众多,文档丰富 |
docker | 在ceph环节已经安装 | |
python3 | 3.10 | 系统默认安装 |
kolla-ansible | kolla-ansible-16.5.1.dev55 | |
Openstack | 2024.01 | |
Ceph | 18.2.2 |
请参考ceph安装部分
注意:节点hostname名称应与hosts文件保持一致。
请参考ceph安装部分
注意:以下网卡名称因各自环境不同而不同,但是OpenStack需要至少两张网卡,一张用于集群通信,另一种用于其中的虚拟机通信,用于虚拟机通信的网卡根据OpenStack部署的网络不同而不同。Flat对应access接口;Vlan对应Trunk接口。
如规划设计篇的架构图,其网卡配置如下:
在Openstack 全节点执行;所谓共享挂载即同一个目录或设备可以挂载到多个不同的路径并且能够保持互相之间的共享可见性,类似于 mount --shared。在 OpenStack for Kolla 中,主要解决 Neutron 的 namespace 在不同 container 中得以保持实效性的问题。
如果以下路径或文件不存在,创建新目录和文件即可。
# 创建文件夹
mkdir /etc/systemd/system/docker.service.d
# 创建文件及编辑内容
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
python虚拟环境用于kolla-ansible使用。该步骤非必须项,但推荐使用虚拟环境运行ansible。
该部分在部署节点上执行。使用虚拟环境主要用于避免与系统包冲突。
# 安装基础依赖包
apt update
apt install git python3-dev libffi-dev gcc libssl-dev
apt install python3-venv
# 创建虚拟环境并激活
python3 -m venv /path/to/venv
source /path/to/venv/bin/activate
# 升级pip 到最新版本
pip install -U pip
# 安装ansible: 这里针对不同版本的OpenStack,需要查询官方文档。
pip install 'ansible-core>=2.15,<2.16.99' # for Openstack 2024.1 本文使用
pip install 'ansible-core==2.14' # for 2023.2/2023.1
在部署节点执行:
# 指定2024.1 版本的Kolla
pip install git+https://opendev.org/openstack/kolla-ansible@stable/2024.1
# 安装最新版
# pip install git+https://opendev.org/openstack/kolla-ansible@master
# 创建/etc/kolla目录及授权
mkdir -p /etc/kolla
chown $USER:$USER /etc/kolla
# 复制 globals.yml and passwords.yml 到 /etc/kolla directory.
cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
# 复制inventory文件到当前文件夹: 包括单节点与多节点配置
cp -r /path/to/venv/share/kolla-ansible/ansible/inventory/* /etc/kolla/.
部署节点执行:
kolla-ansible install-deps
请确保在python虚拟环境中操作,避免冲突。
默认密码存放于/etc/kolla/passwords.yml且密码为空,可使用下面的命令生成随机密码:
kolla-genpwd
注意:需要单独修改keystone的密码,用于horizon登录,否则随机密码输入很困难。其次建议修改grafana的秘密
编辑文件:/etc/kolla/passwords.yml
# 将keystone的密码修改为 KEYSTONE_PASS,便于用户从UI输入
keystone_admin_password: KEYSTONE_PASS
grafana_admin_password: xxxx
该文件位于/etc/kolla/
,作用是定义各节点角色,其名称需要与hosts文件严格一致。
配置说明如下:
#[xxx]代表一组对象,kolla根据各组所包括的节点进行功能定位与配置下发。
#控制节点组
[control] # 组名
node-01 # 组成员
node-02
node-03
# 网络节点
[network]
node-01
node-03
#计算节点
[compute]
node-01
node-02
node-03
# 监控节点
[monitoring]
node-01
node-02
node-03
# 存储节点: 若对接ceph, 可以配置为node-01,但不能留空
[storage]
node-01
# 部署节点: 也就是运行kolla-ansible的节点
[deployment]
localhost ansible_connection=local
# 其他节点,默认继承现有组,保持默认即可
[baremetal:children] # 子组
control # 继承[control]组
network
compute
storage
monitoring
[tls-backend:children]
control
[common:children]
control
network
compute
storage
monitoring
[collectd:children]
compute
[grafana:children]
monitoring
检查配置是否正确:
通过执行以下命令检查部署节点是否能与目标节点(multinode所定义的节点)进行免密登录。
ansible -i /etc/kolla/multinode all -m ping
/etc/kolla/globals.yml
,该文件定义OpenStack所需要安装的服务。因为顺序原因,这里只做了基本的网络配置,在对接ceph的文章中将展示完整配置,大家也可以直接使用完整配置替代以下配置:
cat > /etc/kolla/globals.yml <<EOF
---
kolla_base_distro: "ubuntu"
kolla_internal_vip_address: "10.148.250.253"
network_interface: "vlan1250"
neutron_external_interface: "bond0" # vm网络
nova_compute_virt_type: "kvm" # 如果是使用虚拟化部署,此选项必须选择qemu, 如果是物理机,默认是kvm
Kolla-Ansible 將 OpenStack 網路分為幾種
- API interface 為 OpenStack 內部個元件互相溝通還有存取 database 的介面,建議使用內部網路。
- External VIP Interface 為 OpenStack 對外的 endpoint
- Storage Interface 是 OpenStack VM 跟 Ceph 溝通的介面,建議使用 10G 以上的網路
- Cluster Interface 是 Ceph 內部複製檔案的網路介面,也是建議使用 10G 以上的網路
- Tunnel Interface 是 OpenStack VM 對 VM 網路溝通走的介面
- Neutron External Interface 是提供 VM 對外網路的介面,floating IP 的 flat / vlan 網路也是走此介面,須為獨立的的介面上不能用 IP
除了 Neutron External Interface 需要為獨立的介面以外,其他網路都可以共用介面,預設壞帶入 network_interface 的值
为各节点配置基础环境且会下载大量包请务必保证节点网络的正常
kolla-ansible -i /etc/kolla/multinode bootstrap-servers -vvvv
- 上述命令在执行过程中如果报错, 若内容是因为python虚拟环境导致。 可参考以下解决方案:
# 创建文件 mkdir -p ~/.config/pip # 增加以下内容 [global] break-system-packages = true
- 如果报错docker 起不来,解决方案:
systemctl daemon-reload systemctl start docker systemctl enable docker
- 如果重启后ceph docker容器不启动,直接重启物理服务器; 重启后执行以下命令确保API正常:
ceph restful restart
输出如下(根据安装内容不同,显示不一样,主要保证failed=0即可):
kolla-ansible -i /etc/kolla/multinode prechecks -vvvv
如果提示"msg": "Hostname has to resolve uniquely to the IP address of api_interface"说明hosts文件有重复条目,注释即可。
输出如下(根据安装内容不同,显示不一样,主要保证failed=0即可):
若报错没有 docker模块, 则需要退出虚拟环境(断开会话重新连接即退出),然后执行pip install docker
,安装python docker模块。
kolla-ansible -i /etc/kolla/multinode pull -vvvv
输出如下(根据安装内容不同,显示不一样,主要保证failed=0即可):
kolla-ansible -i /etc/kolla/multinode deploy -vvvv
输出内容(根据安装内容不同,显示不一样,主要保证failed=0即可):
此部分有会有些笨办法,各位大佬可以多给点意见:
以下操作均在部署节点操作。
在哪台设备上操作openstack就在哪台设备安装。
apt install python3-openstackclient
生成用户名密码文件,执行openstack命令前必须要使用。
kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh
# 自动建立demo project,建议手工建立
source /etc/kolla/admin-openrc.sh
#init-runonce 文件可以从kolla-ansible下载,如果在本地找不到的话
/usr/local/share/kolla-ansible/init-runonce
http://yourIP
# admin / yourpassword
# 在/etc/kolla/admin-openrc.sh里查询
cirros是极小化linux,可使用它完成相关实验。如果导入其他image留给大家自行研究。
# 下载镜像
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
#上传镜像
glance image-create --name "cirros" \
--file cirros-0.4.0-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--visibility=public
# 建立sshkey
ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
创建VLAN100 的 172.16.100.0/24网络,GW 172.16.100.254
openstack network create --share --external --provider-physical-network physnet1 --provider-network-type vlan VLAN100
openstack subnet create --network VLAN100 --allocation-pool start=172.16.100.100,end=172.16.100.120 --dns-nameserver 8.8.8.8 --gateway 172.16.100.254 --subnet-range 172.16.100.0/24 VLAN100
创建Openstack内部虚拟网络给虚拟机使用,该网络需要通过Openstack 路由器与 外部网络连接
openstack network create vm-net172
openstack subnet create --network vm-net172 --dns-nameserver 8.8.8.8 --gateway 172.16.1.254 --subnet-range 172.16.1.0/24 vlan172016001
openstack router create vm-router-01
openstack router add subnet vm-router-01 vlan172016001
openstack router set vm-router-01 --external-gateway external
openstack port list
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
# 建立模板
openstack flavor create --id 0 --vcpus 1 --ram 256 --disk 1 m1.nano
openstack flavor create --id 1 --vcpus 1 --ram 2048 --disk 20 m1.small
openstack server create --image cirros --flavor m1.nano --security-group default --key-name mykey --network vm-net172 instance01
在所有网络节点编辑配置 /etc/kolla/neutron-server/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vlan # 千万不要写 vxlan,vlan 否则dashboard要报错
mechanism_drivers = openvswitch,l2population
extension_drivers = port_security
[ml2_type_vlan]
network_vlan_ranges = physnet1:1:4094 # 添加 physnet1:1:4094
[ml2_type_flat]
flat_networks = physnet1
[ml2_type_vxlan]
vni_ranges = 1:1000
执行命令重启容器生效:docker restart neutron_server
在/etc/kolla/config/nova/nova-compute.conf
[DEFAULT]
block_device_allocate_retries = 600
然后重新配置nova即可