用到的资源
openEuler-22.03-LTS-x86_64-dvd.iso
参考文档:
https://docs.openstack.org/zh_CN/
https://docs.openstack.org/install-guide
环境准备 虚拟环境准备 利用VMWare
安装,与以往不同的是,要选centos8
,内存推荐5G
以上,4核
,根据自身实际情况配置
主机
IP
(单网卡NAT)
配置
controller
192.168.100.10
4v_8G_100G
compute
192.168.100.20
4V_5G_100G_50G
网关:192.168.100.2
欧拉基本上跟Centos
一样,安装过程略,区别是不能弱密码 (但是可以进去后修改为弱密码):
然后可以建个快照
系统环境准备 本次用的系统内核为5.1
比较新,参考文档OpenStack packages for RHEL and CentOS — Installation Guide documentation
配置网卡 留下如下配置即可:
注意:重启网卡的命令有区别
1 2 nmcli c reload nmcli c up eth0
注意:此阶段需要能ping
通百度表示成功
更改主机名 controller
1 hostnamectl set-hostname controller && bash
compute
1 hostnamectl set-hostname compute && bash
完成本阶段的脚本【双节点执行,注意修改主机名的地方要改一下】
1 2 3 4 5 6 7 # !/bin/bash hostnamectl set-hostname controller && bash # 计算节点修改这里 systemctl stop firewalld && systemctl disable firewalld echo "192.168.100.10 controller" >> /etc/hosts echo "192.168.100.20 compute" >> /etc/hosts sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config; setenforce 0;
规划
keystone
glance
placement
nova
neutron
dashboard
cinder
swift
部署OpenStack
基本环境
文档内Environment
部署时间 1 yum install -y chrony vim bash-completion net-tools
修改配置文件
1 pool ntp6.aliyun.com iburst
重启
1 2 3 4 systemctl restart chronyd chronyc sources -v date clock -w
完成本阶段的脚本【双节点执行】
1 2 3 4 5 6 7 8 9 10 11 12 # !/bin/bash # 安装时间、编辑器、补全组件、网络工具,其中补全功能需要重连生效 yum install -y chrony vim bash-completion net-tools # 修改配置文件,直接追加 # compute也可以用controller做时间服务器 sed -i "s/pool pool.ntp.org iburst/pool ntp6.aliyun.com iburst/g" /etc/chrony.conf echo "allow allow" >>/etc/chrony.conf echo "local stratum 10" >>/etc/chrony.conf systemctl restart chronyd chronyc sources -v clock -w # 同步时间 date # 查看时间
安装opensatck 首先需要查看一下能够安装的 opensatck
版本,注意:dnf
等同于yum
1 dnf list | grep openstack
如下图:我们只能选择如下,因为没配置其他版本的源(如果要安装queens
版就不行)
安装命令(本次安装T版)
1 2 3 yum install -y openstack-release-train.noarch ll /etc/yum.repos.d/ # 可以看到我们的仓库下面多了t版的yum源 yum install python3-openstackclient # 这个计算节点不用装
出现如下算成功
完成本阶段的脚本【双节点执行,注意部分计算节点不用装】但是装了也没事
1 2 3 # !/bin/bash yum install -y openstack-release-train.noarch yum install -y python3-openstackclient # 这个计算节点不用装
安装数据库【controller节点】 1 yum install -y mariadb mariadb-server python3-PyMySQL
修改配置文件
参考文档:SQL database for RHEL and CentOS — Installation Guide documentation (openstack.org)
1 vim /etc/my.cnf.d/openstack.cnf
只需要修改监听地址为0.0.0.0
,其他的默认即可
1 2 3 4 5 6 7 [mysqld] bind-address = 0.0 .0.0 default-storage-engine = innodbinnodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_cicharacter-set-server = utf8
写入配置后,重启并配置数据库自启动
1 2 systemctl enable --now mariadb.service ss -tnl # 看到有3306表示成功
完成本阶段的脚本【controller节点执行】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # !/bin/bash yum install -y mariadb mariadb-server python3-PyMySQL # 定义文件路径 CONFIG_FILE="/etc/my.cnf.d/openstack.cnf" # 写入配置内容 cat <<EOL > "$CONFIG_FILE" [mysqld] bind-address = 0.0.0.0 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 EOL # 输出完成信息 echo "配置已写入 $CONFIG_FILE" # 启动数据库、配置自启动 systemctl enable mariadb.service systemctl start mariadb.service
以下仍有需要手工的部分:(初始化数据库)
1 mysql_secure_installation
安装消息队列【controller节点】 安装
1 yum install -y rabbitmq-server
启动,如果长时间卡着,直接ctrl+c
.(看到5672
端口表示成功)
1 2 systemctl enable --now rabbitmq-server.service ss -tnl
新增一个用户
1 rabbitmqctl add_user openstack 000000
赋予读写权限
1 rabbitmqctl set_permissions openstack ".*" ".*" ".*"
完成本阶段的脚本
1 2 3 4 5 # !/bin/bash yum install -y rabbitmq-server systemctl enable --now rabbitmq-server.service # 这个地方要是卡住了需要手动搞一下 rabbitmqctl add_user openstack 000000 rabbitmqctl set_permissions openstack ".*" ".*" ".*"
安装缓存【controller节点】 安装
1 yum install -y memcached python3-memcached
修改配置文件(将监听地址设置为0.0.0.0
)
默认配置文件写了本地,但是在实验中,我们不只是有这本机需要留缓存,所以直接将127.0.0.1
修改为``0.0.0.0`即可
1 vim /etc/sysconfig/memcached
示例:
1 2 3 4 5 PORT ="11211" USER ="memcached" MAXCONN ="1024" CACHESIZE ="64" OPTIONS ="-l 0.0.0.0,::1"
启动(看到11211
端口表示成功)
1 2 systemctl enable --now memcached.service ss -tnl
完成本阶段的脚本
1 2 3 4 # !/bin/bash yum install -y memcached python3-memcached sed -i "s/OPTIONS="-l 127.0.0.1,::1"/OPTIONS="-l 0.0.0.0,::1"/g" /etc/sysconfig/memcached systemctl enable --now memcached.service
搭建OpenStack基本环境的所有脚本
在数据库部分,替换手工部分的还没写,此脚本还不能用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 # !/bin/bash # 环境准备 # 安装时间、编辑器、补全组件、网络工具,其中补全功能需要重连生效 yum install -y chrony vim bash-completion net-tools # 修改配置文件,直接追加 # compute也可以用controller做时间服务器 sed -i "s/pool pool.ntp.org iburst/pool ntp6.aliyun.com iburst/g" /etc/chrony.conf echo "allow allow" >>/etc/chrony.conf echo "local stratum 10" >>/etc/chrony.conf systemctl restart chronyd chronyc sources -v clock -w # 同步时间 date # 查看时间 yum install -y openstack-release-train.noarch yum install -y python3-openstackclient # 这个计算节点不用装 # -------------- 以下部分均不用在compute节点执行 ------------------ # 安装数据库 yum install -y mariadb mariadb-server python3-PyMySQL # 定义文件路径 CONFIG_FILE="/etc/my.cnf.d/openstack.cnf" # 写入配置内容 cat <<EOL > "$CONFIG_FILE" [mysqld] bind-address = 0.0.0.0 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 EOL # 输出完成信息 echo "配置已写入 $CONFIG_FILE" # 启动数据库、配置自启动 systemctl enable mariadb.service systemctl start mariadb.service # 安装消息队列 yum install -y rabbitmq-server systemctl enable --now rabbitmq-server.service # 这个地方要是卡住了需要手动搞一下 rabbitmqctl add_user openstack 000000 rabbitmqctl set_permissions openstack ".*" ".*" ".*" # 安装缓存 yum install -y memcached python3-memcached sed -i "s/OPTIONS="-l 127.0.0.1,::1"/OPTIONS="-l 0.0.0.0,::1"/g" /etc/sysconfig/memcached systemctl enable --now memcached.service
开始部署各组件 参考文档:Install OpenStack services — Installation Guide documentation
keystone 登录数据库
为keystone
创建数据库,并为keystone
授权,注意:以往设置的000000
,本次设置的keystone123
1 2 CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123';
验证:
1 show create database keystone; # 仅作验证
安装(dnf
和yum
完全等价)
1 yum install -y openstack-keystone httpd python3-mod_wsgi
然后会有一个配置文件,只需要取需要的即可,先把原来的备份
1 cp /etc/keystone/keystone.conf{,.bak}
然后从 /etc/keystone/keystone.conf.bak
文件中筛选出所有不为空且不以 #
开头的行(也就是忽略掉空行 和注释行 )
然后再去编辑就会很好看
1 2 3 4 5 6 7 grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf vim /etc/keystone/keystone.conf # 解释 # -E 是正则表达式,v是反向匹配(不输出匹配到的内容) # ^$:匹配空行。^ 表示行的开始,$ 表示行的结束,因此 ^$ 表示没有字符的行。 # |:表示“或”,用于连接多个条件。 #
添加配置内容
1 2 3 4 [database] connection = mysql+pymysql://keystone:keystone123@controller/keystone[token] provider = fernet
同步数据库
1 su -s /bin/sh -c "keystone-manage db_sync" keystone
验证方法就是看keystone
数据库里有无新出现的表,其他的组件也是如此验证的
初始化密钥库
1 2 keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
引导身份服务(指定密码为000000
)即可
1 2 3 4 5 keystone-manage bootstrap --bootstrap-password 000000 \ --bootstrap-admin-url http://controller:5000/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne
配置HttpService
服务
1 vi /etc/httpd/conf/httpd.conf
进入后,修改97
行
软连接Keystone
的 WSGI
配置文件到Apache HTTP
服务器的配置目录
-s
表示软连接,软链接我们修改一个位置其他位置也会同步修改
1 ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
启动,看到5000
端口说明成功(如果出现权限问题,可能是SELinux 策略
)
1 systemctl enable --now httpd.service
编写环境变量文件
1 vim /etc/keystone/admin-openrc.sh
内容(修改密码为000000
,其他的不动,也可以直接配置下面那一个)
1 2 3 4 5 6 7 8 # !/bin/bash export OS_USERNAME=admin export OS_PASSWORD=000000 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3
验证有无生效(export
输出环境变量)
1 2 source /etc/keystone/admin-openrc.sh export
创建域、项目、用户、角色
1 2 openstack domain create --description "An Example Domain" example openstack project create --domain default --description "Service Project" service
创建 OpenStack
客户端环境脚本(其实和之前那一步一样的,只是更详细点,可以直接配置这个)
1 vim /etc/keystone/admin-openrc.sh
内容
1 2 3 4 5 6 7 8 9 # !/bin/bash export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=000000 export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
验证(返回value
表示成功)
提示:至此是没有问题的
本阶段脚本(暂时不能一键执行,放这里只是为了方便粘贴)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 mysql -u root -p # 注意数据库没密码,直接回车 CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123'; quit dnf install -y openstack-keystone httpd python3-mod_wsgi cp /etc/keystone/keystone.conf{,.bak} grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf # 对配置文件进行一系列添加 su -s /bin/sh -c "keystone-manage db_sync" keystone keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone keystone-manage bootstrap --bootstrap-password 000000 \ --bootstrap-admin-url http://controller:5000/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne echo "ServerName controller" >> /etc/httpd/conf/httpd.conf # 定义文件路径 CONFIG_FILE="/etc/keystone/admin-openrc.sh" # 写入配置内容 cat <<EOL > "$CONFIG_FILE" # !/bin/bash export OS_USERNAME=admin export OS_PASSWORD=000000 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 EOL # 赋予执行权限 chmod +x "$CONFIG_FILE" # 输出完成信息 echo "配置已写入 $CONFIG_FILE" source /etc/keystone/admin-openrc.sh openstack domain create --description "An Example Domain" example openstack project create --domain default --description "Service Project" service # 验证一下能否获取TOKEN CONFIG_FILE="/etc/keystone/admin-openrc.sh" cat <<EOL > "$CONFIG_FILE" # !/bin/bash export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=000000 export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 EOL source /etc/keystone/admin-openrc.sh openstack token issue
glance 创建数据库并赋予权限
1 2 3 4 mysql CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance123'; quit
如果过程中重启了虚拟机,需要重新导入环境变量(也可以写入~/.bashrc
,如果是做一次实验的话就不用了)
创建glance
用户
1 openstack user create --domain default --password glance glance # 前一个glance是密码,后一个glance是用户
给glance
用户和service
项目增加管理员角色
1 openstack role add --project service --user glance admin
创建service
实体
1 openstack service create --name glance --description "OpenStack Image" image
创建镜像服务(Glance)的端点
public :公开的端点,允许外部用户访问镜像服务。
internal :内部端点,仅供内部服务或项目使用。
admin :管理端点,供管理员使用,通常具有更高的权限。
这些端点使得不同角色的用户能够以不同方式访问镜像服务
1 2 3 openstack endpoint create --region RegionOne image public http://controller:9292 openstack endpoint create --region RegionOne image internal http://controller:9292 openstack endpoint create --region RegionOne image admin http://controller:9292
安装glance
安装包
1 yum install -y openstack-glance
和keystone
一样的操作,备份原来的配置文件,然后去掉没必要的进行配置
1 2 cp /etc/glance/glance-api.conf{,.bak} grep -Ev "^$|#" /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf
添加配置内容(注意:对应的配置必须放置在对应的块下面)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [DEFAULT] log_file = /var/log/glance/glance-api.log[database] connection = mysql+pymysql://glance:glance123@controller/glance[glance_store] stores = file,httpdefault_store = filefilesystem_store_datadir = /var/lib/glance/images/[keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = glancepassword = glance[paste_deploy] flavor = keystone
同步 Glance(镜像服务)的数据库
1 su -s /bin/sh -c "glance-manage db_sync" glance
启动服务
1 systemctl enable --now openstack-glance-api.service
查看端口验证(出现9292
算成功)
查看日志验证
1 tail -f /var/log/glance/glance-api.log
服务验证(必须做)建议从浏览器下载再上传,通过任何办法上传至虚拟机
1 wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
创建一个镜像
1 2 3 4 5 6 7 glance image-create --name "cirros" \ --file cirros-0.4.0-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --visibility public # 验证 glance image-list
注意:至此是没有任何问题
完成此阶段的脚本
placement 创建数据库并赋予权限
1 2 3 4 mysql CREATE DATABASE placement; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'placement123'; quit
创建placement
用户和密码
1 openstack user create --domain default --password placement placement # 前面是密码,后面是用户
将 placement
用户分配给 service
项目,并赋予 admin
角色(这个是scheduler
和conductor
服务起不来的原因)
1 openstack role add --project service --user placement admin
创建一个名为 placement
的服务
1 openstack service create --name placement --description "Placement API" placement
为 Placement 服务创建端点(直接复制执行即可,官方文档的)
1 2 3 openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778
安装
1 yum install -y openstack-placement-api
筛选出参数
1 cp /etc/placement/placement.conf{,.bak}
1 grep -Ev "^$|#" /etc/placement/placement.conf.bak > /etc/placement/placement.conf
编辑文件:vim /etc/placement/placement.conf
添加如下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [api] auth_strategy = keystone[keystone_authtoken] auth_url = http://controller:5000 /v3memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = placementpassword = placement[placement_database] connection = mysql+pymysql://placement:placement123@controller/placement
同步数据库
1 2 3 4 [root@controller ~]# su -s /bin/sh -c "placement-manage db sync" placement # 报以下回显,不用管 /usr/lib/python3.9/site-packages/pymysql/cursors.py:170: Warning: (1280, "Name 'alembic_version_pkc' ignored for PRIMARY key.") result = self._query(query)
重启httpd
之前,需要注意2.4
版本以上重启服务器时需要对文件进行同步
1 2 3 [root@controller ~]# httpd -v Server version: Apache/2.4.51 (Unix) Server built: May 6 2024 00:00:00
1 vim /etc/httpd/conf.d/00-placement-api.conf
重启httpd
ss -tnl
查看出现8778
端口表示成功
验证
1 placement-status upgrade check
1 2 3 4 5 6 7 8 9 10 11 12 [root@controller ~]# placement-status upgrade check +----------------------------------+ | Upgrade Check Results | +----------------------------------+ | Check: Missing Root Provider IDs | | Result: Success | | Details: None | +----------------------------------+ | Check: Incomplete Consumers | | Result: Success | | Details: None | +----------------------------------+
注意:至此没有问题
nova 控制节点 创建数据库并赋予权限
1 2 3 4 5 6 7 8 mysql CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova123'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova123'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova123';
创建用户(很慢,稍安勿躁)
1 openstack user create --domain default --password nova nova # 前密码后用户
赋予管理员权限
1 openstack role add --project service --user nova admin
创建服务
1 openstack service create --name nova --description "OpenStack Compute" compute
为服务创建API
端点
1 2 3 openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
安装组件
openstack-nova-api :提供 Nova 的 REST API 接口,处理用户请求并与其他组件进行通信。
openstack-nova-conductor :负责管理计算节点的状态和任务,协调数据库操作,确保任务的分发和执行。
openstack-nova-novncproxy :提供 VNC 代理服务,使用户能够通过浏览器访问虚拟机的控制台,方便远程管理。
openstack-nova-scheduler :负责选择适当的计算节点来运行实例,基于资源可用性和调度策略做出决策。
1 yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
过滤参数
1 cp /etc/nova/nova.conf{,.bak}
1 grep -Ev "^$|#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
controller
节点填充参数(8项)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [DEFAULT] enabled_apis = osapi_compute,metadatatransport_url = rabbit://openstack:000000 @controller:5672 /my_ip = 192.168 .100.10 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriverlog_file = /var/log/nova/nova.log[api] auth_strategy = keystone[api_database] connection = mysql+pymysql://nova:nova123@controller/nova_api[database] connection = mysql+pymysql://nova:nova123@controller/nova[glance] api_servers = http://controller:9292 [keystone_authtoken] www_authenticate_uri = http://controller:5000 /auth_url = http://controller:5000 /memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = novapassword = nova[oslo_concurrency] lock_path = /var/lib/nova/tmp[placement] region_name = RegionOneproject_domain_name = Defaultproject_name = serviceauth_type = passworduser_domain_name = Defaultauth_url = http://controller:5000 /v3username = placementpassword = placement[vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip
controller
节点同步数据库
1 2 3 4 5 su -s /bin/sh -c "nova-manage api_db sync" nova su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova su -s /bin/sh -c "nova-manage db sync" nova su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
启动(启动不了检查配置文件和placement
有无漏掉的步骤)
1 2 3 4 5 systemctl enable --now \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service
方便重启
1 2 3 4 5 systemctl restart \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service
vnc
的端口是6080
,还有个8774
看到就算成功(暂时不理解,这些端口代表的服务)
计算节点 安装
1 yum install -y openstack-nova-compute
配置(配置较多,要小心)
1 cp /etc/nova/nova.conf{,.bak}
1 grep -Ev "^$|#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
修改配置文件vim /etc/nova/nova.conf
详细内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [DEFAULT] enabled_apis = osapi_compute,metadatatransport_url = rabbit://openstack:000000 @controllercompute_driver =libvirt.LibvirtDriver my_ip = 192.168 .100.20 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriverlog_file = /var/log/nova/nova-compute.log[api] auth_strategy = keystone[keystone_authtoken] www_authenticate_uri = http://controller:5000 /auth_url = http://controller:5000 /memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = novapassword = nova[vnc] enabled = true server_listen = 0.0 .0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://192.168 .100.10 :6080 /vnc_auto.html[glance] api_servers = http://controller:9292 [oslo_concurrency] lock_path = /var/lib/nova/tmp[placement] region_name = RegionOneproject_domain_name = Defaultproject_name = service auth_type = passworduser_domain_name = Defaultauth_url = http://controller:5000 /v3username = placementpassword = placement
注意:在centos
中,需要修改[libvirt]
,但是在欧拉系统中分情况;查看虚拟机是否支持虚拟化,如果是0
则需要配置[libvirt]
1 egrep -c '(vmx|svm)' /proc/cpuinfo
添加如下内容注意:如果不显示为0则不需要配置
1 2 [libvirt] virt_type = qemu
重启注意:
不可以直接起,先启动libvirtd
,再启动openstack-nova-compute
1 2 3 systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd systemctl start libvirtd.service openstack-nova-compute.service
报错
解决:显示没用目录,直接创建一个/usr/lib/python3.9/site-packages/instances
,并给nova
权限去管理
1 2 3 4 5 6 7 8 9 10 11 [root@compute ~]# tail -f /var/log/nova/nova-compute.log 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager File "/usr/lib/python3.9/site-packages/nova/compute/resource_tracker.py", line 871, in update_available_resource 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager resources = self.driver.get_available_resource(nodename) 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager File "/usr/lib/python3.9/site-packages/nova/virt/libvirt/driver.py", line 8025, in get_available_resource 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager disk_info_dict = self._get_local_gb_info() 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager File "/usr/lib/python3.9/site-packages/nova/virt/libvirt/driver.py", line 6483, in _get_local_gb_info 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager info = libvirt_utils.get_fs_info(CONF.instances_path) 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager File "/usr/lib/python3.9/site-packages/nova/virt/libvirt/utils.py", line 403, in get_fs_info 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager hddinfo = os.statvfs(path) 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.9/site-packages/instances' 2024-10-02 09:26:21.603 2987 ERROR nova.compute.manager
解决问题
1 2 3 mkdir /usr/lib/python3.9/site-packages/instances chown -R root.nova /usr/lib/python3.9/site-packages/instances systemctl restart openstack-nova-compute.service
此时依然有问题(没有发现计算节点的主机),虽然是之前错写了192.168.100.10
,但是写192.168.100.20
也会出现同样的错误
解决问题
在controller
上查看一下,如何有哪些计算节点
1 openstack compute service list --service nova-compute
如下
1 2 3 4 5 6 [root@controller ~]# openstack compute service list --service nova-compute +----+--------------+---------+------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+--------------+---------+------+---------+-------+----------------------------+ | 9 | nova-compute | compute | nova | enabled | up | 2024-10-29T11:07:47.000000 | +----+--------------+---------+------+---------+-------+----------------------------+
同步。主机发现【controller
执行】
1 su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
再次重启【compute
执行】
1 systemctl restart openstack-nova-compute.service
验证
1 openstack compute service list
以下up
表示成功
1 2 3 4 5 6 7 +----+----------------+------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+----------------+------------+----------+---------+-------+----------------------------+ | 4 | nova-conductor | controller | internal | enabled | up | 2024-10-02T01:40:13.000000 | | 7 | nova-scheduler | controller | internal | enabled | up | 2024-10-02T01:40:15.000000 | | 10 | nova-compute | compute | nova | enabled | up | 2024-10-02T01:40:19.000000 | +----+----------------+------------+----------+---------+-------+----------------------------+
注意:执行到此没有问题
neutron 控制节点 数据库创建、授权
1 2 3 mysql CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron123';
创建用户
1 openstack user create --domain default --password neutron neutron
给用户赋予admin
角色
1 openstack role add --project service --user neutron admin
创建网络服务Neutron
的服务条目
1 openstack service create --name neutron --description "OpenStack Networking" network
为这个服务创建三个端点(分别是:内网、公网、广域网)
1 2 3 openstack endpoint create --region RegionOne network public http://controller:9696 openstack endpoint create --region RegionOne network internal http://controller:9696 openstack endpoint create --region RegionOne network admin http://controller:9696
配置 server 组件 安装相应的服务
1 2 3 # yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch ebtables yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables # yum install -y openstack-neutron-linuxbridge.noarch
有一个报错:(后面会解决)
1 2 Couldn't write '1' to 'net/bridge/bridge-nf-call-ip6tables', ignoring: No such file or directory Couldn't write '1' to 'net/bridge/bridge-nf-call-iptables', ignoring: No such file or directory
备份、过滤
1 2 cp /etc/neutron/neutron.conf{,.bak} grep -Ev "^$|#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
添加配置信息vim /etc/neutron/neutron.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [DEFAULT] core_plugin = ml2service_plugins = routerallow_overlapping_ips = true transport_url = rabbit://openstack:000000 @controllerauth_strategy = keystonenotify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true [database] connection = mysql+pymysql://neutron:neutron123@controller/neutron[keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = neutronpassword = neutron[oslo_concurrency] lock_path = /var/lib/neutron/tmp[nova] auth_url = http://controller:5000 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultregion_name = RegionOneproject_name = serviceusername = novapassword = nova
配置模块化第 2 层 备份、过滤
1 2 cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak} grep -Ev "^$|#" /etc/neutron/plugins/ml2/ml2_conf.ini.bak > /etc/neutron/plugins/ml2/ml2_conf.ini
添加配置信息vim /etc/neutron/plugins/ml2/ml2_conf.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [ml2] type_drivers = flat,vlan,vxlantenant_network_types = vxlanmechanism_drivers = linuxbridge,l2populationextension_drivers = port_security[ml2_type_flat] flat_networks = extnal[ml2_type_vxlan] vni_ranges = 1 :10000 [securitygroup] enable_ipset = true
配置 Open vSwitch 代理 备份、过滤
1 2 cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak} grep -Ev "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
添加配置信息vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 2 3 4 5 6 7 8 9 10 11 12 [linux_bridge] bridge_interface_mappings = extnal:eth0 [vxlan] enable_vxlan = true local_ip = 192.168 .100.10 l2_population = true [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置内核开放(注意:手工在结尾处加上EOF
表示结束)
1 2 3 tee -a /etc/sysctl.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
加载模块并使其生效
1 2 modprobe br_netfilter sysctl -p
配置第 3 层代理 因为就添加一条,所以就不过滤了
1 vim /etc/neutron/l3_agent.ini
添加内容
1 2 [DEFAULT] interface_driver = linuxbridge
配置 DHCP 代理 因为就添加一条,所以就不过滤了
1 vim /etc/neutron/dhcp_agent.ini
添加内容
1 2 3 4 [DEFAULT] interface_driver = linuxbridgedhcp_driver = neutron.agent.linux.dhcp.Dnsmasqenable_isolated_metadata = true
注意:至此,没有出现分歧现象
配置元数据代理 只添加一条,无需过滤
1 vim /etc/neutron/metadata_agent.ini
添加内容
1 2 3 [DEFAULT] nova_metadata_host = controllermetadata_proxy_shared_secret = wzy
配置 Compute 服务以使用 Networking 服务 向nova
添加配置信息vim /etc/nova/nova.conf
1 2 3 4 5 6 7 8 9 10 11 [neutron] auth_url = http://controller:5000 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultregion_name = RegionOneproject_name = serviceusername = neutronpassword = neutronservice_metadata_proxy = true metadata_proxy_shared_secret = wzy
完成安装 networking
服务初始化脚本需要一个指向 ML2
插件配置的符号链接文件
1 ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
同步数据库
1 2 su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
重启nova-api
服务(为了生成我们刚刚添加的neutron
配重块)
1 systemctl restart openstack-nova-api.service
启动 Networking 服务并配置自启动
1 2 3 4 5 6 7 systemctl enable neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service neutron-l3-agent.service # 方便重启 systemctl restart neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service neutron-l3-agent.service
报错:(但是最后成功了,不用管)
1 2 3 4 5 6 7 8 9 10 11 ==> /var/log/neutron/metadata-agent.log <== 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent File "/usr/lib/python3.9/site-packages/oslo_messaging/_drivers/amqpdriver.py", line 661, in _send 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent result = self._waiter.wait(msg_id, timeout, 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent File "/usr/lib/python3.9/site-packages/oslo_messaging/_drivers/amqpdriver.py", line 551, in wait 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent message = self.waiters.get(msg_id, timeout=timeout) 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent File "/usr/lib/python3.9/site-packages/oslo_messaging/_drivers/amqpdriver.py", line 427, in get 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent raise oslo_messaging.MessagingTimeout( 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent oslo_messaging.exceptions.MessagingTimeout: Timed out waiting for a reply to message ID c12fb6e656654662b5d7f78231d9a2e8 2024-10-29 19:53:27.330 23645 ERROR neutron.agent.metadata.agent 2024-10-29 19:53:27.333 23645 WARNING oslo.service.loopingcall [-] Function 'neutron.agent.metadata.agent.UnixDomainMetadataProxy._report_state' run outlasted interval by 30.08 sec 2024-10-29 19:53:27.342 23645 INFO neutron.agent.metadata.agent [-] Successfully reported state after a previous failure.
注意:至此没有出现分歧
计算节点 安装
1 yum install -y openstack-neutron-linuxbridge ebtables ipset
配置通用组件 备份、过滤
1 2 cp /etc/neutron/neutron.conf{,.bak} grep -Ev "^$|#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
添加配置信息vim /etc/neutron/neutron.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [DEFAULT] transport_url = rabbit://openstack:000000 @controllerauth_strategy = keystone[keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = neutronpassword = neutron[oslo_concurrency] lock_path = /var/lib/neutron/tmp
配置三层代理 备份、过滤
1 2 cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak} grep -Ev "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
添加配置信息vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 2 3 4 5 6 7 8 9 10 11 12 [linux_bridge] physical_interface_mappings = extnal:eth0[vxlan] enable_vxlan = true local_ip = 192.168 .100.20 l2_population = true [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置内核开放
1 2 3 tee -a /etc/sysctl.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
加载模块并使其生效
1 2 modprobe br_netfilter sysctl -p
配置 Compute 服务以使用 Networking 服务 新增以下配置vim /etc/nova/nova.conf
1 2 3 4 5 6 7 8 9 [neutron] auth_url = http://controller:5000 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultregion_name = RegionOneproject_name = serviceusername = neutronpassword = neutron
完成安装 重启nova-api
服务,很慢
1 systemctl restart openstack-nova-compute.service
注意:到这一步完全一致
启动neutron
1 systemctl enable --now neutron-linuxbridge-agent.service
验证(在controller
节点验证)
1 2 openstack network agent list neutron agent-list
完美成功
这些不用管
下图是linuxbridge
的日志
没用down
或false
表示成功
由于部署过程出现些小差错,应当是两个linuxbridge-agent
、一个neutron-13-agent
,一个dhcp-agent
,一个metadata-agent
dashboard 安装
1 yum install -y openstack-dashboard
配置
1 vim /etc/openstack-dashboard/local_settings
配置内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # xx OPENSTACK_HOST = "controller" # xx ALLOWED_HOSTS = ["*"] # 取消注释 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', }, } # xx SESSION_ENGINE = 'django.contrib.sessions.backends.cache' OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 3, } OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default" OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" TIME_ZONE = "Asia/Shanghai"
配置(这一步没啥做的,关于这个配置文件可以进一步了解)
1 2 3 vim /etc/httpd/conf.d/openstack-dashboard.conf # 如果没有下面这行需要加上 WSGIApplicationGroup %{GLOBAL}
解决问题
直接启动,不存在问题
1 systemctl restart httpd.service memcached.service
如果出现问题,一般是python
版本问题,软连接一下即可
访问地址(存在的问题是:登录进去后,直接跳转apache
测试页面)
错误日志位置:/var/log/httpd/openstack-dashboard-error_log
1 http://192.168.100.10/dashboard/auth/login/
问题解决:修改vim /etc/httpd/conf.d/openstack-dashboard.conf
的如下地方
问题(说找不到/usr/share/openstack-dashboard/openstack_dashboard/conf/nova_policy.json
)
1 tail -f /var/log/httpd/openstack-dashboard-error_log
使用find
工具找一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@controller ~]# find / -name nova_policy.json /usr/lib/python3.9/site-packages/openstack_auth/tests/conf/nova_policy.json /etc/openstack-dashboard/nova_policy.json # <-- 这个是需要的 # 其他的也都在这里 [root@controller ~]# ll /etc/openstack-dashboard/ total 92K -rw-r----- 1 root apache 8.4K May 17 2021 cinder_policy.json -rw-r----- 1 root apache 1.4K May 17 2021 glance_policy.json -rw-r----- 1 root apache 10K May 17 2021 keystone_policy.json -rw-r----- 1 root apache 13K Oct 2 14:39 local_settings -rw-r----- 1 root apache 13K Oct 2 14:13 local_settings.rpmsave -rw-r----- 1 root apache 13K May 17 2021 neutron_policy.json drwxr-xr-x 2 root root 4.0K Oct 2 14:35 nova_policy.d -rw-r----- 1 root apache 10K May 17 2021 nova_policy.json
之所以会报错是因为找的不是存放这些文件的目录:(找的是下面这个目录,本地都没有这个目录,所以肯定会报错)
1 /usr/share/openstack-dashboard/openstack_dashboard/conf/cinder_policy.json
解决方法:
重启httpd
1 systemctl restart httpd memcached
成功解决
问题:身份管理界面,一点就Internal Server Error
或 `Forbidden``
1 2 3 4 [Wed Oct 02 15:12:33.837776 2024] [authz_core:error] [pid 24340:tid 24518] [client 192.168.100.1:9373] AH01630: client denied by server configuration: /usr/bin/keystone-wsgi-public, referer: http://192.168.100.10/admin/metadata_defs/ [Wed Oct 02 15:12:41.231599 2024] [authz_core:error] [pid 24340:tid 24528] [client 192.168.100.1:9373] AH01630: client denied by server configuration: /usr/bin/keystone-wsgi-public, referer: http://192.168.100.10/admin/metadata_defs/ [Wed Oct 02 15:12:47.842971 2024] [authz_core:error] [pid 24569:tid 24619] [client 192.168.100.1:9382] AH01630: client denied by server configuration: /usr/bin/keystone-wsgi-public, referer: http://192.168.100.10/admin/metadata_defs/ [Wed Oct 02 15:12:57.859191 2024] [authz_core:error] [pid 24341:tid 24546] [client 192.168.100.1:9386] AH01630: client denied by server configuration: /usr/bin/keystone-wsgi-public, referer: http://192.168.100.10/admin/metadata_defs/
这两个解决方法一样
1 vim /etc/httpd/conf.d/openstack-dashboard.conf
1 vim /etc/openstack-dashboard/local_settings
注意:此问题属于最开始访问页面的衍生问题,其实只需要最开始加一个WEBROOT="/dashboard/"
,然后通过此路径访问即可
以下是正常的
创建一个实例测一下
由于网络部分出现小问题,所以暂时无法做云主机实例
接下来是创建实力类型、创建实例、使用我们上传的cirros
镜像,网络选择内网网卡
注意
:创建实例的时候会出现报错,没有文件夹的权限
1 2 3 chown -R nova.nova /usr/lib/python3.9/site-packages/ sudo chown -R nova:nova /usr/lib/python3.9/site-packages/instances/ sudo chmod -R 775 /usr/lib/python3.9/site-packages/instances/
1 openstack security group rule create --protocol tcp, --port-range <port_range> --remote-ip <ip_range> <new_security_group_name>
这样创建的云主机是可以用shell
连接的,还可以上网
这里遇到报错,一直说是网卡的问题,暂时无力解决nova-compute.log
完整报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 2024-10-30 11:49:58.544 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] 2024-10-30 11:49:58.545 2341 INFO nova.compute.manager [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Terminating instance 2024-10-30 11:49:58.684 2341 INFO nova.virt.libvirt.driver [-] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Instance destroyed successfully. 2024-10-30 11:49:58.685 2341 INFO nova.virt.libvirt.driver [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Deleting instance files /usr/lib/python3.9/site-packages/instances/d6c4fa69-ca28-4411-a11f-7d0cced9cfd3_del 2024-10-30 11:49:58.685 2341 INFO nova.virt.libvirt.driver [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Deletion of /usr/lib/python3.9/site-packages/instances/d6c4fa69-ca28-4411-a11f-7d0cced9cfd3_del complete 2024-10-30 11:49:58.730 2341 INFO nova.compute.manager [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Took 0.05 seconds to destroy the instance on the hypervisor. 2024-10-30 11:49:58.772 2341 INFO nova.compute.manager [-] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Took 0.04 seconds to deallocate network for instance. 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Failed to build and run instance: nova.exception.PortBindingFailed: Binding failed for port b4704c31-3f11-4027-9ba4-47df3c1dbd2e, please check neutron logs for more information. 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Traceback (most recent call last): 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/compute/manager.py", line 2441, in _build_and_run_instance 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] self.driver.spawn(context, instance, image_meta, 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/virt/libvirt/driver.py", line 3541, in spawn 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] xml = self._get_guest_xml(context, instance, network_info, 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/virt/libvirt/driver.py", line 6161, in _get_guest_xml 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] network_info_str = str(network_info) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/model.py", line 601, in __str__ 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] return self._sync_wrapper(fn, *args, **kwargs) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/model.py", line 584, in _sync_wrapper 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] self.wait() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/model.py", line 616, in wait 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] self[:] = self._gt.wait() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/eventlet/greenthread.py", line 181, in wait 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] return self._exit_event.wait() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/eventlet/event.py", line 125, in wait 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] result = hub.switch() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/eventlet/hubs/hub.py", line 313, in switch 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] return self.greenlet.switch() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/eventlet/greenthread.py", line 221, in main 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] result = function(*args, **kwargs) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/utils.py", line 675, in context_wrapper 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] return func(*args, **kwargs) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/compute/manager.py", line 1716, in _allocate_network_async 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] six.reraise(*exc_info) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/six.py", line 719, in reraise 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] raise value 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/compute/manager.py", line 1694, in _allocate_network_async 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] nwinfo = self.network_api.allocate_for_instance( 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/neutronv2/api.py", line 1037, in allocate_for_instance 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] created_port_ids = self._update_ports_for_instance( 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/neutronv2/api.py", line 1169, in _update_ports_for_instance 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] vif.destroy() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/oslo_utils/excutils.py", line 220, in __exit__ 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] self.force_reraise() 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/oslo_utils/excutils.py", line 196, in force_reraise 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] six.reraise(self.type_, self.value, self.tb) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/six.py", line 719, in reraise 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] raise value 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/neutronv2/api.py", line 1138, in _update_ports_for_instance 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] updated_port = self._update_port( 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/neutronv2/api.py", line 513, in _update_port 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] _ensure_no_port_binding_failure(port) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] File "/usr/lib/python3.9/site-packages/nova/network/neutronv2/api.py", line 236, in _ensure_no_port_binding_failure 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] raise exception.PortBindingFailed(port_id=port['id']) 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] nova.exception.PortBindingFailed: Binding failed for port b4704c31-3f11-4027-9ba4-47df3c1dbd2e, please check neutron logs for more information. 2024-10-30 11:49:58.847 2341 ERROR nova.compute.manager [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] 2024-10-30 11:49:59.055 2341 INFO nova.compute.manager [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] [instance: d6c4fa69-ca28-4411-a11f-7d0cced9cfd3] Took 0.04 seconds to deallocate network for instance. 2024-10-30 11:49:59.170 2341 INFO nova.scheduler.client.report [req-e37fab39-0d4f-4b0f-93bc-5ce7074c01a3 c051161a8cef484ebb4911b8725bedf9 b34a554fc8ab4a14b22f6ced9981b2d5 - default default] Deleted allocation for instance d6c4fa69-ca28-4411-a11f-7d0cced9cfd3 2024-10-30 11:58:47.702 2341 INFO nova.compute.manager [req-12c0bdc7-71c0-423c-beba-19d3dec722a0 - - - - -] Updating bandwidth usage cache 2024-10-30 11:58:47.715 2341 INFO nova.compute.manager [req-12c0bdc7-71c0-423c-beba-19d3dec722a0 - - - - -] Bandwidth usage not supported by libvirt.LibvirtDriver.
小娱乐 可以改一下openstack
的图标
openstack
的图标都是svg
,所以可以右击logo.svg
,然后看一下他的像素大小(搜索viewBox
就能看到,前两个数字代表左上角坐标,后面两个是宽和高)
然后去PS
设计一下,导出一个透明背景的png
,再去lnkscape
过一下,导出为svg
,上传到openstack
的图片路径替换就行了
先暂停,后续再补上
cinder swift