使用Kolla部署OpenStack

记录一下如何用kolla快速部署openstack,这篇文章是从老的笔记本里面捞出来的可能部分内容需要更正,会持续更新。

此次部署的组件为:

  • core
    • keystone
    • nova
    • glance
    • neturn

这里准备了8台虚拟机用于此次部署:

iphostnamecpumemorydiskrole
192.168.30.220infra-node1832100controller
192.168.30.221infra-node2832100controller
192.168.30.228infra-node3832100controller
192.168.30.223computer1832100computer
192.168.30.224computer2832100computer
192.168.30.225ceph-node1832100, 100storage
192.168.30.226ceph-node2832100, 100storage
192.168.30.227ceph-node3832100, 100storage
192.168.30.229vip

节点操作系统为:Ubuntu 22.04 cephadm 不支持22.04 所以这次暂时用lvm,后续更新外置ceph的部署。 这里写的是ceph-node 实际上是lvm-node

三个存储节点上要执行:

pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb

每个节点都有两张网卡,这里为了简单都是用了192.168.30.0/24段的网络,即 float 网络出口使用的是192.168.30.0/24,vxlan 作为租户的网络。

每个节点部署docker:

wget -qO- https://get.docker.com/ | sh

安装docker的sdk:

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

每个节点配置 /etc/hosts文件:

192.168.30.220 infra-node1
192.168.30.221 infra-node2
192.168.30.228 infra-node3
192.168.30.223 computer1
192.168.30.224 computer2
192.168.30.225 ceph-node1
192.168.30.226 ceph-node2
192.168.30.227 ceph-node3

在 infra-node1 上生成ssh key(注意不要有密码):

ssh-keygen

将这个公钥内容拷贝到每个节点的/root/.ssh/authorized_keys下面:

ssh-copy-id root@ip

每个节点上需要关闭iscsi的服务:

systemctl disable iscsid.socket --now

在infra-node1上安装kolla工具,为了防止对系统的库产生破坏,这里要先安装一个pyenv后续使用pyenv创建对应的环境来安装kolla

apt update     
apt install git python3-dev libffi-dev gcc libssl-dev
apt install python3-venv

创建kolla的虚拟环境并激活:

python3 -m venv /opt/kolla 
source /opt/kolla/bin/activate

升级pip并设置国内的pypi镜像站:

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

安装ansible和kolla:

pip install 'ansible>=4,<6'
pip install git+https://opendev.org/openstack/kolla-ansible@master

创建kollla的配置文件目录和授权:

sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla

拷贝kolla的配置文件以及清单文件:

cp -r /opt/kolla/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /opt/kolla/share/kolla-ansible/ansible/inventory/all-in-one .

安装对应的依赖:

kolla-ansible install-deps

生成密码:

kolla-genpwd

这里的配置是用于关闭对应的host_key 检查和提高执行的效率。

首先创建一个ansible的配置文件夹:

mkdir -pv /etc/ansible

创建配置文件:

vi  /etc/ansible/ansible.cfg

内容如下:

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

这部分是配置openstack部署的组件,以及网络配置等等

vi /etc/kolla/globals.yml

修改内容如下:

---
workaround_ansible_issue_8743: yes
kolla_base_distro: "ubuntu"
openstack_release: "zed"
kolla_internal_vip_address: "192.168.30.229"
network_interface: "eth0"
neutron_external_interface: "ens19"
enable_openstack_core: "yes"
enable_glance: "{{ enable_openstack_core | bool }}"
enable_haproxy: "yes"
enable_keepalived: "{{ enable_haproxy | bool }}"
enable_keystone: "{{ enable_openstack_core | bool }}"
enable_mariadb: "yes"
enable_memcached: "yes"
enable_neutron: "{{ enable_openstack_core | bool }}"
enable_nova: "{{ enable_openstack_core | bool }}"
enable_rabbitmq: "{{ 'yes' if om_rpc_transport == 'rabbit' or om_notify_transport == 'rabbit' else 'no' }}"
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"

