使用Kolla部署OpenStack
记录一下如何用kolla快速部署openstack,这篇文章是从老的笔记本里面捞出来的可能部分内容需要更正,会持续更新。
部署组建
此次部署的组件为:
- core
- keystone
- nova
- glance
- neturn
环境
这里准备了8台虚拟机用于此次部署:
ip | hostname | cpu | memory | disk | role |
---|---|---|---|---|---|
192.168.30.220 | infra-node1 | 8 | 32 | 100 | controller |
192.168.30.221 | infra-node2 | 8 | 32 | 100 | controller |
192.168.30.228 | infra-node3 | 8 | 32 | 100 | controller |
192.168.30.223 | computer1 | 8 | 32 | 100 | computer |
192.168.30.224 | computer2 | 8 | 32 | 100 | computer |
192.168.30.225 | ceph-node1 | 8 | 32 | 100, 100 | storage |
192.168.30.226 | ceph-node2 | 8 | 32 | 100, 100 | storage |
192.168.30.227 | ceph-node3 | 8 | 32 | 100, 100 | storage |
192.168.30.229 | vip |
节点操作系统为: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
初始化kolla
在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
配置kolla
ansible配置
这里的配置是用于关闭对应的host_key 检查和提高执行的效率。
首先创建一个ansible的配置文件夹:
mkdir -pv /etc/ansible
创建配置文件:
vi /etc/ansible/ansible.cfg
内容如下:
[defaults]
host_key_checking=False
pipelining=True
forks=100
global配置
这部分是配置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
部署openstack
首先bootstrap一下kolla部署的依赖:
kolla-ansible -i ./all-in-one bootstrap-servers
没有问题后进行下一步:
执行预备部署:
kolla-ansible -i ./all-in-one prechecks
没有问题之后就可以进行下一步:
部署openstack:
kolla-ansible -i ./all-in-one 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 flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
这里定义了一个1c 64m内存 1G硬盘的机型,规格名称为m1.nano。
创建网络
这里需要创建2个网络,一个作为外部网络,一个作为租户的vpc网络
这里的物理设备可以通过这条命令来查看
cat /etc/kolla/neutron-server/ml2_conf.ini
创建子网:
注意这里的子网要和实际规划的网络一致,使用192.168.30.0/24的网段网络这样可以通到外网。
这里配置了一下dhcp可以分配的池子以及DNS服务器:
创建用户的子网:
这里相当于是用户的子网,可以和出口的网段不一样的,这里要注意的是网络类型选择VXLAN。
这里网段选择的是10.230.0.0/24的网段,网关为10.230.0.254
DHCP池和DNS服务器配置:
创建路由器,用于后续vm上网和浮动ip:
这里需要注意的是外部网络选择我们刚刚创建的外部网络,并且开启SNAT。
接下来配置路由器,先回到网络拓扑:
创建接口:
这里的网络选择我们之前创建的用户网络,IP可以手动设置也可以使用dhcp来分配这里之前创建用户网络的时候dhcp是开启的这里就不设置了:
之后的拓扑结构:
创建镜像
这里用cirros为例子,在web上面上传
根据步骤填写具体的信息,要注意镜像的属性,可以根据实际的需要来去设置:
创建完成之后我们就得到cirrors的镜像:
安全组放行
这里要先给安全组放行icmp和22的端口用于后续ping测试和ssh连接:
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
创建虚拟机
选择镜像:
选择规格:
选择网络:然后点击创建
创建完成之后
添加浮动ip
目前没有可用的浮动ip可以选择添加一个:
获取到之后选择分配:分配之后就可以看到 对应的浮动ip地址:
问题
iscsi ipc链接失败问题
这个需要关闭宿主机上的iscsi服务:
systemctl disable iscsid.socket --now
关闭之后重启容器
TODO
- 能够支持离线部署
- Ceph适配的问题
- 测试更多的组建