锦通 发表于 2024-9-30 21:53:07

openstack单机部署

OpenStack部署

一、OpenStack环境部署

1. 假造机设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller 192.168.34.10 2c6g50g   
compute01 192.168.34.20 2c4g50g    2. 设置主机名

<blockquote class="kdocs-blockquote" style="text-align:left;">   hostnamectl set-hostname controller   
hostnamectl set-hostname compute01   
修改host文件   
vim /etc/hosts   
192.168.34.10 controller   
192.168.34.20 compute01    3. 时间同步

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller时间同步   
vim /etc/chrony.conf   
#server   0.centos.pool.ntp.org#server 0.centos.pool.ntp.org iburst   
#server   1.centos.pool.ntp.org#server 1.centos.pool.ntp.org iburst   
#server   2.centos.pool.ntp.org#server 2.centos.pool.ntp.org iburst   
#server   3.centos.pool.ntp.org#server 3.centos.pool.ntp.org iburst   
server   ntp.aliyun.comserver ntp.aliyun.com iburst   
27 allow 192.168.0.0/24 #设置允许访问的客户端   
31 local stratum 10 #本地的优先级   
systemctl restart chronyd   
conpute01时间同步   
vim /etc/chrony.conf   
#server   2.centos.pool.ntp.org#server 2.centos.pool.ntp.org iburst   
#server   3.centos.pool.ntp.org iburst   
server controller iburst   
systemctl restart chronyd    4. 安装openStack堆栈

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller和compute都要安装   
#下载T版本的OpenStack堆栈   
yum -y install centos-release-openstack-train   
#安装RDO堆栈RPM来启用OpenStack堆栈   
yum -y install   https://rdoproject.org/repos/rdo-release.rpm   
#安装客户端工具   
yum -y install python-openstackclient    5. 安装MySQL数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller节点安装   
yum -y install mariadb mariadb-server python2-PyMySQL   
vim /etc/my.cnf.d/openstack.cnf   
bind-address = 192.168.0.50 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8   
systemctl enable mariadb.service && systemctl start   
#对数据库进行初始化操作 mysql_secure_installation   
输入root密码:——》[回车]   
是否设置root密码?——   
直接设置root密码——》   
是否删除匿名用户?——》   
不允许root用户远程登录?——》   
是否删除测试数据库?——》   
是否重新加载授权表?——》    6. 安装rabbitMQ消息队列

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller节点安装   
yum -y install rabbitmq-server   
systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service   
#增加账户失败,执行 su -   
rabbitmqctl add_user openstack 123456   
#设置账户权限   
rabbitmqctl set_permissions openstack ".*" ".*" ".*"    7. 安装memcacheh数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller节点安装   
yum -y install memcached python-memcached   
vim /etc/sysconfig/memcached   
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1,::1,controller"   
systemctl enable memcached.service && systemctl start memcached.service   
netstat -ntlp | grep 11211    8. 安装etcd数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller节点安装   
yum -y install etcd   
vi /etc/etcd/etcd.conf   
# ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="   http://10.0.0.11:2380" ETCD_LISTEN_CLIENT_URLS="   http://10.0.0.11:2379" ETCD_NAME="controller" # ETCD_INITIAL_ADVERTISE_PEER_URLS="   http://10.0.0.11:2380" ETCD_ADVERTISE_CLIENT_URLS="   http://10.0.0.11:2379" ETCD_INITIAL_CLUSTER="controller=   http://10.0.0.11:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" ETCD_INITIAL_CLUSTER_STATE="new"   
#替换   
sed -i 's/10.0.0.11/192.168.10.10/g' /etc/etcd/etcd.conf   
systemctl enable etcd && systemctl start etcd   
netstat -ntlp | egrep '2379|2380'    9. 底子环境安装完成,查抄安装服务

<blockquote class="kdocs-blockquote" style="text-align:left;">   systemctl is-active chronyd mariadb.service rabbitmq-server.service memcached.service etcd.service    二、Keystone安装

1. mysql创建keystone账号

<blockquote class="kdocs-blockquote" style="text-align:left;">   mysql -u root -p123456 CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456';    2. keystone服务安装与设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   yum -y install openstack-keystone httpd mod_wsgi #修改keystone.conf 设置文件 #检察文件属性,必须是keystone组 ll /etc/keystone/keystone.conf -rw-r----- 1 root keystone 106413 6月 8 2021 /etc/keystone/keystone.conf #提前备份设置文件 cp /etc/keystone/keystone.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf #检察文件属性(确定归属关系没有发生改变) ll /etc/keystone/keystone.conf -rw-r----- 1 root keystone 601 12月 8 20:56 /etc/keystone/keystone.conf #修改文件内容 vim /etc/keystone/keystone.conf #设置keystone访问数据库的密码 connection = mysql+pymysql://keystone:123456@controller/keystone #设置Fernet令牌,方便其他步调通过令牌来连接keyston进行验证 provider = fernet    3. 初始数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   su -s /bin/sh -c "keystone-manage db_sync" keystone   
验证数据库   
mysql -u keystone -p123456 use keystone show tables;    4. 初始数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone   
引导身份服务,使得keystone可以在所有网卡的5000端口上运行,这里的 ADMIN_PASS(管理员密码)改为:123456   
keystone-manage bootstrap --bootstrap-password 123456 \ --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    5. 设置HTTP服务

