控制节点安装的软件

安装mariadb数据库(mysql的分支)

bash
sudo apt install mariadb-server mariadb-client python3-pymysql

ps:

可以不要mariadb-client

数据库配置

shell
vi /etc/mysql/mariadb.conf.d/24-openstack.cnf
ini
[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

重启数据库服务

shell
sudo systemctl restart mysql

设置开机启动

shell
sudo systemctl enable mysql

初始化数据库 一路yes 密码设置为123456

shell
sudo mysql_secure_installation

安装Message queue


安装rabbitmq-server

shell
sudo apt install rabbitmq-server

添加用户

shell
sudosudo rabbitmqctl add_user openstack RABBIT_PASS

设置权限

shell
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"

加个插件

bash
sudo rabbitmq-plugins enable rabbitmq_management 

启动rabbitmq并设置开机启动

shell
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

安装Memcached

shell
sudo apt install memcached python3-memcache
shell
vi /etc/memcached.conf

找到 -l 127.0.0.1 改为:

shell
-l 127.0.0.1,::1,192.168.2.24

ps:192.168.2.24替换为你的控制节点的管理IP地址

重启服务

shell
sudo systemctl restart memcached

修改 Memcached 的服务参数,避免开机时启动失败。

选项 After=network.target 修改为 After=network-online.target

建议以注释的方式修改

shell
sudo vim /usr/lib/systemd/system/memcached.service    

# 修改了 Memcached 启动参数 注意

启动 Memcached 服务并设置开机启动

shell

sudo systemctl daemon-reload???

sudo systemctl restart memcached

sudo systemctl enable memcached

sudo systemctl status memcached

安装etcd

shell
sudo apt install etcd

修改etcd配置文件

shell
sudo vi /etc/default/etcd
ini
ETCD_NAME="controller124"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller124=http://192.168.2.24:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.2.24:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.2.24:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.2.24:2379"

启动etcd并设置开机启动

shell
sudo systemctl restart etcd
sudo systemctl enable etcd

测试etcd

shell
etcdctl --endpoints="http://controller124:2379" set 001 法外狂徒张三

etcdctl --endpoints="http://controller124:2379" get 001

安装keystone

创建数据库

KEYSTONE_DBPASS为要设置的密码

sql
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';
use keystone;
show tables;
exit;

安装组件

shell
sudo apt install keystone

编辑配置文件

shell
sudo vi /etc/keystone/keystone.conf
ini
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller124/keystone

[token]
provider = fernet

填充数据库:

shell
sudo su
cd /etc/keystone/
su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化密钥

shell
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

创建引导服务

bash
sudo keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://controller124:5000/v3/ \
  --bootstrap-internal-url http://controller124:5000/v3/ \
  --bootstrap-public-url http://controller124:5000/v3/ \
  --bootstrap-region-id RegionOne

在/etc/apache2/apache2.conf查看

bash
sudo vi /etc/apache2/apache2.conf 

如果不存在 ServerName controller 这一行则在其中添加

重启Apache

shell
sudo systemctl enable apache2
sudo systemctl restart apache2

查看Apache的服务状态

bash
systemctl status apache2

source ./admin-openrc-fish.sh

进行一些确认和验证

查询刚创建的用户的ID

bash
openstack user list

复制上文的用户ID,关联项目admin,用户admin,角色admin。

bash
openstack role add --project admin --user 替换为用户ID admin

source ./admin-openrc-fish.sh

查看token,可以多运行几次,查看 token id 是否更新。

bash
openstack token issue

清除环境变量后:

使用 openstack 命令验证是否能够获取 Token

bash
openstack --os-auth-url http://controller124:5000/v3 \
  --os-project-domain-name default --os-user-domain-name default \
  --os-project-name admin --os-username admin --os-auth-type password \
  --os-password ADMIN_PASS token issue

查询 keystone identity service,表里应该只有一行记录。

bash
source /etc/keystone/admin-openrc
openstack service list |grep -E "ID|keystone"

查询 keystone endpoint,表里应该有3行记录。

bash
source /etc/keystone/admin-openrc
openstack endpoint list |grep -E "ID|keystone"
bash
bash opst-proc-show.sh

安装Glance

创建数据库

bash
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';
exit;

GLANCE_DBPASS为要设置的密码

创建glance用户

bash
source ./admin-openrc-fish.sh
openstack user create --domain default --password GLANCE_PASS glance

将glacne添加到admin中去

bash
openstack project create --domain default --description "Service Project" service
openstack role add --project service --user glance admin
openstack user create --domain default --password MY_PASSWORD MY_SERVICE
openstack role add --user MY_SERVICE --user-domain Default --system all reader

创建glance服务实体

bash
openstack service create --name glance \
  --description "OpenStack Image" image

创建Image服务API端点

bash
openstack endpoint create --region RegionOne \
  image public http://controller124:9292
openstack endpoint create --region RegionOne \
  image internal http://controller124:9292
openstack endpoint create --region RegionOne \
  image admin http://controller124:9292

安装组件

bash
apt install glance -y

配置组件

ini
vim /etc/glance/glance-api.conf
[DEFAULT]
use_keystone_quotas = True
[barbican]
[barbican_service_user]
[cinder]
[cors]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller124/glance
[file]
[glance.store.http.store]
[glance.store.rbd.store]
[glance.store.s3.store]
[glance.store.swift.store]
[glance.store.vmware_datastore.store]
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[healthcheck]
[image_format]
[key_manager]
[keystone_authtoken]
auth_url = http://controller124:5000
www_authenticate_uri = http://controller124:5000
memcached_servers = controller124:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = GLANCE_PASS
[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[oslo_reports]
[paste_deploy]
flavor = keystone
[profiler]
[store_type_location_strategy]
[task]
[taskflow_executor]
[vault]
[wsgi]
[oslo_limit]
auth_url = http://controller124:5000
auth_type = password
user_domain_id = default
username = MY_SERVICE
system_scope = all
password = MY_PASSWORD
endpoint_id = ENDPOINT_ID
region_name = RegionOne

GLANCE_DBPASS为创建glance用户访问数据库的密码

GLANCE_PASS为openstack创建glance用户设置的密码

GLANCE_PASS为openstack创建glance用户设置的密码

endpoint_id为创建Image服务API端点中类型为public的id 可以通过如下的命令查看

bash
openstack endpoint list

填充数据库

bash
sudo su
cd /etc/glance
su -s /bin/sh -c "glance-manage db_sync" glance

运行成功会显示Database is synced successfully.

进入 MariaDB 查看是否有表格出现。密码为GLANCE_DBPASS。如果有则表示数据库同步成功。

nginx
mysql -u glance -p
use glance;
show tables;

重启Image服务

bash
systemctl restart glance-api

查看 Glance 服务是否active。

bash
systemctl status openstack-glance-api

验证配置

bash
source ./admin-openrc-fish.sh
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
glance image-create --name "cirros" \
  --file /root/cirros-0.4.0-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --visibility=public
glance image-list
# 输出如下的内容表示组件成功运行
root@controller124:~# glance image-list
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 8244fbc0-f798-44c5-b0f3-9e5566e7e345 | cirros |
+--------------------------------------+--------+

安装Placement

创建数据库

bash
mysql -u root -p
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';
exit;

PLACEMENT_DBPASS为要设置的密码

创建placement用户

bash
source ./admin-openrc-fish.sh
openstack user create --domain default --password PLACEMENT_PASS placement

将用户添加到admin

bash
openstack role add --project service --user placement admin 

创建placement服务实体

bash
openstack service create --name placement --description "Placement API" placement

创建API 服务端点

bash
openstack endpoint create --region RegionOne placement public http://controller124:8778
openstack endpoint create --region RegionOne placement internal http://controller124:8778
openstack endpoint create --region RegionOne placement admin http://controller124:8778

安装组件

bash
apt install placement-api -y

配置组件

ini
vim /etc/placement/placement.conf
[DEFAULT]
[api]
[cors]
[keystone_authtoken]
auth_url = http://controller124:5000/v3
memcached_servers = controller124:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = PLACEMENT_PASS
[oslo_middleware]
[oslo_policy]
[placement]
[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller124/placement
[profiler]

[auth_strategy]
keystone = 

PLACEMENT_DBPASS为创建placement用户访问数据库设置的密码

PLACEMENT_PASS为openstack创建placement用户设置的密码

填充数据库

bash
sudo su
su -s /bin/sh -c "placement-manage db sync" placement

重启apache2服务

bash
systemctl restart apache2

进入 MariaDB 查看是否有表格出现。密码为PLACEMENT_DBPASS。如果有则表示数据库同步成功。

nginx
mysql -u placement -pPLACEMENT_DBPASS
use placement;
show tables;
exit;

验证配置

bash
source ./admin-openrc-fish.sh
placement-status upgrade check
# 输出如下的内容表示成功
root@controller124:~# placement-status upgrade check
+-------------------------------------------+
| Upgrade Check Results                     |
+-------------------------------------------+
| Check: Missing Root Provider IDs          |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Incomplete Consumers               |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Policy File JSON to YAML Migration |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
openstack --os-placement-api-version 1.2 resource class list --sort-column name
# 输出如下的内容表示成功
root@controller124:~# openstack --os-placement-api-version 1.2 resource class list --sort-column name
+----------------------------------------+
| name                                   |
+----------------------------------------+
| DISK_GB                                |
| FPGA                                   |
| IPV4_ADDRESS                           |
| MEMORY_MB                              |
| MEM_ENCRYPTION_CONTEXT                 |
| NET_BW_EGR_KILOBIT_PER_SEC             |
| NET_BW_IGR_KILOBIT_PER_SEC             |
| NET_PACKET_RATE_EGR_KILOPACKET_PER_SEC |
| NET_PACKET_RATE_IGR_KILOPACKET_PER_SEC |
| NET_PACKET_RATE_KILOPACKET_PER_SEC     |
| NUMA_CORE                              |
| NUMA_MEMORY_MB                         |
| NUMA_SOCKET                            |
| NUMA_THREAD                            |
| PCI_DEVICE                             |
| PCPU                                   |
| PGPU                                   |
| SRIOV_NET_VF                           |
| VCPU                                   |
| VGPU                                   |
| VGPU_DISPLAY_HEAD                      |
+----------------------------------------+
openstack --os-placement-api-version 1.6 trait list --sort-column name

安装Nova

创建数据库

bash
mysql
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
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';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
exit

NOVA_DBPASS为要设置的密码

创建nova用户

bash
admin-openrc.sh
openstack user create --domain default --password-prompt nova

添加到admin

bash
openstack role add --project service --user nova admin

创建nova服务实体

bash
openstack service create --name nova \
  --description "OpenStack Compute" compute

创建API服务端点

bash
openstack endpoint create --region RegionOne \
  compute public http://controller124:8774/v2.1
openstack endpoint create --region RegionOne \
  compute internal http://controller124:8774/v2.1
openstack endpoint create --region RegionOne \
  compute admin http://controller124:8774/v2.1

安装组件

bash
apt install nova-api nova-conductor nova-novncproxy nova-scheduler

配置组件

ini
vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.2.24
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
transport_url = rabbit://openstack:RABBIT_PASS@controller124:5672/
verbose = True
debug = True
log_dir = /var/log/nova
[api]
auth_strategy = keystone
[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller124/nova_api
[barbican]
[barbican_service_user]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]
[cyborg]
[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller124/nova
[devices]
[ephemeral_storage_encryption]
[filter_scheduler]
[glance]
api_servers = http://controller124:9292
[guestfs]
[healthcheck]
[hyperv]
[image_cache]
[ironic]
[key_manager]
[keystone]
[keystone_authtoken]
www_authenticate_uri = http://controller124:5000
auth_url = http://controller124:5000
memcached_servers = controller124:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS
[libvirt]
[metrics]
[mks]

[neutron]
auth_url = http://controller124:5000
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_PASS
insecure = false

[notifications]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[oslo_reports]
[pci]
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller124:5000/v3
username = placement
password = PLACEMENT_PASS
[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
send_service_user_token = true
auth_url = http://controller124:5000/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
[workarounds]
[wsgi]
[zvm]

NOVA_DBPASS为创建nova用户设置访问数据库的密码

NOVA_DBPASS为创建nova用户设置访问数据库的密码

RABBIT_PASS为rabbitmqctl创建openstack设置的密码 my_ip为Controller节点的IP地址

NOVA_PASS为openstack创建nova用户设置的密码

NOVA_PASS为openstack创建nova用户设置的密码

PLACEMENT_PASS为openstack创建placement用户设置的密码

填充数据库

bash
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

验证

bash
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
1
# 输出类似如下的内容
root@controller124:~# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
|  Name |                 UUID                 |              Transport URL               |               Database Connection               | Disabled |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 |                  none:/                  | mysql+pymysql://nova:****@controller124/nova_cell0 |  False   |
| cell1 | e52327df-10e2-41e1-a1d2-5d7724a85688 | rabbit://openstack:****@controller124:5672/ |    mysql+pymysql://nova:****@controller124/nova    |  False   |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+

重启服务

bash
systemctl restart nova-api nova-scheduler nova-conductor nova-novncproxy

配置Compute节点

Compute节点配置完成后….

在控制节点添加计算节点

bash
source ./admin-openrc-fish.sh
openstack compute service list --service nova-compute
# 输出如下的内容
root@controller124:~# openstack compute service list --service nova-compute
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
| ID                                   | Binary       | Host     | Zone | Status  | State | Updated At                 |
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
| c9dd606c-0f31-4a9e-9c6f-bb40e33cf054 | nova-compute | compute124 | nova | enabled | up    | 2024-03-31T08:01:53.000000 |
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
# 输出如下的内容
root@controller124:~# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': e52327df-10e2-41e1-a1d2-5d7724a85688
Checking host mapping for compute host 'compute1': 844b86c1-7310-4ddf-82cd-0b8f3350ef0d
Creating host mapping for compute host 'compute1': 844b86c1-7310-4ddf-82cd-0b8f3350ef0d
Found 1 unmapped computes in cell: e52327df-10e2-41e1-a1d2-5d7724a85688

验证配置

bash
openstack compute service list
# 输出如下的内容
root@controller124:~# openstack compute service list
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
| ID                                   | Binary         | Host       | Zone     | Status  | State | Updated At                 |
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
| 2779af9c-cde5-41a6-87b2-5b6840d9b88b | nova-conductor | controller124 | internal | enabled | up    | 2024-03-31T08:03:07.000000 |
| b24be4f1-ea05-4ee3-a7eb-8402ff53f172 | nova-scheduler | controller124 | internal | enabled | up    | 2024-03-31T08:03:15.000000 |
| c9dd606c-0f31-4a9e-9c6f-bb40e33cf054 | nova-compute   | compute124   | nova     | enabled | up    | 2024-03-31T08:03:13.000000 |
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
openstack catalog list
openstack image list
nova-status upgrade check

安装Neutron(使用的是OVN)

创建数据库

bash
mysql
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';
exit;

NEUTRON_DBPASS为要设置的密码

创建neutron用户

bash
source ./admin-openrc-fish.sh
openstack user create --domain default --password-prompt neutron

添加到admin

bash
openstack role add --project service --user neutron admin

创建neutron服务实体

bash
openstack service create --name neutron \
  --description "OpenStack Networking" network

创建API端点

bash
openstack endpoint create --region RegionOne \
  network public http://controller124:9696
openstack endpoint create --region RegionOne \
  network internal http://controller124:9696
openstack endpoint create --region RegionOne \
  network admin http://controller124:9696

安装组件

bash
apt -y install neutron-server neutron-plugin-ml2 python3-neutronclient ovn-central openvswitch-switch

配置组件

bash
vim /etc/neutron/neutron.conf
[DEFAULT]
bind_host = controller124
bind_port = 9696
core_plugin = ml2
service_plugins = ovn-router
auth_strategy = keystone
state_path = /var/lib/neutron
allow_overlapping_ips = True
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
transport_url = rabbit://openstack:RABBIT_PASS@controller124
[agent]
[cache]
[cors]
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller124/neutron
[healthcheck]
[ironic]
[keystone_authtoken]
www_authenticate_uri = http://controller124:5000
auth_url = http://controller124:5000
memcached_servers = controller124:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = NEUTRON_PASS
[nova]
auth_url = http://controller124:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[oslo_reports]
[placement]
[privsep]
[profiler]
[quotas]
[ssl]

RABBIT_PASS为rabbit创建openstack用户创建的密码

NEUTRON_PASS为openstack创建neutron用户设置的密码

NEUTRON_PASS为创建neutron用户访问数据库设置的密码

NOVA_PASS为openstack创建nova用户设置的密码

ControllerIP为Controller节点的IP地址

bash
vim /etc/default/openvswitch-switch
OVS_CTL_OPTS="--ovsdb-server-options='--remote=ptcp:6640:127.0.0.1'"

vim /etc/nova/nova.conf
[neutron]
auth_url = http://controller124:5000
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_PASS
insecure = false

NEUTRON_PASS为openstack创建neutron用户设置的密码 METADATA_PASS为创建的密码

填充数据库

bash
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

重启服务

bash
systemctl restart nova-api
systemctl restart openvswitch-switch
ovs-vsctl add-br br-int 
systemctl restart ovn-central ovn-northd
ovn-nbctl set-connection ptcp:6641:Controller的IP -- set connection . inactivity_probe=60000
ovn-sbctl set-connection ptcp:6642:Controller的IP -- set connection . inactivity_probe=60000

ControllerIP为Controller节点的IP地址

bash
systemctl restart neutron-server

在Compute节点配置完Neutron后

配置验证

bash
source ./admin-openrc-fish.sh 
openstack network agent list
# 输入如下的内容表示成功
root@controller124:~# openstack network agent list
+--------------------------------------+----------------------+----------+-------------------+-------+-------+----------------------------+
| ID                                   | Agent Type           | Host     | Availability Zone | Alive | State | Binary                     |
+--------------------------------------+----------------------+----------+-------------------+-------+-------+----------------------------+
| e42ab135-4870-4bfd-8b90-47ad92732627 | OVN Controller agent | compute1 |                   | :-)   | UP    | ovn-controller             |
| 952c013f-c53d-54b8-89b4-d55930a40171 | OVN Metadata agent   | compute1 |                   | :-)   | UP    | neutron-ovn-metadata-agent |
+--------------------------------------+----------------------+----------+----------

创建OVN网络!!!

Controller节点!!! 和 Compute节点!!! 都需要的操作:

开始

bash
# br-ens34你可以随便取名字
ovs-vsctl add-br br-ens34
12
# ens34为第二张网卡的名称
ovs-vsctl add-port br-ens34 ens34
12
# provider你可以随便取名字
ovs-vsctl set open . external-ids:ovn-bridge-mappings=provider:br-ens34

结束

bash
# 创建一个路由
openstack router create router

# 创建selfservice
openstack network create selfservice --provider-network-type geneve

# 创建selfservice子网
openstack subnet create --network selfservice \
  --dns-nameserver 8.8.8.8 --gateway 172.16.1.1 \
  --subnet-range 172.16.1.0/24 selfservice

# 创建外部网络
openstack network create  --share --external \
  --provider-physical-network provider \
  --provider-network-type flat provider

# 创建外部网络子网
openstack subnet create --network provider \
  --allocation-pool start=192.168.46.240,end=192.168.46.250 \
  --dns-nameserver 8.8.8.8 --gateway 192.168.46.2 \
  --subnet-range 192.168.46.0/24 provider

# 给路由设置网关
openstack router set router --external-gateway provider

# 给路由添加内部接口
openstack router add subnet router selfservice

# 验证是否成功
openstack port list --router router

# 输入如下的内容表示成功
root@controller124:~# openstack port list --router router
+--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
| ID                                   | Name | MAC Address       | Fixed IP Addresses                                                            | Status |
+--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
| 56a061e8-f5b1-4df8-8dcb-347bb53ecead |      | fa:16:3e:28:2c:c3 | ip_address='172.16.1.1', subnet_id='df79d0ea-9548-486c-8c79-b9dfe9da35ff'     | ACTIVE |
| 6a5c3ba2-df0f-4552-91f1-8eafcdd65da0 |      | fa:16:3e:02:f7:16 | ip_address='192.168.46.249', subnet_id='d608e2b9-d2e2-423c-bfec-2a23a1516760' | ACTIVE |
+--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
# 也可以通过如下的命令查看
ovn-nbctl show

# 输出如下的内容
root@controller124:~# ovn-nbctl show
switch dc4e3afc-da27-4e73-b741-a1c8d57434f7 (neutron-43fe943c-fe1a-4dfe-9f3a-91dc7cdf823f) (aka provider)
    port 6a5c3ba2-df0f-4552-91f1-8eafcdd65da0
        type: router
        router-port: lrp-6a5c3ba2-df0f-4552-91f1-8eafcdd65da0
    port dcd112c2-dd97-4f40-b7ba-f8d64bd68a5d
        addresses: ["fa:16:3e:16:bc:3a 192.168.46.246"]
    port provnet-3140ef3f-1dc0-4490-bfdb-134d1c611aec
        type: localnet
        addresses: ["unknown"]
    port 201604e9-1146-4536-a56d-965e82e26d8e
        type: localport
        addresses: ["fa:16:3e:5e:20:5b 192.168.46.240"]
switch e7a2f47f-0ea4-4587-bd18-d444a8f1b500 (neutron-31f3eb52-667f-4b5a-8ef3-3f1d048b29b3) (aka selfservice)
    port d47fb30d-6d47-4d57-bd4d-96f779f6e765
        type: localport
        addresses: ["fa:16:3e:47:46:d8 172.16.1.2"]
    port d2183412-590a-4bc0-b992-7efaf8a8c9f1
        addresses: ["fa:16:3e:a0:e5:23 172.16.1.37"]
    port 56a061e8-f5b1-4df8-8dcb-347bb53ecead
        type: router
        router-port: lrp-56a061e8-f5b1-4df8-8dcb-347bb53ecead
router 715fc656-e8f8-4328-aa2d-82b994bcfe2d (neutron-43435b65-0e5e-4bc0-90fa-5a01c1aa89c2) (aka router)
    port lrp-56a061e8-f5b1-4df8-8dcb-347bb53ecead
        mac: "fa:16:3e:28:2c:c3"
        networks: ["172.16.1.1/24"]
    port lrp-6a5c3ba2-df0f-4552-91f1-8eafcdd65da0
        mac: "fa:16:3e:02:f7:16"
        networks: ["192.168.46.249/24"]
        gateway chassis: [e42ab135-4870-4bfd-8b90-47ad92732627]
    nat d4d704be-2102-437b-bc4a-0be5504824aa
        external ip: "192.168.46.249"
        logical ip: "172.16.1.0/24"
        type: "snat"
root@controller124:~# 

安装Dashboard

安装组件

bash
apt install openstack-dashboard 

配置组件

bash
vim /etc/openstack-dashboard/local_settings.py
OPENSTACK_HOST = "controller124"
ALLOWED_HOSTS = ['*']
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller124:11211',
    }
}
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
vim /etc/apache2/conf-available/openstack-dashboard.conf
# 不存在则添加
WSGIApplicationGroup %{GLOBAL}

如果不能正常访问

bash
python3 /usr/share/openstack-dashboard/manage.py compress

重启服务

bash
systemctl reload apache2.service

接下来操作均可在web上操作

创建实例的计算、内存和存储容量的大小

bash
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
openstack flavor create --id 1 --vcpus 1 --ram 256 --disk 1 m1.mini
openstack flavor create --id 2 --vcpus 1 --ram 384 --disk 1 m1.regular
openstack flavor create --id 3 --vcpus 1 --ram 512 --disk 1 m1.pro

密钥设置

bash
ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

设置安全组

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

至此控制节点所做的操作已经全部完成。