修改完成之后保存退出

修改all-in-one文件的以下部分:

[control]
192.168.30.220
192.168.30.221
192.168.30.228
[network]
192.168.30.220
192.168.30.221
192.168.30.228
[compute]

192.168.30.223
192.168.30.224

[storage]
192.168.30.225
192.168.30.226
192.168.30.227
[monitoring]

[deployment]
localhost       ansible_connection=local

首先bootstrap一下kolla部署的依赖:

kolla-ansible -i ./all-in-one bootstrap-servers

没有问题后进行下一步:

Bootstrap Servers

执行预备部署:

kolla-ansible -i ./all-in-one prechecks

没有问题之后就可以进行下一步:

openstack-prechecks

部署openstack:

kolla-ansible -i ./all-in-one deploy

部署如果没有问题就可以提交了:

openstack-deploy

安装openstack的客户端:

pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master

生成对应的adminrc 文件:

kolla-ansible post-deploy

查找admin的账户和密码:

cat /etc/kolla/admin-openrc.sh

登陆vip的web页面:

openstack login page

默认情况下是没有实例规格的这里可以自定义创建:

openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

这里定义了一个1c 64m内存 1G硬盘的机型,规格名称为m1.nano。

这里需要创建2个网络,一个作为外部网络,一个作为租户的vpc网络

Openstack create public network

这里的物理设备可以通过这条命令来查看

cat /etc/kolla/neutron-server/ml2_conf.ini

OpenStack Neturn ml2 conf

创建子网:

OpenStack Create Public network subnet

注意这里的子网要和实际规划的网络一致,使用192.168.30.0/24的网段网络这样可以通到外网。

这里配置了一下dhcp可以分配的池子以及DNS服务器:

OpenStack Create Public network subnet details

创建用户的子网:

OpenStack User Network

这里相当于是用户的子网,可以和出口的网段不一样的,这里要注意的是网络类型选择VXLAN。

这里网段选择的是10.230.0.0/24的网段,网关为10.230.0.254

OpenStack User Network Subnet

DHCP池和DNS服务器配置:

OpenStack User Network Subnet Details

创建路由器,用于后续vm上网和浮动ip:

OpenStack Create Router

这里需要注意的是外部网络选择我们刚刚创建的外部网络,并且开启SNAT。

接下来配置路由器,先回到网络拓扑:

OpenStack Create Router Topology

创建接口:

OpenStack Create Router add Inferface

这里的网络选择我们之前创建的用户网络,IP可以手动设置也可以使用dhcp来分配这里之前创建用户网络的时候dhcp是开启的这里就不设置了:

OpenStack Router add Inferface

之后的拓扑结构:

OpenStack Network Topology

这里用cirros为例子,在web上面上传

OpenStack Images inferface

根据步骤填写具体的信息,要注意镜像的属性,可以根据实际的需要来去设置:

OpenStack Create Images Details

创建完成之后我们就得到cirrors的镜像:

OpenStack Create Image Done

这里要先给安全组放行icmp和22的端口用于后续ping测试和ssh连接:

openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default

OpenStack Launch Instance

选择镜像:

OpenStack Launch Sources

选择规格:

OpenStack Launch Flavor

选择网络:

OpenStack Launch Network
然后点击创建

OpenStack VM Booting

创建完成之后

OpenStack VM Stats

Add Float ip

目前没有可用的浮动ip可以选择添加一个:

Create a new float ip

Allowcate a new float ip

获取到之后选择分配:

Manage float ip
分配之后就可以看到 对应的浮动ip地址:
VM Stats with float ip

这个需要关闭宿主机上的iscsi服务:

 systemctl disable iscsid.socket --now

关闭之后重启容器

  • 能够支持离线部署
  • Ceph适配的问题
  • 测试更多的组建