<blockquote class="kdocs-blockquote" style="text-align:left;">   设置 ServerName选项为控制器节点名   
vim /etc/httpd/conf/httpd.conf ''' ServerName controller   
创建文件链接,这个文件是keystone给天生好的,用于访问keystone的 5000端口   
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/   
设置开机启动并启动http服务   
systemctl enable httpd.service && systemctl start httpd.service 启动失败关闭selinux vi /etc/sysconf/selinux SELINUX=enforcing 改为 selinux=distabled 重启reboot   
http服务正常启动,keystone的5000端口已经打开   
netstat -tunpl | grep httpd   
设置admin管理员环境变量,界说admin管理员的密码为123456   
export OS_USERNAME=admin export OS_PASSWORD=123456 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    6. 创建认证账号

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller   
openstack domain create --description "An Example Domain" example #检察域列表 openstack domain list #检察指定域具体信息 openstack domain show default #接着创建project项目:项目名称service,并指定放在default域中 openstack project create --domain default --description "Service Project" service #检察项目列表 openstack project list #检察指定项目具体信息 openstack project show service #创建一个project项目:项目名称myproject ,并指定放在default域中 openstack project create --domain default --description "Demo Project" myproject #创建非特权user用户:用户名称myuser ,用户的密码:123456 openstack user create --domain default --password-prompt myuser #检察用户列表 openstack user list #创建role角色:角色名称为myrole openstack role create myrole #检察指定角儿具体信息 openstack role show myrole #角色绑定:myrole角色绑定到myuser用户与myproject项目上 openstack role add --project myproject --user myuser myrole    7. 验证操作

<blockquote class="kdocs-blockquote" style="text-align:left;">   #取消环境变量 unset OS_AUTH_URL OS_PASSWORD #向keyston获取token令牌,如果能成功获取那么说明keyston服务就是没有题目的了 #以admin用户获取token令牌 openstack --os-auth-url   http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | expires | 2023-02-09T09:03:03+0000 | | id | gAAAAABj5Ki3cXW8JWZBKEuARdXMUkiOcH7Qkk4t15W_5B8jcT34T_xJ38ThIYtf1fFL_NrU1oJfq-V8r0j6g1eoQCe53AJA8GhtOzE0yQBzKypz5H_00NkDVMReCYg2yLP1ZmMPZ1eqasxK6Q3aVYUz1c3JywloE6-JgC47dwxqGYLXj6yQGiA | | project_id | 4e7ac5f573e3448e9bee261cd77342e0 | | user_id | 707f1c2474304821a36521d08f699eee | +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ #以myuser用户获取token令牌 openstack --os-auth-url   http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | expires | 2023-02-09T09:04:05+0000 | | id | gAAAAABj5Kj1fSp7MT1irSSjwK8EXk-8CJui7wC7I25FGziM1e3gnyEKS4lsXHb1AgYzJU2XfA3TZyDXudXThD1Q8elx9cO9aWpYwRUz4tc78we146q0FMcELS60A9oDLwsMMK0BkbqYl-BkGvHBhPBScSA8Wm601EG4shOTE5PUMT-1gwsKaQs | | project_id | 43cb5e5d08c04302a74aec23595ea3c4 | | user_id | 994b9e52e67b47f99a9ec4e9467cc306 | +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+    8. 创建环境变量脚本

<blockquote class="kdocs-blockquote" style="text-align:left;">   #admin用户脚本(用户密码:123456) 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=123456 export OS_AUTH_URL=   http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 #myuser用户脚本(用户密码:123456) vim demo-openrc export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=myproject export OS_USERNAME=myuser export OS_PASSWORD=123456 export OS_AUTH_URL=   http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 #切换用户身份只需执行脚本即可 source admin-openrc #检察本身的token令牌 openstack token issue source demo-openrc #检察本身token令牌 openstack token issue    9. 总结

<blockquote class="kdocs-blockquote" style="text-align:left;">   到现在为止我们keystone服务就部署完成了,kystone服务可以说是 OpenStack环境最紧张的一个服务,他的重要功能就是负责发布token【令 牌】,给用户发布令牌并且提供验证服务。    三、 glance数据库设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   controller节点操作    1. mysql创建glance数据库和账号

<blockquote class="kdocs-blockquote" style="text-align:left;">   mysql -u root -p123456 #创建库 CREATE DATABASE glance; #授权用户本地登录并设置密码(这里的密码设置:123456) GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456'; #授权用户远程登录并设置密码(这里的密码设置:123456) GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456';    2. 创建认证账号

<blockquote class="kdocs-blockquote" style="text-align:left;">   切换到admin用户,创建glance用户(密码:123456)   
#使用创建的admin-openrc切换Openstack的admin账号 source admin-openrc #创建用户glance,密码设置为123456 openstack user create --domain default --password-prompt glance User Password: Repeat User Password: #检察用户列表 openstack user list #将glance用户添加到service项目中拥有admin权限 openstack role add --project service --user glance admin #创建一个service服务(供其他服务访问)名称为glance,类型为image openstack service create --name glance --description "OpenStack Image" image #通过 openstack service list 检察服务 openstack service list +----------------------------------+----------+----------+ | ID | Name | Type | +----------------------------------+----------+----------+ | 077fc2589677488b9a190a7a351f1be9 | glance | image | | 5e23f560a82c4c87828b9595d5540bb4 | keystone | identity | +----------------------------------+----------+----------+    3. 创建glance服务API端点

<blockquote class="kdocs-blockquote" style="text-align:left;">   API端点是OpenStack中提供给客户或者与其他核心服务之间的交互的入 口,而glance服务的api端点用于接受请求,响应镜像查询,获取和存储的 调用,OpenStack使用三种API端点代表三种服务:admin、internal、 public   
admin:管理员访问的API端点   
internal:内部服务访问的API端点   
public: 可以被所有项目访问的API端点   
#创建public端点 openstack endpoint create --region RegionOne image public   http://controller:9292 #创建internal端点 openstack endpoint create --region RegionOne image internal   http://controller:9292 #创建admin端点 openstack endpoint create --region RegionOne image admin   http://controller:9292 #通过openstack endpoint list检察端点 openstack endpoint list    4. glance服务安装和设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   安装glance软件包   
yum -y install openstack-glance   
修改glance文件,对接mysql,对接keystone,设置文件: /etc/glance/glance-api.conf   
#检察文件属性 ll /etc/glance/glance-api.conf -rw-r----- 1 root glance 192260 8月 12 2020 /etc/glance/glance-api.conf #提前备份设置文件 cp /etc/glance/glance-api.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf #检察文件属性 ll /etc/glance/glance-api.conf -rw-r----- 1 root glance 476 12月 8 21:45/etc/glance/glance-api.conf #修改文件内容 vim /etc/glance/glance-api.conf connection = mysql+pymysql://glance:123456@controller/glance #接着是glance找keystone需要做验证,设置keystone认证信息 #访问glance数据库使用的用户及密码:123456 #指定keystone的api,到此url去认证 www_authenticate_uri =   http://controller:5000 auth_url =   http://controller:5000 #指定memcache的地址 memcached_servers = controller:11211 #指定身份验证方式为password密码验证方式 auth_type = password #指定项目所在的域Default project_domain_name = Default #指定用户所在的域Default user_domain_name = Default #指定项目名称service project_name = service #指定认证用户是glance username = glance #指定用户密码 password = 123 #指定提供认证的服务为keystone flavor = keystone #指定存储 #file:文件方式,http:基于api调用的方式,把镜像放到其他存储上 stores = file,http #存储类型默认 default_store = file #指定镜像存放目录 filesystem_store_datadir = /var/lib/glance/images/   
初始化glance数据库,天生相关表结构(会有很多的输出)   
su -s /bin/sh -c "glance-manage db_sync" glance   
检察数据库表结构   
mysql -u glance -p123 use glance; show tables;   
开启glance服务(此处开启之后会天生存放镜像的目 录/var/lib/glance/images)   
systemctl enable openstack-glance-api.service systemctl start openstack-glance-api.service   
检察端口   
netstat -natp | grep 9292    5. 服务验证

<blockquote class="kdocs-blockquote" style="text-align:left;">   使用CirrOS(一个小型Linux镜像(13M大小),可资助您测试OpenStack 部署)验证Image Service的运行   
source admin-openrc wget   http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img   
创建镜像到glance服务   
glance image-create --name "cirros" \ --file cirros-0.4.0-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --visibility public ### openstack image create "cirros" \ --创建的镜像名 --file cirros-0.3.5-x86_64-disk.img \ --创建镜像所需文件,当前目录,或带文件位置 --disk-format qcow2 \ --镜像格式 qcow2 --container-format bare \ --可以接受的镜像容器格式包含:ami,ari, aki, bare, and ovf --public --共享此镜像,所有效户可见   
检察镜像方式   
openstack image list    6. 总结

<blockquote class="kdocs-blockquote" style="text-align:left;">   到这里为止OpenStack中glance服务就部署完成了,而且也已经验证过 了,glance组件的下令是比力少的,工作中常用到的就三类下令:上传、 检察、删除。 而且当我们部署好OpenStack环境之后,我们是需要根据需求来准备镜像 上传到glance,留意ISO镜像上传上去是没法直接使用的,需要将ISO镜像 转酿成qcow2磁盘文件,然后上传磁盘文件,就可以创建云主机。    四、部署Placement服务

controller节点
<blockquote class="kdocs-blockquote" style="text-align:left;">   Placement服务是从nova服务中拆分出来的组件,Placement组件应该在 Nova之前安装;   
Placement服务用于跟踪节点资源(好比盘算节点,存储资源池,网络资 源池等)的使用情况,提供自界说资源的能力,为分配资源提供服务。    1. mysql创建placement账号和数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   mysql -u root -p123456 #创建库 CREATE DATABASE placement; #授权用户本地登录并设置密码(这里的密码设置:123) GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '123456'; #授权用户远程登录并设置密码(这里的密码设置:123) GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '123456';    2. 创建认证账号

<blockquote class="kdocs-blockquote" style="text-align:left;">   为placement创建用户、授权、创建placement服务、创建url访问地址, 其目的是让keystone可以辨认placement身份   
source admin-openrc openstack user create --domain default --password-prompt placement User Password: Repeat User Password: #检察用户列表 openstack user list #将placement用户添加到service项目中拥有admin权限 openstack role add --project service --user placement admin #创建一个service服务(供其他服务访问)名称为placement,类型为placement openstack service create --name placement --description "Placement API" placement    3. 创建placement服务API端点

<blockquote class="kdocs-blockquote" style="text-align:left;">   admin:管理员访问的API端点   
internal:内部服务访问的API端点   
public: 可以被所有项目访问的API端点   
#创建public端点 openstack endpoint create --region RegionOne placement public   http://controller:8778 #创建internal端点 openstack endpoint create --region RegionOne placement internal   http://controller:8778 #创建admin端点 openstack endpoint create --region RegionOne placement admin   http://controller:8778    4. Placement服务安装和设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   安装glance软件包   
yum -y install openstack-placement-api   
修改placement文件,对接mysql,对接keystone,设置文 件: /etc/placement/placement.conf   
#检察文件属性 ll /etc/placement/placement.conf -rw-r----- 1 root placement 25512 2月 17 2021 /etc/placement/placement.conf #提前备份设置文件 cp /etc/placement/placement.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/placement/placement.conf.bak > /etc/placement/placement.conf #检察文件属性 ll /etc/placement/placement.conf -rw-r----- 1 root placement 102 12月 8 22:18 /etc/placement/placement.conf #修改文件内容 vim /etc/placement/placement.conf #访问placement数据库使用的用户及密码:123456 connection = mysql+pymysql://placement:123456@controller/placement #认证类型为keyston auth_strategy = keystone #设置keystone认证信息 #指定keystone的api,到此url去认证 auth_url =   http://controller:5000/v3 #指定memcache的地址 memcached_servers = controller:11211 #指定身份验证方式为password密码验证方式 auth_type = password #指定项目所在的域Default project_domain_name = Default #指定用户所在的域Default user_domain_name = Default #指定项目名称service project_name = service #指定认证用户是placement username = placement #指定用户的密码123456 password = 123456   
初始化placement数据库,天生相关表结构(会有一个Warning警告信 息,可忽略)   
su -s /bin/sh -c "placement-manage db sync" placement   
检察数据库表结构   
mysql -uplacement -p123456 show databases; use placement; show tables;   
修改Apache设置文件   
允许apache访问/usr/bin目录,否则/usr/bin/placement-api不能被访问   
vim /etc/httpd/conf.d/00-placement-api.conf ... #末行添加如下内容 <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory>   
重启httpd服务   
systemctl restart httpd   
检察端口   
netstat -ntlp | grep 8778    5. 服务验证

<blockquote class="kdocs-blockquote" style="text-align:left;">   切换admin身份进行验证   
source admin-openrc   
执行状态查抄下令   
placement-status upgrade check ​``` +----------------------------------+ | Upgrade Check Results | +----------------------------------+ | Check: Missing Root Provider IDs | | Result: Success | | Details: None | +----------------------------------+ | Check: Incomplete Consumers | | Result: Success | | Details: None | +----------------------------------+    public static void main(String agrs[]){
    system.out.println("hello word!");
}五、 controller部署nova服务

<blockquote class="kdocs-blockquote" style="text-align:left;">   nova服务是OpenStack service盘算服务,负责维护和管理云环境的盘算 资源,比方: 接收客户端请求需要的盘算资源、确定实例在哪个物理机上 创建、通过虚机化的方式将实例启动运行等工作。    1. mysql创建nova账号和数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   在安装和设置nova服务之前,必须创建服务对应的数据库用于存储相关数据, 然后授权nova用户本地访问和远程访问两种访问权限   
mysql -u root -p123456 #创建库,需要创建三个数据库 # nova_api数据库中存放全局信息,如:实例模型、实例组、实例配额 CREATE DATABASE nova_api; #存储nova本身元数据信息 CREATE DATABASE nova; #nova_cell0数据库的模式与nova一样,重要用途就是当实例调度失败时,实例的信息放到nova_cell0数据库中 CREATE DATABASE nova_cell0; #对以上三个库授权用户本地登录并设置密码(这里的密码设置:123456) GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123456'; #对以上三个库授权用户远程登录并设置密码(这里的密码设置:123456) GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456';    2. 创建认证账号

<blockquote class="kdocs-blockquote" style="text-align:left;">   #切换到admin用户,创建nova用户(密码:123456) source admin-openrc openstack user create --domain default --password-prompt nova #检察用户列表 openstack user list #将nova用户添加到service项目中拥有admin权限 openstack role add --project service --user nova admin #创建一个service服务(供其他服务访问)名称为nova,类型为compute openstack service create --name nova --description "OpenStack Compute" compute    3. 创建nova服务API端点

<blockquote class="kdocs-blockquote" style="text-align:left;">   admin:管理员访问的API端点   
internal:内部服务访问的API端点   
public: 可以被所有项目访问的API端点   
#创建public端点 openstack endpoint create --region RegionOne compute public   http://controller:8774/v2.1 #创建internal端点 openstack endpoint create --region RegionOne compute internal   http://controller:8774/v2.1 #创建admin端点 openstack endpoint create --region RegionOne compute admin   http://controller:8774/v2.1    4. nova服务安装和设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   安装nova软件包:   
nova-api:用于响应客户的调度;   
nova-conductor:用于和数据库交互;   
nova-novncproxy:用于通过vnc方式连接实例;   
nova-scheduler:用于调度假造机实例在那台盘算节点运行;   
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler   
修改nova设置文件,设置文件:/etc/nova/nova.conf   
#检察文件属性 ll /etc/nova/nova.conf -rw-r----- 1 root nova 220499 3月 16 2021 /etc/nova/nova.conf #提前备份设置文件 cp /etc/nova/nova.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/nova/nova.conf.bak > /etc/nova/nova.conf #检察文件属性 ll /etc/nova/nova.conf -rw-r----- 1 root nova 736 12月 12 16:51 /etc/nova/nova.conf #修改文件内容 vim /etc/nova/nova.conf ... #指定nova支持的api类型、指定连接的rabbitmq的用户密码123456、通过neutron获取假造机实例IP地址、禁用nova服务的防火墙驱动、否则会与网络服务neutron防火墙驱动冲突 enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:123456@controller:5672/ #界说本机IP,别复制我的IP,切记! my_ip = 192.168.10.10 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver #认证服务为keystone auth_strategy = keystone #访问nova_api数据库使用的用户及密码:123456 connection = mysql+pymysql://nova:123456@controller/nova_api #访问nova数据库使用的用户及密码:123456 connection = mysql+pymysql://nova:123456@controller/nova #指定glacne的api,nova启动实例需要找glance要镜像 api_servers =   http://controller:9292 #设置keystone认证信息,密码123456 www_authenticate_uri =   http://controller:5000/ auth_url =   http://controller:5000/ memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = 123456 #启动vnc、指定vnc的监听地址为本机IP、server客户端地址为本机地址,此地址是管理网的地址 enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip #设置lock锁的临时存放目录,锁的作用是创建假造机时,在执行某个操作的时间,需要等此步骤执行完后才气执行下一个步骤,不能并行执行,保证操作是一步一步的执行 lock_path = /var/lib/nova/tmp #nova需要访问placement获取盘算节点的资源使用情况,留意这里的placement密码是:123456 region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url =   http://controller:5000/v3 username = placement password = 123456   
初始化 nova_api 数据库   
su -s /bin/sh -c "nova-manage api_db sync" nova   
注册cell0数据库   
#一般情况下 nova需要依靠一个逻辑的数据库和消息队列来进行组件之间的相互交换,这就会给整个体系的扩容和灾难迁移带来困难。而数据库和消息队列正在成为openstack扩展的瓶颈。尤其是消息队列,伴随着集群规模的扩展,其性能下降尤其显着。通常当集群规模扩展到200个节点,一个消息大概要十几秒后才会响应,集群的整体性能大大下降。针对nova的这个题目,提出了nova-cell的概念,这个概念的提出重要是把盘算节点分成更多个更小的单元,每一个单元都有本身的数据库和消息队列 su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova 创建cell1单元格 su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova   
初始化nova数据库   
su -s /bin/sh -c "nova-manage db sync" nova   
验证cell0和cell1是否注册成功   
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova   
检察下数据库中情况   
mysql -u nova -p123456 show databases; ​``` +--------------------+ | Database | +--------------------+ | information_schema | | nova | | nova_api | | nova_cell0 | +--------------------+ ​``` use nova; show tables; use nova_api; show tables; use nova_cell0; show tables;   
启动Nova服务   
#设置服务自启动 systemctl enable \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service #启动服务 systemctl start \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service #检察服务状态 systemctl is-active \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service #提示:每次体系关机重启后,需要再次确认nova服务的状态,如果有相关服务没有启动,则重启nova服务 systemctl restart \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service   
上面已经将controller节点的nova安装好了,接着安装compute节点 的nova服务;    六、compute部署nova服务

<blockquote class="kdocs-blockquote" style="text-align:left;">   Nova-compute在盘算节点上运行,负责管理节点上的实例,比方:创 建、关闭、重启、挂起、规复、中止、调整大小、迁移、快照等操作都是 通过nova-compute实现的。 通常一个主机运行一个Nova-compute服务,一个实例部署在哪个可用的 主机上取决于调度算法,OpenStack对实例的操作,末了都是提交给 Nova-compute来完成 。    1. 安装nova-compute组件

<blockquote class="kdocs-blockquote" style="text-align:left;">   compute节点   
yum -y install openstack-nova-compute   
修改设置文件:   
vim /etc/nova/nova.conf #检察文件属性 ll /etc/nova/nova.conf -rw-r----- 1 root nova 220499 3月 16 2021 /etc/nova/nova.conf #备份设置文件 cp /etc/nova/nova.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/nova/nova.conf.bak > /etc/nova/nova.conf #检察文件属性 ll /etc/nova/nova.conf -rw-r----- 1 root nova 220499 3月 16 2021 /etc/nova/nova.conf #修改文件内容 vi /etc/nova/nova.conf #指定nova支持的api类型 enabled_apis = osapi_compute,metadata #指定连接的rabbitmq的用户密码:123456 transport_url = rabbit://openstack:123456@controller my_ip = 192.168.10.20 #通过neutron获取假造机实例IP地址 use_neutron = true #禁用nova服务的防火墙驱动,否则会与网络服务neutron防火墙驱动冲突 firewall_driver = nova.virt.firewall.NoopFirewallDriver #指定使用keystone认证 auth_strategy = keystone #设置keystone认证信息,密码:123456 www_authenticate_uri =   http://controller:5000/ auth_url =   http://controller:5000/ memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = 123456 #启动vnc enabled = true #指定vnc的监听地址 server_listen = 0.0.0.0 #server客户端地址为本机IP server_proxyclient_address = $my_ip #通过内网IP来访问vnc server时的地址 novncproxy_base_url =   http://controller:6080/vnc_auto.html #指定glacne的api,nova启动实例需要找glance要镜像 api_servers =   http://controller:9292 #设置lock锁的临时存放目录,锁的作用是创建假造机时,在执行某个操作的时间,需要等此步骤执行完后才气执行下一个步骤,不能并行执行,保证操作是一步一步的执行 lock_path = /var/lib/nova/tmp #nova需要访问placement获取盘算节点的资源使用情况,留意这里的placement密码是:123456 region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url =   http://controller:5000/v3 username = placement password = 123456   
查抄CPU假造化功能是否开启,compute节点负责启动虚机,所以需要开 启cpu假造化   
egrep -c '(vmx|svm)' /proc/cpuinfo 2 #返回值2为开启,0未开启   
设置开机自启并启动服务   
systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service systemctl is-active libvirtd.service openstack-nova-compute.service    2. 注册compute节点

接下来在controller节点检察compute节点是否注册到controller上

<blockquote class="kdocs-blockquote" style="text-align:left;">   扫描当前openstack中有哪些盘算节点可用   
source admin-openrc openstack compute service list --service nova-compute   
将新的盘算节点添加到openstack集群   
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': 24509e4d-be39-48b6-a740-bb4b82bfa273 Checking host mapping for compute host 'compute01':c65aa14f-1cac-4504-9060-8397bd2fa18e Creating host mapping for compute host 'compute01':c65aa14f-1cac-4504-9060-8397bd2fa18e Found 1 unmapped computes in cell: 24509e4d-be39-48b6-a740-bb4b82bfa273   
界说Nova自动发现新主机的时间间隔   
vim /etc/nova/nova.conf ​``` discover_hosts_in_cells_interval = 300   
查抄 nova 的各个服务是否都是正常,以及 compute 服务是否注册成功   
source admin-openrc openstack compute service list   
检察各个组件的 api 是否正常   
openstack catalog list   
检察是否能够获取镜像   
openstack image list   
检察cell的api和placement的api是否正常,只要此中一个有误,后期无法 创建假造机   
nova-status upgrade check    七、 controller部署 neutron服务

Neutron为整个openstack提供假造化的网络支持,重要功能包括二层交 换、三层路由、防火墙、VPN,以及负载均衡等。
1. mysql设置 neutron账号和数据库

<blockquote class="kdocs-blockquote" style="text-align:left;">   mysql -u root -p123456 #创建库 CREATE DATABASE neutron; #授权用户本地登录并设置密码(这里的密码设置:123456) GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456'; #授权用户远程登录并设置密码(这里的密码设置:123456) GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456';   
创建认账账号   
source admin-openrc openstack user create --domain default --password-prompt neutron   
将neutron用户添加到service项目中拥有管理员权限   
openstack role add --project service --user neutron admin   
创建一个service服务(供其他服务访问)名称为neutron,类型为 network   
openstack service create --name neutron --description "OpenStack Networking" network   
创建neutron服务API端点   
#admin:管理员访问的API端点 #internal:内部服务访问的API端点 #public: 可以被所有项目访问的API端点 #创建public端点 openstack endpoint create --region RegionOne network public   http://controller:9696 #创建internal端点 openstack endpoint create --region RegionOne network internal   http://controller:9696 #创建admin端点 openstack endpoint create --region RegionOne network admin   http://controller:9696    2. 创建提供商网络(桥接)

provider提供商网络 :他是通过我们最初在本机添的那块物理网卡来与虚 拟机实例进行通讯,如果那块网卡的网络模式是NAT模式了,那么我们使 用provider网络创建出来的假造机实例会与该网卡进行桥接,那假造机实 例就可以连通的外网了;
   self-service自服务网络:他说白了就是内部网络,就像ipv4地址中的私有 网段一样,他可以创建网络但是仅限于内部的实例来进行通讯是没法连接 外网的; 如果你想要通过self-service网络来连接外网的话,那么你是需要将 provider网络设置好,并且创建出一个provider类型的网络,然后设置为 路由绑定到你创建的self-service网络上面,这样self-service网络才可以访 问外网。
<blockquote class="kdocs-blockquote" style="text-align:left;">   安装相关的软件包   
yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables   
修改neutron设置文件:/etc/neutron/neutron.conf   
#检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 39708 5月 11 2021 /etc/neutron/neutron.conf #备份设置文件 cp /etc/neutron/neutron.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf #检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 216 12月 12 17:13 /etc/neutron/neutron.conf #修改文件内容 vi /etc/neutron/neutron.conf #启用二层网络插件 core_plugin = ml2 #service_plugins 默认为空,如果值是 router 表示支持路由模式(三层网络)即 vxlan service_plugins = #指定连接的rabbitmq的用户密码:123456 transport_url = rabbit://openstack:123456@controller #指定使用keystone认证 auth_strategy = keystone #当网络接口发生变化时,通知给nova notify_nova_on_port_status_changes = true #当端口数据发生变化,通知给nova notify_nova_on_port_data_changes = true #访问neutron数据库使用的用户及密码:123456 connection = mysql+pymysql://neutron:123456@controller/neutron #设置keystone认证信息,留意将用户neutron密码改为:123456 www_authenticate_uri =   http://controller:5000 auth_url =   http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = 123456 #neutron需要给nova通知盘算节点网络拓扑变化,指定nova的用户信息,留意将nova用户密码改为:123456 #默认设置文件没有提供该模块,在文件末了添加即可 auth_url =   http://controller:5000#检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 39708 5月 11 2021 /etc/neutron/neutron.conf #备份设置文件 cp /etc/neutron/neutron.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf #检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 216 12月 12 17:13 /etc/neutron/neutron.conf #修改文件内容 vi /etc/neutron/neutron.conf #启用二层网络插件 core_plugin = ml2 #service_plugins 默认为空,如果值是 router 表示支持路由模式(三层网络)即 vxlan service_plugins = #指定连接的rabbitmq的用户密码:123456 transport_url = rabbit://openstack:123456@controller #指定使用keystone认证 auth_strategy = keystone #当网络接口发生变化时,通知给nova notify_nova_on_port_status_changes = true #当端口数据发生变化,通知给nova notify_nova_on_port_data_changes = true #访问neutron数据库使用的用户及密码:123456 connection = mysql+pymysql://neutron:123456@controller/neutron #设置keystone认证信息,留意将用户neutron密码改为:123456 www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = 123456 #neutron需要给nova通知盘算节点网络拓扑变化,指定nova的用户信息,留意将nova用户密码改为:123456 #默认设置文件没有提供该模块,在文件末了添加即可 auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = nova password = 123456 #设置锁路径 lock_path = /var/lib/neutron/tmp   
修改ML2(二层网络)插件设置文 件: /etc/neutron/plugins/ml2/ml2_conf.ini   
#检察文件属性 ll /etc/neutron/plugins/ml2/ml2_conf.ini -rw-r----- 1 root neutron 6524 5月 11 2021 /etc/neutron/plugins/ml2/ml2_conf.ini #备份设置文件 cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/plugins/ml2/ml2_conf.ini.bak > /etc/neutron/plugins/ml2/ml2_conf.ini #检察文件属性 ll /etc/neutron/plugins/ml2/ml2_conf.ini -rw-r----- 1 root neutron 10 12月 12 17:18 /etc/neutron/plugins/ml2/ml2_conf.ini #修改文件内容 vim /etc/neutron/plugins/ml2/ml2_conf.ini #设置类型驱动:让二层网络支持桥接,支持基于vlan做子网分别 type_drivers = flat,vlan #租户网络类型(vxlan),默认官方文档没有界说vxlan网络类型 tenant_network_types = #启用Linuxbridge网桥过滤 mechanism_drivers = linuxbridge #启用端口安全扩展驱动步调,基于iptables实现访问控制;但设置了扩展安全组会导致一些端口限制,造成一些服务无法启动 extension_drivers = port_security #将provider(提供商网络)设置为flat(桥接)类型 flat_networks = provider #启用 ipset 增加安全组的安全性 enable_ipset = true   
修改linuxbridge(网桥)插件设置文 件: /etc/neutron/plugins/ml2/linuxbridge_agent.ini   
#检察文件属性 ll /etc/neutron/plugins/ml2/linuxbridge_agent.ini -rw-r----- 1 root neutron 6524 5月 11 2021 /etc/neutron/plugins/ml2/linuxbridge_agent.ini #备份设置文件 cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini #检察文件属性 ll /etc/neutron/plugins/ml2/linuxbridge_agent.ini -rw-r----- 1 root neutron 10 12月 12 17:19 /etc/neutron/plugins/ml2/linuxbridge_agent.ini #修改文件内容 vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini #指定上个文件中的桥接网络provider与本机ens34物理网卡做关联,后期给假造机分配external(外部)网络地址,然后假造机就可以通过ens34上外网;桥接的物理网卡名有大概是bind0、br0等 physical_interface_mappings = provider:ens34 #不启用vxlan enable_vxlan = false #启用安全组并设置 Linux 桥接 iptables 防火墙驱动 enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver   
确保体系内核支持网桥过滤器   
#加载modprobe br_netfilter网桥过滤器模块 modprobe br_netfilter && lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter #修改内核设置文件/etc/sysctl.conf,开启ipv4与ipv6的网络过滤功能 vim /etc/sysctl.conf ... net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 #重新加载设置文件 sysctl -p   
修改dhcp_agent( 为假造网络提供 DHCP 服务)插件设置文件: /etc/neutron/dhcp_agent.ini   
#检察文件属性 ll /etc/neutron/dhcp_agent.ini -rw-r----- 1 root neutron 6524 5月 11 2021 /etc/neutron/dhcp_agent.ini #备份设置文件 cp /etc/neutron/dhcp_agent.ini{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/dhcp_agent.ini.bak > /etc/neutron/dhcp_agent.ini #检察文件属性 ll /etc/neutron/dhcp_agent.ini -rw-r----- 1 root neutron 10 12月 12 17:21 /etc/neutron/dhcp_agent.ini #修改文件内容 vi /etc/neutron/dhcp_agent.ini #指定默认接口驱动为linux网桥 interface_driver = linuxbridge #指定DHCP驱动 dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq #开启iso元数据 enable_isolated_metadata = true   
设置元数据代理:用于设置桥接与自服务网络的通用设置 ,修改设置文件:/etc/neutron/metadata_agent.ini   
#检察文件属性 ll /etc/neutron/metadata_agent.ini -rw-r----- 1 root neutron 11011 5月 11 2021 /etc/neutron/metadata_agent.ini #备份设置文件 cp /etc/neutron/metadata_agent.ini{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/metadata_agent.ini.bak > /etc/neutron/metadata_agent.ini #检察文件属性 ll /etc/neutron/metadata_agent.ini -rw-r----- 1 root neutron 18 12月 12 17:22 /etc/neutron/metadata_agent.ini #修改文件内容 vi /etc/neutron/metadata_agent.ini #元数据代理主机 nova_metadata_host = controller #元数据代理的共享密钥 metadata_proxy_shared_secret = METADATA_SECRET   
修改nova设置文件,用于neutron交互,设置文件: /etc/nova/nova.conf   
vi /etc/nova/nova.conf auth_url =   http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron #指定neutron用户密码:123456 password = 123456 service_metadata_proxy = true metadata_proxy_shared_secret = METADATA_SECRET   
创建ML2插件文件链接   
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   
重启nova-api服务   
systemctl restart openstack-nova-api.service   
开启neutron服务、设置开机自启动   
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 systemctl is-active neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service openstack-nova-api.service    八、compute部署neutron服务

1. neutron服务安装和设置

<blockquote class="kdocs-blockquote" style="text-align:left;">   yum -y install openstack-neutron-linuxbridge ebtablesipset   
修改设置文件:/etc/neutron/neutron.conf   
#检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 39708 5月 11 2021 /etc/neutron/neutron.conf #备份设置文件 cp /etc/neutron/neutron.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf #检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 216 12月 7 17:25 /etc/neutron/neutron.conf #修改文件内容 vi /etc/neutron/neutron.conf #指定连接的rabbitmq的用户密码123456,指定使用keystone认证 transport_url = rabbit://openstack:123456@controller auth_strategy = keystone #设置keystone认证信息,留意将用户neutron密码改为:123456 www_authenticate_uri =   http://controller:5000 auth_url =   http://controller:5000#检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 39708 5月 11 2021 /etc/neutron/neutron.conf #备份设置文件 cp /etc/neutron/neutron.conf{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf #检察文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron 216 12月 7 17:25 /etc/neutron/neutron.conf #修改文件内容 vi /etc/neutron/neutron.conf #指定连接的rabbitmq的用户密码123456,指定使用keystone认证 transport_url = rabbit://openstack:123456@controller auth_strategy = keystone #设置keystone认证信息,留意将用户neutron密码改为:123456 www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = 123456 #设置锁路径 lock_path = /var/lib/neutron/tmp   
修改linuxbridge(网桥)插件设置文件: /etc/neutron/plugins/ml2/linuxbridge_agent.ini   
#检察文件属性 ll /etc/neutron/plugins/ml2/linuxbridge_agent.ini -rw-r----- 1 root neutron 6524 5月 11 2021 /etc/neutron/plugins/ml2/linuxbridge_agent.ini #备份设置文件 cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak} #重新天生设置文件 egrep -v '^#|^$' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini #检察文件属性 ll /etc/neutron/plugins/ml2/linuxbridge_agent.ini -rw-r----- 1 root neutron 10 12月 12 17:26 /etc/neutron/plugins/ml2/linuxbridge_agent.ini #修改文件内容 vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini #指定桥接网络provider与本机ens34物理网卡做关联,后期给假造机分配external(外部)网络地址,然后假造机就可以通过ens34上外网;桥接的物理网卡名有大概是bind0、br0等 physical_interface_mappings = provider:ens36 #不启用vxlan enable_vxlan = false #启用安全组并设置 Linux 桥接 iptables 防火墙驱动 enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver   
确保体系内核支持网桥过滤器   
#加载modprobe br_netfilter网桥过滤器模块 modprobe br_netfilter && lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter #修改内核设置文件/etc/sysctl.conf,开启ipv4与ipv6的网络过滤功能 vim /etc/sysctl.conf ... net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 #重新加载设置文件 sysctl -p   
修改nova设置文件,用于neutron交互,设置文件: /etc/nova/nova.conf   
vim /etc/nova/nova.conf #指定neutron用户密码:123456 auth_url =   http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = 123456   
重启nova-api服务   
systemctl restart openstack-nova-compute.service   
开启neutron服务、设置开机自启动   
systemctl enable neutron-linuxbridge-agent.service systemctl restart neutron-linuxbridge-agent.service systemctl is-active neutron-linuxbridge-agent.service openstack-nova-compute.service    2. 服务验证

controller节点
<blockquote class="kdocs-blockquote" style="text-align:left;">   切换admin身份检察下网络服务   
source admin-openrc openstack network agent list   
   
总结:到这里为止我们的网络服务neutron就搭建完毕了,现在我们的 OpenStack环境就已经到达了启动实例的条件了。    九、创建provider实例

controller节点
1. 创建一个provider网络,网络类型为external

<blockquote class="kdocs-blockquote" style="text-align:left;">   source admin-openrc openstack network create --share --external \ --provider-physical-network provider \ --provider-network-type flat provider ### --share: 允许所有项目都可以使用该网络; --external: 类型为连通外部的假造网络; --provider-physical-network:指定网络的提供者为provider,由 ml2_conf.ini文件的flat_networks界说; --provider-network-type flat:映射到主机的网卡ens34,由linuxbridge_agent.ini文件的physical_interface_mappings界说; openstack subnet create --network provider \ --allocation-pool start=192.168.10.50,end=192.168.10.250 \ --dns-nameserver 223.5.5.5 --gateway 192.168.10.254 \ --subnet-range 192.168.10.0/24 provider   
检察网络   
openstack network list +--------------------------------------+----------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+----------+--------------------------------------+ | ae2b47b8-3eb2-4d14-911d-b86212c8ccdb | provider | 417a2deb-572d-4dc1-9d38-245b2a68e80a | +--------------------------------------+----------+--------------------------------------+   
创建VM实例规格flavor   
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano #参数说明: --id: 规格ID; --vcpus: cpu数目; --ram: 内存大小,单位Mb; --disk: 磁盘空间大小,单位Gb;    2. 设置密钥

<blockquote class="kdocs-blockquote" style="text-align:left;">   openstack支持用户使用公钥认证的方式创建实例,而不是传统的密码认 证。 在启动实例之前,必须向盘算服务添加公钥。   
#切换到平凡用户(以平凡租户身份创建实例) source demo-openrc #天生密钥 ssh-keygen -q -N "" Enter file in which to save the key (/root/.ssh/id_rsa): [回车] #创建密钥到openstack中,并指定密钥名称mykey openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey +-------------+-------------------------------------------------+ | Field | Value | +-------------+-------------------------------------------------+ | fingerprint | 40:e2:bd:bd:c7:ac:cd:c0:48:38:f0:07:20:94:ab:58 | | name | mykey | | user_id | 994b9e52e67b47f99a9ec4e9467cc306 | +-------------+-------------------------------------------------+ #查抄密钥 openstack keypair list +-------+-------------------------------------------------+ | Name | Fingerprint | +-------+-------------------------------------------------+ | mykey | 40:e2:bd:bd:c7:ac:cd:c0:48:38:f0:07:20:94:ab:58 | +-------+-------------------------------------------------+    3. 添加安全组

<blockquote class="kdocs-blockquote" style="text-align:left;">   在安全组规则中默认拒绝远程访问实例,所以需要放行安全组规则,允许 ICMP(ping)和SSH访问   
检察安全组   
source demo-openrc openstack security group list   
添加ssh规则   
openstack security group rule create --proto tcp --dst-port 22 default   
检察安全组规则   
openstack security group rule list    4. provider网络启动实例

<blockquote class="kdocs-blockquote" style="text-align:left;">   要启动实例,至少必须指定flavor、glance名称、网络、安全组(ID)、密钥 和实例名称。   
#切换到平凡用户 source demo-openrc #检察实例可用的规则 openstack flavor list #检察实例可用的安全组 openstack security group list #检察实例可用的镜像 openstack image list #检察实例可用的网络 openstack network list   
创建实例   
source demo-openrc openstack server create --flavor m1.nano --image cirros \ --nic net-id=319a4f5b-fa5c-4e93-859c-810bcd5ec54d --security-group default \ --key-name mykey provider-instance 参数说明: --flavor: 指定实例使用的规则; --image: 指定假造机使用的镜像文件; --nic: 指定假造网卡使用的网络,net-id=网络ID; --security-group: 指定假造机使用的安全组; --key-name: 指定假造机使用的秘钥对名称;   
检察实例   
openstack server list   
在盘算节点检察实例   
virsh list    5. 访问实例

<blockquote class="kdocs-blockquote" style="text-align:left;">   此时的实例默认无法访问,应为该实例的网段地址我们并没有在物理节点 设置过对应的网关,所以先按照官方提供的方案,先获取假造机的VNC地址   
检察实例VNC地址   
openstack console url show provider-instance   
通过浏览器访问   
提示:如果在windows没有设置controller的域名解析,可以把地址栏中的controller换成IP地址   
检察是实例没有正常创建,卡在grub体系引导这里了, 这种情况是因为我 使用的vmware虚机假造磁盘格式和驱动步调的题目,导致创建的实例无法 正常的启动,我们需要做如下操作   
#检察镜像 source admin-openrc openstack image list #提示:VMware环境需通过下边下令修改磁盘的类型为IDE(物理机不需要) openstack image set \ --property hw_disk_bus=ide \ --property hw_vif_model=e1000 \ aa292008-25be-42b6-89b1-2f07407eb042 #将镜像ID替换为查询出来的ID #删除当前实例 source demo-openrc openstack server delete provider-instance #重新创建实例 .#检察网络ID openstack network list #创建实例(提示:net-id=网络ID) source demo-openrc openstack server create --flavor m1.nano --image cirros \ --nic net-id=319a4f5b-fa5c-4e93-859c-810bcd5ec54d --security-group default \ --key-name mykey demo #检察实例 openstack server list #检察实例VNC地址 openstack console url show provider-instance #根据提示输入用户名和密码就可以进入体系了   
总结:到现在为止,OpenStack环境搭建完成了,网络可以正常创建,实例也能 够正常的创建,这就证实这套私有云平台搭建完成了    十、 安装dashboard

controller节点
<blockquote class="kdocs-blockquote" style="text-align:left;">   安装软件包   
yum -y install openstack-dashboard   
设置dashboard   
#检察文件属性 ll /etc/openstack-dashboard/local_settings -rw-r----- 1 root apache 12972 12月 10 12:53 /etc/openstack-dashboard/local_settings #备份设置文件(无需重新天生) cp /etc/openstack-dashboard/local_settings{,.bak} #修改文件内容 vim /etc/openstack-dashboard/local_settings #在本机上设置仪表盘以使用OpenStack服务 OPENSTACK_HOST = "controller" # *允许所有主机访问仪表盘 ALLOWED_HOSTS = ['   horizon.example.com', '*'] #设置缓存会话存储服务 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' #指定memcached服务地址及端口 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } } #启用第3版认证API(如果是v3版本则不需要修改) OPENSTACK_KEYSTONE_URL = "   http://%s:5000/v3"#检察文件属性 ll /etc/openstack-dashboard/local_settings -rw-r----- 1 root apache 12972 12月 10 12:53 /etc/openstack-dashboard/local_settings #备份设置文件(无需重新天生) cp /etc/openstack-dashboard/local_settings{,.bak} #修改文件内容 vim /etc/openstack-dashboard/local_settings #在本机上设置仪表盘以使用OpenStack服务 OPENSTACK_HOST = "controller" # *允许所有主机访问仪表盘 ALLOWED_HOSTS = ['horizon.example.com', '*'] #设置缓存会话存储服务 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' #指定memcached服务地址及端口 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } } #启用第3版认证API(如果是v3版本则不需要修改) OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % #启用对域的支持(默认不存在,添加到文件末了) OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True #设置API版本(默认不存在,手动添加) OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 3, } #通过仪表盘创建用户时的默认域设置为 default(默认不存在,添加到文件末了即可) OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default" #通过仪表盘创建的用户默认角色设置为 user(默认不存在,添加到文件末了即可) OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" #如果选择网络选项1,也就是公共网络,则需要禁用对第3层网络服务的支持 OPENSTACK_NEUTRON_NETWORK = { 'enable_lb': False, #默认不存在,手动添加 'enable_firewall': False, #默认不存在,手动添加 'enable_vpn': False, #默认不存在,手动添加 'enable_auto_allocated_network': False, 'enable_distributed_router': False, 'enable_fip_topology_check': False, #改为False 'enable_ha_router': False, 'enable_ipv6': False, #改为False 'enable_quotas': False, #改为False 'enable_rbac_policy': False, #改为False 'enable_router': False, #改为False } #设置时区 TIME_ZONE = "Asia/Shanghai" #文件末了增加页面的访问路径 WEBROOT="/dashboard"   
修改设置文件: /etc/httpd/conf.d/openstack-dashboard.conf   
vim /etc/httpd/conf.d/openstack-dashboard.conf #...在前三行下增加,使Apache支持WSGI协议(用来支持Web服务器和Web应用步调交互) WSGIApplicationGroup %{GLOBAL}   
重启httpd、memcached   
systemctl restart httpd.service memcached.service   
访问dashboard   
访问页面登录:   http://controller/dashboard
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: openstack单机部署