使用kolla-Ansible部署OpenStack-allinone-----安装部署OpenStack 之Zed版

安装文档:https://docs.openstack.org/kolla-ansible/zed/user/quickstart.html

一、系统基本设置  

系统要求:

单机部署最低配置:

  1. 2张网卡
  2. 8G内存
  3. 40G硬盘空间

主机系统:

  1. CentOS Stream 9
  2. Debian Bullseye (11)
  3. openEuler 22.03 LTS
  4. Rocky Linux 9
  5. Ubuntu Jammy (22.04)

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

Rocky Linux 下载地址:https://rockylinux.org/download

中文社区:https://www.rockylinux.cn/

Rocky Linux简介:

https://baike.baidu.com/item/Rocky%20Linux/61721664?fr=aladdin

本次实验环境:

VMware虚拟机,操作系统Rocky Linux 9最小化安装、单机部署最低配置:内存8G、硬盘50G(自动分区即可)、三网卡、CPU开启虚拟化支持。

1.关闭防火墙和selinux

关闭防火墙

# systemctl disable firewalld;systemctl stop firewalld

永久关闭selinux,需重启系统后生效

# vi /etc/selinux/config

SELINUX=disabled

临时关闭selinux:可使用如下命令将当前selinux设置为permissive,重启系统后失效

# setenforce 0

2.设置主机名、主机名列表

设置主机名

# hostnamectl set-hostname allinone-kolla

# exit      #断开退出,重新连接

hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,设置本机IP与域名. 在部署机的hosts中添加需要部署的主机的主机名,后续会自动同步到所有节点。

# cat >> /etc/hosts << EOF

192.168.100.10 allinone-kolla

EOF

3.设置网卡,配置网卡信息

# cd /etc/NetworkManager/system-connections/

# vi ens33.nmconnection

//[ipv4]字段下修改或添加以下行:

method=manual    #修改

address=192.168.100.10/24    #新增

# vi ens35.nmconnection

method=none      #修改

重启网卡:

# nmcli c reload       #加载配置文件

# nmcli c down ens33

# nmcli c up ens33     #重启网卡

# ip a                        #查看

# ping 8.8.8.8

4. 设置主机无密钥访问

# cd

# ssh-keygen

生成ssh公钥,默认设置即可,按三次回车。

# ssh-copy-id root@allinone-kolla

ssh-copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户下。
选择yes,输入root用户 密码。

二、准备部署环境

1、安装基础依赖包

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

2、安装Ansible额外需要的包

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

# dnf install -y python3-resolvelib sshpass

3、设置Python-venv虚拟环境

为了防止与系统的python环境冲突,这里使用虚拟环境安装ansible与kolla-ansible

/path/to/venv是虚拟环境的目录,也可以自己指定。

# 创建虚拟环境

# python3 -m venv /path/to/venv

# 进入python虚拟环境

# 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

4、安装ansible

Kolla-ansible需要ansible 5版本,这里需要指定版本安装

# pip install 'ansible>=4,<6'

三、安装Kolla-ansible

       Kolla是OpenStack下用于自动化部署的一个项目,它基于docker和ansible来实现,其中docker主要负责镜像制作和容器管理,ansible主要负责环境的部署和管理。

Kolla实际上分为如下两部分:

  Kolla部分提供了生产环境级别的镜像,涵盖了OpenStack用到的各个服务;Kolla为操作OpenStack云提供可生产的容器和部署工具。

  Kolla-ansible部分提供了自动化的部署。Kolla-Ansible在Docker容器中部署OpenStack服务和基础设施组件。

1、安装kolla-ansible

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

2、获取Kolla配置文件

# 创建配置文件夹

# mkdir -p /etc/kolla

# chown $USER:$USER /etc/kolla

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

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

3、获取Ansible清单文件

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

# cp /path/to/venv/share/kolla-ansible/ansible/inventory/* .

四、安装Ansible Galaxy依赖

# kolla-ansible install-deps

五、配置ansible,调优ansible

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

# mkdir /etc/ansible/

# cat > /etc/ansible/ansible.cfg << EOF

[defaults]

host_key_checking=False

pipelining=True

forks=100

EOF

