news 2026/8/28 6:46:47

【OpenStack部署-1】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【OpenStack部署-1】

主机网络

各个节点操都要配置

配置网络接口

将第一个接口配置为管理网络接口

[root@controller ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

提供者网络接口使用一个特殊的配置,不分配给它IP地址。配置第二块网卡作为提供者网络

[root@controller ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

改完之后

[root@controller ~]# systemctl restart network

如果网卡名称不是eth0,加一条参数,重启生效

[root@controller ~]# vim /boot/grub2/grub.cfg

配置域名解析

[root@controller ~]# vim /etc/hosts

网络时间协议(NTP)

控制节点服务器

[root@controller ~]# yum install chrony

[root@controller ~]# vim /etc/chrony.conf

[root@controller ~]# systemctl enable --now chronyd.service

其它节点服务器

[root@compute1 ~]# yum install chrony
[root@compute1 ~]# vim /etc/chrony.conf

[root@compute1 ~]# systemctl enable --now chronyd.service

OpenStack包

主机必须包含最新版本的基础安装软件包

[root@controller ~]# tar xf mitaka.tar -C /opt/

[root@controller ~]# vim /etc/yum.repos.d/openstack.repo

[root@controller ~]# yum upgrade

如果更新了一个新内核,重启主机来使用新内核

安装 OpenStack 客户端

[root@controller ~]# yum install python-openstackclient

SQL数据库

[root@controller ~]# yum install mariadb mariadb-server python2-PyMySQL

[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf

[root@controller ~]# systemctl enable --now mariadb.service

[root@controller ~]# mysql_secure_installation

消息队列

[root@controller ~]# yum install rabbitmq-server

[root@controller ~]# rabbitmq-plugins enable --now rabbitmq_management

[root@controller ~]# systemctl enable --now rabbitmq-server.service

[root@controller ~]# rabbitmqctl add_user openstack openstack

[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"

http://192.168.247.171:15672/

用户/密码:guest/guest

Memcached

[root@controller ~]# yum install memcached python-memcached

[root@controller ~]# vim /etc/sysconfig/memcached

[root@controller ~]# systemctl enable --now memcached.service

认证服务

这一章描述如何在控制节点上安装和配置OpenStack身份认证服务,代码名称keystone。出于性能原因,这个配置部署Fernet令牌和Apache HTTP服务处理请求

安装和配置

先决条件

[root@controller ~]# mysql -u root -p

CREATE DATABASE keystone;

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'KEYSTONE_DBPASS';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'KEYSTONE_DBPASS';

用合适的密码替换 KEYSTONE_DBPASS

生成一个随机值在初始的配置中作为管理员的令牌

[root@controller ~]# openssl rand -hex 10

安全并配置组件

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi

[root@controller ~]# vim /etc/keystone/keystone.conf

admin_token = ADMIN_TOKEN

使用前面步骤生成的随机数替换``ADMIN_TOKEN`` 值。

connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

将``KEYSTONE_DBPASS``替换为你为数据库选择的密码

在``[token]``部分,配置Fernet UUID令牌的提供者

provider = fernet

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置 Apache HTTP 服务器

[root@controller ~]# vim /etc/httpd/conf/httpd.conf

[root@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf

Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost> <VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On ErrorLogFormat "%{cu}t %M" ErrorLog /var/log/httpd/keystone-error.log CustomLog /var/log/httpd/keystone-access.log combined <Directory /usr/bin> Require all granted </Directory> </VirtualHost>

[root@controller ~]# systemctl enable --now httpd.service

创建服务实体和API端点

export OS_TOKEN=ADMIN_TOKEN

将ADMIN_TOKEN替换为你生成的认证令牌。例如:

[root@controller ~]# export OS_TOKEN=32684dec9a19700d548f
[root@controller ~]# export OS_URL=http://controller:35357/v3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3

$ openstack service create \ --name keystone --description "OpenStack Identity" identity
$ openstack endpoint create --region RegionOne \ identity public http://controller:5000/v3
$ openstack endpoint create --region RegionOne \ identity internal http://controller:5000/v3
$ openstack endpoint create --region RegionOne \ identity admin http://controller:35357/v3

创建域、项目、用户和角色

$ openstack domain create --description "Default Domain" default
$ openstack project create --domain default \ --description "Admin Project" admin
$ openstack user create --domain default \ --password-prompt admin
$ openstack role create admin
$ openstack role add --project admin --user admin admin
$ openstack project create --domain default \ --description "Service Project" service
$ openstack project create --domain default \ --description "Demo Project" demo
$ openstack user create --domain default \ --password-prompt demo
$ openstack role create user
$ openstack role add --project demo --user demo user

验证操作

重置``OS_TOKEN``和``OS_URL`` 环境变量:

$ unset OS_TOKEN OS_URL

作为 admin 用户,请求认证令牌:

$ openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name admin --os-username admin token issue

作为``demo`` 用户,请求认证令牌:

$ openstack --os-auth-url http://controller:5000/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name demo --os-username demo token issue

创建 OpenStack 客户端环境脚本

[root@controller ~]# vim admin-openrc

export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2

将 ADMIN_PASS 替换为你在认证服务中为 admin 用户选择的密码

[root@controller ~]# vim demo-openrc

export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2

将 DEMO_PASS 替换为你在认证服务中为 demo 用户选择的密码

[root@controller ~]# chmod +x admin-openrc demo-openrc
[root@controller ~]# . admin-openrc

[root@controller ~]# openstack token issue


镜像服务

安装和配置

$ mysql -u root -p
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ IDENTIFIED BY 'GLANCE_DBPASS'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ IDENTIFIED BY 'GLANCE_DBPASS';

用一个合适的密码替换 GLANCE_DBPASS

退出数据库客户端

$ . admin-openrc
$ openstack user create --domain default --password-prompt glance

$ openstack role add --project service --user glance admin
$ openstack service create --name glance \ --description "OpenStack Image" image

$ 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

[root@controller ~]# yum install openstack-glance

编辑文件 /etc/glance/glance-api.conf 并完成如下动作

  • [database] ... connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

    将``GLANCE_DBPASS`` 替换为你为镜像服务选择的密码。

  • 在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:

    [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = GLANCE_PASS [paste_deploy] ... flavor = keystone

    将 GLANCE_PASS 替换为你为认证服务中你为 glance 用户选择的密码。

  • 在 [glance_store] 部分,配置本地文件系统存储和镜像文件位置:

    [glance_store] ... stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/

编辑文件 ``/etc/glance/glance-registry.conf``并完成如下动作:

  • 在 [database] 部分,配置数据库访问:

    [database] ... connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

    将``GLANCE_DBPASS`` 替换为你为镜像服务选择的密码。

  • 在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:

    [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = GLANCE_PASS [paste_deploy] ... flavor = keystone

写入镜像服务数据库:

# su -s /bin/sh -c "glance-manage db_sync" glance
  • 启动镜像服务、配置他们随机启动:

    # systemctl enable openstack-glance-api.service \ openstack-glance-registry.service # systemctl start openstack-glance-api.service \ openstack-glance-registry.service

验证操作

$ . admin-openrc
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
$ openstack image create "cirros" \ --file cirros-0.3.4-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public

$ openstack image list

计算服务

安装并配置控制节点

先决条件

$ mysql -u root -p
CREATE DATABASE nova_api; CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY 'NOVA_DBPASS';

用合适的密码代替 NOVA_DBPASS

退出数据库客户端

$ . admin-openrc
$ openstack user create --domain default \ --password-prompt nova

$ openstack role add --project service --user nova admin
$ openstack service create --name nova \ --description "OpenStack Compute" compute

openstack endpoint create --region RegionOne \ compute public http://controller:8774/v2.1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \ compute internal http://controller:8774/v2.1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \ compute admin http://controller:8774/v2.1/%\(tenant_id\)s

安全并配置组件

yum install openstack-nova-api openstack-nova-conductor \ openstack-nova-console openstack-nova-novncproxy \ openstack-nova-scheduler

[root@controller ~]# vim /etc/nova/nova.conf

[DEFAULT] ... enabled_apis = osapi_compute,metadata
[api_database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

用你为 Compute 数据库选择的密码来代替 NOVA_DBPASS。

[DEFAULT] ... rpc_backend = rabbit [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS

用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

[DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = NOVA_PASS

使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``

[DEFAULT] ... my_ip = 192.168.247.171
[DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
[vnc] ... vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip
[glance] ... api_servers = http://controller:9292
[oslo_concurrency] ... lock_path = /var/lib/nova/tmp

同步Compute 数据库:

# su -s /bin/sh -c "nova-manage api_db sync" nova # su -s /bin/sh -c "nova-manage db sync" nova
  • 启动 Compute 服务并将其设置为随系统启动:

    # systemctl enable openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service # systemctl start openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service

安装和配置计算节点

安全并配置组件

# yum install openstack-nova-compute
[DEFAULT] ... rpc_backend = rabbit [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS

用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

[DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = NOVA_PASS

使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``

[DEFAULT] ... my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

将其中的 MANAGEMENT_INTERFACE_IP_ADDRESS 替换为计算节点上的管理网络接口的IP 地址

[DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
[vnc] ... enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html
[glance] ... api_servers = http://controller:9292
[oslo_concurrency] ... lock_path = /var/lib/nova/tmp

完成安装

$ egrep -c '(vmx|svm)' /proc/cpuinfo

如果这个命令返回了 one or greater 的值,那么你的计算节点支持硬件加速且不需要额外的配置。

如果这个命令返回了 zero 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM

启动计算服务及其依赖,并将其配置为随系统自动启动:

# systemctl enable libvirtd.service openstack-nova-compute.service # systemctl start libvirtd.service openstack-nova-compute.service

验证操作

在控制节点上执行这些命令

Networking 服务

安装并配置控制节点

$ mysql -u root -p
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ IDENTIFIED BY 'NEUTRON_DBPASS'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ IDENTIFIED BY 'NEUTRON_DBPASS';
$ . admin-openrc
$ openstack user create --domain default --password-prompt neutron

openstack role add --project service --user neutron admin
openstack service create --name neutron \ --description "OpenStack Networking" network

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

配置网络选项

yum install openstack-neutron openstack-neutron-ml2 \ openstack-neutron-linuxbridge ebtables

[root@controller ~]# vim /etc/neutron/neutron.conf

[database] ... connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

使用你设置的数据库密码替换 NEUTRON_DBPASS

[DEFAULT] ... core_plugin = ml2 service_plugins =
[DEFAULT] ... rpc_backend = rabbit [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS

用你在RabbitMQ中为``openstack``选择的密码替换 “RABBIT_PASS”

[DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码

[DEFAULT] ... notify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True [nova] ... auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = nova password = NOVA_PASS

使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``

[oslo_concurrency] ... lock_path = /var/lib/neutron/tmp

[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2] ... type_drivers = flat,vlan
[ml2] ... tenant_network_types =
[ml2] ... mechanism_drivers = linuxbridge
[ml2] ... extension_drivers = port_security
[ml2_type_flat] ... flat_networks = provider
[securitygroup] ... enable_ipset = True

[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

将``PUBLIC_INTERFACE_NAME`` 替换为底层的物理公共网络接口

[vxlan] enable_vxlan = False
[securitygroup] ... enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

[root@controller ~]# vim /etc/neutron/dhcp_agent.ini

[DEFAULT] ... interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = True

配置元数据代理

[root@controller ~]# vim /etc/neutron/metadata_agent.ini

[DEFAULT] ... nova_metadata_ip = controller metadata_proxy_shared_secret = METADATA_SECRET

用你为元数据代理设置的密码替换 METADATA_SECRET

为计算节点配置网络服务

[root@controller ~]# vim /etc/nova/nova.conf

[neutron] ... url = http://controller:9696 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS service_metadata_proxy = True metadata_proxy_shared_secret = METADATA_SECRET

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码。

使用你为元数据代理设置的密码替换``METADATA_SECRET``

完成安装

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
# 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
# systemctl restart openstack-nova-api.service
# systemctl enable neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service # systemctl start neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service

安装和配置计算节点

安装组件

# yum install openstack-neutron-linuxbridge ebtables ipset

配置通用组件

[root@compute1 ~]# vim /etc/neutron/neutron.conf

[DEFAULT] ... rpc_backend = rabbit [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS

用你在RabbitMQ中为``openstack``选择的密码替换 “RABBIT_PASS”

[DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码

[oslo_concurrency] ... lock_path = /var/lib/neutron/tmp

配置网络选项

[root@compute1 ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge] physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

将``PUBLIC_INTERFACE_NAME`` 替换为底层的物理公共网络接口

[vxlan] enable_vxlan = False
[securitygroup] ... enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

为计算节点配置网络服务

[root@compute1 ~]# vim /etc/nova/nova.conf

[neutron] ... url = http://controller:9696 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码

完成安装

# systemctl restart openstack-nova-compute.service
# systemctl enable neutron-linuxbridge-agent.service # systemctl start neutron-linuxbridge-agent.service

验证操作

在控制节点上执行这些命令

[root@controller ~]# neutron agent-list

输出结果应该包括控制节点上的三个代理和每个计算节点上的一个代理

启动一个实例

创建提供者网络

[root@controller ~]# . admin-openrc
[root@controller ~]# neutron net-create --shared --provider:physical_network provider \
> --provider:network_type flat provider

[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2_type_flat] flat_networks = provider

[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge] physical_interface_mappings = provider:eth1

[root@controller ~]# neutron subnet-create --name provider \
> --allocation-pool start=192.168.247.101,end=192.168.247.120 \
> --dns-nameserver 114.114.114.114 --gateway 192.168.247.2 \
> provider 192.168.247.0/24

创建m1.nano规格的主机

[root@controller ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

生成一个键值对

[root@controller ~]# ssh-keygen -q -N ""
[root@controller ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

[root@controller ~]# openstack keypair list

增加安全组规则

[root@controller ~]# openstack security group rule create --proto icmp default

[root@controller ~]# openstack security group rule create --proto tcp --dst-port 22 default

在公有网络上创建实例

[root@controller ~]# . demo-openrc
[root@controller ~]# openstack flavor list

[root@controller ~]# openstack image list

[root@controller ~]# openstack network list

[root@controller ~]# openstack security group list

[root@controller ~]# openstack server create --flavor m1.nano --image cirros --nic net-id=fd33ce72-9eeb-40b9-9965-8f398f1ab893 --security-group default --key-name mykey provider-instance

[root@controller ~]# openstack server list

使用虚拟控制台访问实例

[root@controller ~]# openstack console url show provider-instance

如果你运行浏览器的主机无法解析``controller`` 主机名,你可以将 ``controller``替换为你控制节点管理网络的IP地址

验证能否连接到互联网

验证能否远程访问实例

验证控制节点或者其他公有网络上的主机能否ping通实例

[root@controller ~]# openstack server list

在控制节点或其他公有网络上的主机使用 SSH远程访问实例

[root@controller ~]# ssh cirros@192.168.247.101

Dashboard

安装和配置

[root@controller ~]# yum install openstack-dashboard
[root@controller ~]# vim /etc/openstack-dashboard/local_settings

OPENSTACK_HOST = "controller"
ALLOWED_HOSTS = ['*', ]
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } }
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 2, }
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
OPENSTACK_NEUTRON_NETWORK = { ... 'enable_router': False, 'enable_quotas': False, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_lb': False, 'enable_firewall': False, 'enable_vpn': False, 'enable_fip_topology_check': False, }
TIME_ZONE = "Asia/Shanghai"

[root@controller ~]# systemctl restart httpd.service memcached.service

验证操作

http://192.168.247.171/dashboard

验证使用 admin 或者``demo``用户凭证和``default``域凭证

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 6:44:49

【RAG】Qwen 本地 RAG 推理智能体案例讲解

目录 一、案例目标 1.1 核心功能 1.2 技术要点 1.3 预期效果 二、技术栈与核心依赖 2.1 核心技术栈 2.2 核心依赖库 2.3 大语言模型选项 三、项目配置 3.1 环境准备 步骤 1:安装 Ollama 步骤 2:拉取所需模型 步骤 3:启动 Qdrant 向量数据库 3.2 依赖安装 3.3…

作者头像 李华
网站建设 2026/8/28 6:43:31

Matplotlib图形绘制方法精讲:从面向对象架构到多子图布局实战

1. 为什么“从零开始”学Matplotlib&#xff0c;却要从“图形绘制方法”切入&#xff1f;很多朋友一听到“从零开始学习”&#xff0c;下意识就会去找那种从安装Python、配置环境开始的保姆级教程。这当然没错&#xff0c;但对于Matplotlib这个库&#xff0c;如果你真的按部就班…

作者头像 李华
网站建设 2026/8/28 6:38:45

AI Agent 工程实践(33):Agent 如何监控

摘要&#xff1a;本文针对 AI Agent 上线后“服务活着却在胡说”的监控盲区&#xff0c;梳理了只看存活、只看成本、不盯幻觉三种常见错误&#xff0c;提出 Agent 监控应在传统指标之外额外关注成功率、Tool Error、Latency、Cost、Token、Memory Hit、Hallucination 七个 LLM …

作者头像 李华
网站建设 2026/8/28 6:37:54

动态规划实战:从最长公共子序列到蓝肽子序列问题解析

1. 从“蓝肽子序列”到最长公共子序列&#xff1a;一道国赛真题的深度拆解看到“蓝肽子序列”这个题目&#xff0c;很多初次接触的朋友可能会有点懵。这名字听起来有点怪&#xff0c;像是某种生物学术语&#xff0c;但实际上&#xff0c;它是一道来自蓝桥杯国赛的经典动态规划题…

作者头像 李华
网站建设 2026/8/28 6:37:48

【LLM】Qwen3-0.6B服务化部署、请求与性能测试

Qwen3-0.6B 功能&#xff1a;文本生成部署方式&#xff1a;使用1卡 nvidia A100/asend 910b 部署 模型下载 pip install modelscope mkdir Qwen3-0.6B modelscope download --model Qwen/Qwen3-0.6B --local_dir Qwen3-0.6B镜像 nvidia镜像 vllm/vllm-openai:latestasend镜像 q…

作者头像 李华
网站建设 2026/8/28 6:35:33

Pydantic 数据验证讲解

文章目录一、为什么需要 Pydantic&#xff1f;二、安装三、基础模型&#xff08;BaseModel&#xff09;四、Field&#xff1a;更精细的控制五、自定义验证器1. 字段验证器&#xff08;field_validator&#xff09;2. 模型级验证器&#xff08;model_validator&#xff09;六、嵌…

作者头像 李华