openstack单机部署

OpenStack部署

一、OpenStack环境部署

1. 虚拟机配置

controller 192.168.34.10 2c6g50g
compute01 192.168.34.20 2c4g50g

2. 设置主机名

hostnamectl set-hostname controller
hostnamectl set-hostname compute01
修改host文件
vim /etc/hosts
192.168.34.10 controller
192.168.34.20 compute01

3. 时间同步

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仓库

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数据库

controller节点安装
yum -y install mariadb mariadb-server python2-PyMySQL
vim /etc/my.cnf.d/openstack.cnf
[mysqld] 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密码?——[y]
直接设置root密码——》[123456]
是否删除匿名用户?——》[y]
不允许root用户远程登录?——》[y]
是否删除测试数据库?——》[y]
是否重新加载授权表?——》[y]

6. 安装rabbitMQ消息队列

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数据库

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数据库

controller节点安装
yum -y install etcd
vi /etc/etcd/etcd.conf
#[Member] 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" #[Clustering] 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. 基础环境安装完成,检查安装服务

systemctl is-active chronyd mariadb.service rabbitmq-server.service memcached.service etcd.service

二、Keystone安装

1. mysql创建keystone账号

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服务安装与配置

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 [database] #配置keystone访问数据库的密码 connection = mysql+pymysql://keystone:123456@controller/keystone [token] #配置Fernet令牌,方便其他程序通过令牌来连接keyston进行验证 provider = fernet

3. 初始数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone
验证数据库
mysql -u keystone -p123456 use keystone show tables;

4. 初始数据库

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服务

配置 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. 创建认证账号

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. 验证操作

#取消环境变量 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. 创建环境变量脚本

#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. 总结

到现在为止我们keystone服务就部署完成了,kystone服务可以说是 OpenStack环境最重要的一个服务,他的主要功能就是负责发布token【令 牌】,给用户发布令牌并且提供验证服务。

三、 glance数据库配置

controller节点操作

1. mysql创建glance数据库和账号

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. 创建认证账号

切换到admin用户,创建glance用户(密码:123456)
#使用创建的admin-openrc切换Openstack的admin账号 source admin-openrc #创建用户glance,密码设置为123456 openstack user create --domain default --password-prompt glance User Password:[123456] Repeat User Password:[123456] #查看用户列表 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端点

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服务安装和配置

安装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 [database] connection = mysql+pymysql://glance:123456@controller/glance #接着是glance找keystone需要做验证,配置keystone认证信息 #访问glance数据库使用的用户及密码:123456 [keystone_authtoken] #指定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 [paste_deploy] flavor = keystone #指定存储 [glance_store] #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. 服务验证

使用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. 总结

到这里为止OpenStack中glance服务就部署完成了,而且也已经验证过 了,glance组件的命令是比较少的,工作中常用到的就三类命令:上传、 查看、删除。 而且当我们部署好OpenStack环境之后,我们是需要根据需求来准备镜像 上传到glance,注意ISO镜像上传上去是没法直接使用的,需要将ISO镜像 转变成qcow2磁盘文件,然后上传磁盘文件,就可以创建云主机。

四、部署Placement服务

controller节点

Placement服务是从nova服务中拆分出来的组件,Placement组件应该在 Nova之前安装;
Placement服务用于跟踪节点资源(比如计算节点,存储资源池,网络资 源池等)的使用情况,提供自定义资源的能力,为分配资源提供服务。

1. mysql创建placement账号和数据库

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. 创建认证账号

为placement创建用户、授权、创建placement服务、创建url访问地址, 其目的是让keystone可以识别placement身份
source admin-openrc openstack user create --domain default --password-prompt placement User Password:[123] Repeat User Password:[123] #查看用户列表 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端点

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服务安装和配置

安装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 [placement_database] connection = mysql+pymysql://placement:123456@controller/placement #认证类型为keyston [api] auth_strategy = keystone #配置keystone认证信息 [keystone_authtoken] #指定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. 服务验证

切换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服务

nova服务是OpenStack service计算服务,负责维护和管理云环境的计算 资源,例如: 接收客户端请求需要的计算资源、确定实例在哪个物理机上 创建、通过虚机化的方式将实例启动运行等工作。

1. mysql创建nova账号和数据库

在安装和配置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. 创建认证账号

#切换到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端点

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服务安装和配置

安装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防火墙驱动冲突 [DEFAULT] 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 [api] auth_strategy = keystone #访问nova_api数据库使用的用户及密码:123456 [api_database] connection = mysql+pymysql://nova:123456@controller/nova_api #访问nova数据库使用的用户及密码:123456 [database] connection = mysql+pymysql://nova:123456@controller/nova #指定glacne的api,nova启动实例需要找glance要镜像 [glance] api_servers = http://controller:9292 #配置keystone认证信息,密码123456 [keystone_authtoken] 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客户端地址为本机地址,此地址是管理网的地址 [vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip #配置lock锁的临时存放目录,锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行 [oslo_concurrency] lock_path = /var/lib/nova/tmp #nova需要访问placement获取计算节点的资源使用情况,注意这里的placement密码是:123456 [placement] 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服务