六、准备初始化配置

1、准备清单文件

单机部署时,使用all-in-one清单文件

多节点部署时,使用multinode清单文件

本实验采用单节点搭建,所以会用到在上一步复制到家目录的all-in-one配置文件。

#使用all-in-one清单文件

# vi all-in-one   #在vi编辑环境中执行以下替换命令

:1,$s/localhost/allinone-kolla/

:1,$s/ansible_connection=local//

#测试Ansible的连通性

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

# ansible -i all-in-one all -m ping

2、生成各个组件密码

# kolla-genpwd

#修改admin用户的密码

# vi /etc/kolla/passwords.yml

keystone_admin_password: 123456

3、配置global.yml       

镜像选择:

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

  1. CentOS Stream (centos)
  2. Debian (debian)
  3. Rocky (rocky)
  4. Ubuntu (ubuntu)

官方推荐新安装的使用rocky或ubuntu,这里使用和主机相同的rocky发行版。

#修改  /etc/kolla/globals.yml 文件:

# vi /etc/kolla/globals.yml    #注意冒号:后有空格!

# 镜像仓库:访问国外quay.io可能比较慢,可以指定国内的quay.io源

docker_registry: "quay.nju.edu.cn"

# 管理接口ip,如果设置了高可用haproxy,此处为VIP(虚拟漂移IP),由keepalived提供高可用性,必须是管理网络中没有被使用的地址。这里使用ALLinOne配置,直接将ens33IP 写入即可。

kolla_internal_vip_address: "192.168.100.10"

# 内部网络,管理网络的网卡,也用于主机之间的通信

network_interface: "ens33"

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

neutron_external_interface: "ens35"

# 关闭高可用haproxy

enable_haproxy: "no"

# 启用provider网络

enable_neutron_provider_networks: "yes"

# 设置虚拟化类型,这里为qemu,如果服务器支持硬件虚拟化请将此值改为kvm

nova_compute_virt_type: "qemu"

# cat /etc/kolla/globals.yml|grep -v ^#|grep -v ^$    #查看确认

注:以下项目为默认设置,可不用进行设置

# docker基础系统镜像默认

#kolla_base_distro: "rocky"

# openstack版本默认

#openstack_release: "zed"

# 设置网络插件为openvswitch 默认

#neutron_plugin_agent: "openvswitch"

七、开始部署

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

1、引导服务器,部署前给节点安装依赖包

# kolla-ansible -i all-in-one bootstrap-servers

若报以下错误信息,则表明在尝试通过网络获取 GPG 密钥时,连接失败了,解决方法:检查网络连接,确保你的网络连接是活跃的,并且可以连接到互联网。或手动从提供 GPG 密钥的网站下载密钥,并导入它。

fatal: [allinone-kolla]: FAILED! => {"changed": false, "msg": "failed to fetch key at https://download.docker.com/linux/centos/gpg , error was: Request failed: <urlopen error _ssl.c:1112: The handshake operation timed out>"}

我这里并没有手动下载密钥,只是再次重新执行该命令就顺利通过了。

2、部署前检查

注意:以下kolla-ansible命令用于添加 ansible_python_interpreter 变量,用于指定 virtualenv 环境位置,否则执行可能报错:

# kolla-ansible -i all-in-one prechecks -e 'ansible_python_interpreter=/path/to/venv/bin/python'

#若报错:No module named 'docker',则执行以下安装:

# pip install 'docker==4.4.4'

# pip list   #发现当前requests版本为2.30.0,本实验需要安装requests版本2.28.1才行,执行如下命令进行安装

……

pytz            2023.3

PyYAML         6.0

requests         2.30.0

resolvelib         0.5.4

rfc3986            2.0.0

……

# pip install 'requests==2.28.1'

然后再执行部署前检查:

# kolla-ansible -i all-in-one prechecks -e 'ansible_python_interpreter=/path/to/venv/bin/python'

3、开始部署

注:部署过程中会从quay.nju.edu.cn拉取30多个镜像,约5个多G,也许会很慢或失败,解决方法如下:

可以从已搭建好的私有镜像仓库拉取。

本次实验并没有搭建私有仓库,这里我把上次实验已拉取的镜像打包生成了zed.tar,如果不想拉取镜像,可把zed.tar提前上传到虚拟机,并执行命令docker load -i zed.tar,把镜像导入即可。

导入镜像:

# docker load -i zed.tar

# 开始部署

# kolla-ansible -i all-in-one deploy -e 'ansible_python_interpreter=/path/to/venv/bin/python'

   部署成功,如下图所示:

八、使用OpenStack

1、命令行(OpenStack CLI)

# 安装openstack客户端,这里-c指定zed版本客户端所需要的依赖

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

# 生成openrc文件

# kolla-ansible post-deploy

#使用openrc文件

# source /etc/kolla/admin-openrc.sh

接下来就可以使用OpenStack CLI了。如:查看用户列表:

# openstack user list

2、登录云平台(Horizon

部署完成后,将allinone虚拟机第三个网卡ens35设置为:nat模式。

浏览器中访问kolla_internal_vip_address,输入账号密码即可。账号密码可在openrc文件中查看。即可访问dashboard:http://192.168.100.10,用户名及密码:admin、 123456

3、初始化OpenStack 如网络、安全组、实例类型等

以下两种方法二选一即可。

(1)方法一:通过init-runonce文件完成。

# cat /path/to/venv/share/kolla-ansible/init-runonce

首先,编辑init-runonce文件,注释掉 cirros镜像下载相关信息(下载速度特别慢)、设置外部网络相关等:

# vi /path/to/venv/share/kolla-ansible/init-runonce

# This EXT_NET_CIDR is your public network,that you want to connect to the internet via.

# 与外部连接网络 相关设置

ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}

EXT_NET_CIDR=${EXT_NET_CIDR:-'192.168.200.0/24'}

EXT_NET_RANGE=${EXT_NET_RANGE:-'start=192.168.200.150,end=192.168.200.199'}

EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'192.168.200.2'

# 注释掉与镜像下载相关行

echo Checking for locally available cirros image.

# Let's first try to see if the image is available locally

# nodepool nodes caches them in $IMAGE_PATH

#if ! [ -f "${IMAGE_PATH}/${IMAGE}" ]; then        #从此行开始注释掉以下12行

#    IMAGE_PATH='./'

#    if ! [ -f "${IMAGE_PATH}/${IMAGE}" ]; then

#        echo None found, downloading cirros image.

#       curl --fail -L -o ${IMAGE_PATH}/${IMAGE} ${IMAGE_URL}/${IMAGE}

#    fi

#else

#    echo Using cached cirros image from the nodepool node.

#fi

#echo Creating glance image.

#$KOLLA_OPENSTACK_COMMAND image create --disk-format qcow2 --container-format bare --public \

#    --property os_type=${IMAGE_TYPE} --file ${IMAGE_PATH}/${IMAGE} ${IMAGE_NAME}

# cat /path/to/venv/share/kolla-ansible/init-runonce    #查看确认

接下来,执行init-runonce,完成OpenStack初始化

# source /etc/kolla/admin-openrc.sh

# source /path/to/venv/share/kolla-ansible/init-runonce    #只能执行一次!

#上传镜像:先上传镜像文件cirros-0.3.4-x86_64-disk.img到/root目录,然后再上传镜像

# openstack image create cirros --disk-format qcow2 --container-format bare <cirros-0.3.4-x86_64-disk.img

创建安全组test,放通22号端口

创建云主机,将安全组test绑定到所创建的云主机上,并为云主机绑定浮动IP

控制台登录到云主机,用户名:cirros、密码:cubswin:)

$ ip a

$ ping 8.8.8.8

(2)方法二:通过执行openstack命令或在图形化界面操作完成OpenStack初始化,如:

创建网络:络类型为:flat,物理网络physnet1,自定义外部网络名称,如public-test

上传镜像cirros:

# openstack image create cirros --disk-format qcow2 --container-format bare <cirros-0.3.4-x86_64-disk.img

创建云主机类型(实例类型):

内存:512MB

VCPU数量:1 VCPU

磁盘:1GB

创建安全组test,放通22号端口

创建云主机,将安全组test绑定到所创建的云主机上,并为云主机绑定浮动IP