Nova-compute在计算节点上运行,负责管理节点上的实例,例如:创 建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照等操作都是 通过nova-compute实现的。 通常一个主机运行一个Nova-compute服务,一个实例部署在哪个可用的 主机上取决于调度算法,OpenStack对实例的操作,最后都是提交给 Nova-compute来完成 。

1. 安装nova-compute组件

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 [DEFAULT] #指定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 [api] #指定使用keystone认证 auth_strategy = keystone #配置keystone认证信息,密码:123456 [keystone_authtoken] 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 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 [glance] #指定glacne的api,nova启动实例需要找glance要镜像 api_servers = http://controller:9292 [oslo_concurrency] #配置lock锁的临时存放目录,锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行 lock_path = /var/lib/nova/tmp #nova需要访问placement获取计算节点的资源使用情况,注意这里的placement密码是:123456 [placement] 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上
扫描当前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 ​``` [scheduler] 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账号和数据库

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网络才可以访 问外网。

安装相关的软件包
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 [DEFAULT] #启用二层网络插件 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 [database] #访问neutron数据库使用的用户及密码:123456 connection = mysql+pymysql://neutron:123456@controller/neutron #配置keystone认证信息,注意将用户neutron密码改为:123456 [keystone_authtoken] 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 #默认配置文件没有提供该模块,在文件最后添加即可 [nova] 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 [DEFAULT] #启用二层网络插件 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 [database] #访问neutron数据库使用的用户及密码:123456 connection = mysql+pymysql://neutron:123456@controller/neutron #配置keystone认证信息,注意将用户neutron密码改为:123456 [keystone_authtoken] 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 #默认配置文件没有提供该模块,在文件最后添加即可 [nova] 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 [oslo_concurrency] #配置锁路径 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 [ml2] #配置类型驱动:让二层网络支持桥接,支持基于vlan做子网划分 type_drivers = flat,vlan #租户网络类型(vxlan),默认官方文档没有定义vxlan网络类型 tenant_network_types = #启用Linuxbridge网桥过滤 mechanism_drivers = linuxbridge #启用端口安全扩展驱动程序,基于iptables实现访问控制;但配置了扩展安全组会导致一些端口限制,造成一些服务无法启动 extension_drivers = port_security [ml2_type_flat] #将provider(提供商网络)设置为flat(桥接)类型 flat_networks = provider [securitygroup] #启用 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 [linux_bridge] #指定上个文件中的桥接网络provider与本机ens34物理网卡做关联,后期给虚拟机分配external(外部)网络地址,然后虚拟机就可以通过ens34上外网;桥接的物理网卡名有可能是bind0、br0等 physical_interface_mappings = provider:ens34 [vxlan] #不启用vxlan enable_vxlan = false [securitygroup] #启用安全组并配置 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 [DEFAULT] #指定默认接口驱动为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 [DEFAULT] #元数据代理主机 nova_metadata_host = controller #元数据代理的共享密钥 metadata_proxy_shared_secret = METADATA_SECRET
修改nova配置文件,用于neutron交互,配置文件: /etc/nova/nova.conf
vi /etc/nova/nova.conf [neutron] 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服务安装和配置

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认证 [DEFAULT] transport_url = rabbit://openstack:123456@controller auth_strategy = keystone #配置keystone认证信息,注意将用户neutron密码改为:123456 [keystone_authtoken] 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认证 [DEFAULT] transport_url = rabbit://openstack:123456@controller auth_strategy = keystone #配置keystone认证信息,注意将用户neutron密码改为:123456 [keystone_authtoken] 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 #配置锁路径 [oslo_concurrency] 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 [linux_bridge] #指定桥接网络provider与本机ens34物理网卡做关联,后期给虚拟机分配external(外部)网络地址,然后虚拟机就可以通过ens34上外网;桥接的物理网卡名有可能是bind0、br0等 physical_interface_mappings = provider:ens36 [vxlan] #不启用vxlan enable_vxlan = false [securitygroup] #启用安全组并配置 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 [neutron] 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节点

切换admin身份查看下网络服务
source admin-openrc openstack network agent list

总结:到这里为止我们的网络服务neutron就搭建完毕了,现在我们的 OpenStack环境就已经达到了启动实例的条件了。

九、创建provider实例

controller节点

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

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. 配置密钥

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. 添加安全组

在安全组规则中默认拒绝远程访问实例,所以需要放行安全组规则,允许 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网络启动实例

要启动实例,至少必须指定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. 访问实例

此时的实例默认无法访问,应为该实例的网段地址我们并没有在物理节点 配置过对应的网关,所以先按照官方提供的方案,先获取虚拟机的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节点

安装软件包
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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值