Xshell或CRT连接云主机,用户名:cirros、密码:cubswin:)

# ping 8.8.8.8,测试连通性。

附录:

1、部署zed 版本的时候,遇到pip的版本问题,可以参考这个清单:

(venv) [root@allinone-kolla ~]# pip list

Package                Version

---------------------- -----------

ansible                 5.10.0

ansible-core            2.12.10

appdirs                1.4.4

attrs                  22.1.0

autopage              0.5.1

certifi                 2024.2.2

cffi                   1.15.1

charset-normalizer      2.1.1

cliff                  4.0.0

cmd2                 2.4.2

cryptography          36.0.2

debtcollector          2.5.0

decorator             5.1.1

docker                4.4.4

dogpile.cache          1.1.8

hvac                  2.1.0

idna                  3.3

importlib-metadata     4.12.0

iso8601               1.0.2

Jinja2                 3.1.3

jmespath              1.0.1

jsonpatch              1.32

jsonpointer            2.3

keystoneauth1          5.0.1

kolla-ansible           15.6.1.dev7

MarkupSafe            2.1.5

msgpack               1.0.4

munch                 2.5.0

netaddr                0.8.0

netifaces               0.11.0

openstacksdk           0.101.0

os-service-types         1.7.0

osc-lib                 2.6.2

oslo.config             9.0.0

oslo.i18n              5.1.0

oslo.serialization       5.0.0

oslo.utils             6.0.2

packaging            21.3

pbr                    5.10.0

pip                    24.0

prettytable             3.4.1

pycparser              2.21

pyparsing              3.0.9

pyperclip              1.8.2

python-cinderclient     9.1.1

python-keystoneclient   5.0.1

python-novaclient      18.1.0

python-openstackclient  6.0.1

pytz                  2022.2.1

PyYAML               6.0

requests               2.28.1

requestsexceptions      1.4.0

resolvelib              0.5.4

rfc3986                1.5.0

setuptools             53.0.0

simplejson             3.17.6

six                    1.16.0

stevedore              4.0.2

tzdata                 2024.1

urllib3                1.26.12

wcwidth              0.2.5

websocket-client       1.7.0

wrapt                1.14.1

zipp                 3.8.1



2、requests库概述

  requests库是一个简洁且简单的处理HTTP请求的第三方库,它的最大优点是程序编写过程更接近正常URL访问过程。这个库建立在Python 语言的 urllib3库的基础上,类似这种在其他函数库之上再封装功能、提供更友好函数的方式在Python语言中十分常见。在Python生态圈里,任何人都有通过技术创新或体验创新发表意见和展示才华的机会。requests库支持非常丰富的链接访问功能,包括国际域名和URL获取、HTTP长连接和连接缓存、HTTP会话和Cookie保持、浏览器使用风格的SSL验证、基本的摘要认证、有效的键值对Cookie记录、自动解压缩、自动内容解码、文件分块上传、HTTP(S)代理功能、连接超时处理、流数据下载等。

3、docker镜像批量打包

由于在内网环境或网速较慢的时候,下载镜像比较慢,所以可以将镜像打包成文件进行拷贝。以下是一个批量打包镜像的语句,供参考。

批量打包镜像:

# docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o test.tar

将机器上的所有镜像打包到test.tar文件里面。

打包swift相关镜像:

# docker save $(docker images | grep swift | grep -v REPOSITORY |awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}')  -o swift.tar

加载镜像:

# docker load -i test.tar

4、安装OpenStack-Zed版报错解决方案

执行以下安装检查命令时报错如下:

# kolla-ansible -i all-in-one prechecks -e 'ansible_python_interpreter=/path/to/venv/bin/python'

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: docker.errors.DockerException: Error while fetching server API version: request() got an unexpected keyword argument 'chunked'

找出问题所在:requests版本不对

解决方法:

kolla-ansible部署zed 版本的时候,遇到pip的版本问题,可以参考这个清单:

通过观察两个pip list命令的结果发现,之所以报错是因为requests的版本问题,应该安装requests的2.28.1版本,执行命令如下:

# pip install 'requests==2.28.1'

然后接着向下执行命令就可以了。

  • 23
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值