openstack集群部署
- 1、openstack-train版本集群部署
- 1.1 master初始化,安装源
- 1.2 master安装keystone组件
- 1.3 在master创建账户,域和项目
- 1.4 master安装glance组件
- 1.5 maser安装placement
- 1.6 master安装nova组件
- 1.7(node) 在node节点安装nova组件
- 1.8 master配置neutron组件
- 1.9 (node)在node安装neutron组件
- 1.10 master分配网络
- 1.11(node)在node修改系统硬件配置,要不然不能创建虚拟机
- 1.12 master创建虚拟机,查看是否能运行
- 1.13 master安装网页组件dashboard
- 1.14 master和node优化
- 2、openstack自定义ubuntu、centos镜像
- 3、上传镜像到openstack,用网页版创建虚拟机
1、openstack-train版本集群部署
官网组件介绍:openstack组件
主要组件:
- Keystone(认证管理服务):主要为其他组件进行身份认证、授权、服务发现等功能。
- Glance(镜像管理服务):主要为虚拟机提供镜像的注册、查询、存储等功能。
- Nova(计算管理服务):主要为裸机、虚拟机等提供硬件资源计算、分配、管理等功能。
- placement(Nova内的组件):主要检查、收集node节点的资源状态,从而为Nova组件提供支持。
- Neutron(网络服务):主要为master和node节点、node的虚拟机和虚拟机之间提供网络环境等功能
- cinder(块存储):,提供存储资源池,类似于U盘,可以实现不同虚拟机之间的数据转移等功能
- Horizon(web管理接口):服务名字为dashboard,主要为openstack集群提供网页界面控制,实现可视化控制集群。
环境准备:
系统官网下载地址:centos7.2
master虚拟机至少双核以上,开启CPU虚拟化,网卡最好双网卡,一个NAT模式,一个主机模式。
node虚拟机至少双核以上,开启CPU虚拟化,内存和硬盘越高越好(看电脑配置),网卡设置双网卡,一个NAT模式,一个主机模式。
1.1 master初始化,安装源
编译内核文档:编译内核
yum安装内核为下面
默认centos 7.2的内核是3.10,内核版本要升级,要不然不能安装内核模块
安装源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
安装稳定版本
yum --enablerepo=elrepo-kernel install kernel-ml -y
查看全部内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
tail /boot/grub2/grubenv 查看默认启动的内核
grub2-set-default 0 设置对应的数字启动内核,0代表5.17版本
grub2-mkconfig -o /boot/grub2/grub.cfg 重新加载启动文件
安装内核模块
yum install bridge-utils -y
vi /etc/sysctl.conf 编辑文件
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
echo br_netfilter > /etc/modules-load.d/br_netfilter.conf 设置开机自启模块
重启系统,确认内核模块生效
reboot 重启系统
uname -r 确认新的内核版本
lsmod |grep br_netfilter
sysctl -p 查看配置是否生效
官网环境介绍:openstack部署环境介绍
注意:不要使用阿里yum源、腾讯yum源等其他源,用centos本身自带的源即可。
```bash
初始化
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable NetworkManager.service
配置时区同步
yum install -y chrony
timedatectl set-timezone Asia/Shanghai 设置时区
vi /etc/chrony.conf
#注释这些
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#写对准这个时间服务器
server time1.aliyun.com iburst
systemctl enable chronyd
systemctl start chronyd
chronyc sources -V 查看是否开始校对
vi /etc/hosts 设置hosts
192.168.116.135 master.openstack
192.168.116.136 node1.openstack
hostnamectl set-hostname master.openstack
安装openstack源
yum install -y centos-release-openstack-train.noarch
yum install python-openstackclient openstack-selinux wget -y 安装依赖包
安装mariadb或者mysql,rabbitmq,memcached
yum install mariadb mariadb-server python2-PyMySQL -y
配置mysql
vi /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
systemctl start mariadb
systemctl enable mariadb
配置rabbitmq
yum install rabbitmq-server -y
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
设置账户openstack和密码test1234,设置最高权限
rabbitmqctl add_user openstack test1234
rabbitmqctl set_user_tags openstack administrator
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
开启网页插件
rabbitmq-plugins enable rabbitmq_management
安装memcached
yum install memcached python-memcached -y
vi /etc/sysconfig/memcached 修改缓存大小、监听地址
CACHESIZE="1024"
OPTIONS="-l 0.0.0.0"
systemctl enable memcached.service
systemctl start memcached.service
ss -tnl 确认端口都打开,服务正常运行
25672 rabbitmq端口
3306 mysql端口
11211 memcached端口
15672 rabbitmq网页端口
4369 rabbitmq端口
5672 rabbitmq端口
访问rabbitmq网页,查看账户是否创建成功
http://192.168.116.135:15672/
openstack 账户
test1234 密码
1.2 master安装keystone组件
官网安装文档:keystone安装
数据库配置
mysql
创建数据库和设置账户
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'test1234';
exit
安装和配置
yum install openstack-keystone httpd mod_wsgi -y
vi /etc/keystone/keystone.conf 配置keystone和mysql连接,文件不要写中文内容
[database]
#keystone:test1234是数据库账户和密码
#master.openstack是master的主机名,/keystone这里的是数据库名字
connection = mysql+pymysql://keystone:test1234@master.openstack/keystone
[token]
#在这里添加
provider = fernet
su -s /bin/sh -c "keystone-manage db_sync" keystone 启动配置
生成2个账户信息目录
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
注册身份,只要改master.openstack这个主机名就行
--bootstrap-password admin 这个admin是账户admin的密码
keystone-manage bootstrap --bootstrap-password admin \
--bootstrap-admin-url http://master.openstack:5000/v3/ \
--bootstrap-internal-url http://master.openstack:5000/v3/ \
--bootstrap-public-url http://master.openstack:5000/v3/ \
--bootstrap-region-id RegionOne
配置httpd
vi /etc/httpd/conf/httpd.conf 添加
ServerName master.openstack:80
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
systemctl enable httpd.service
systemctl start httpd.service
创建admin账户变量
vi /etc/profile.d/openstack-admin.sh
#!/bin/bash
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://master.openstack:5000/v3
export OS_IDENTITY_API_VERSION=3
source /etc/profile.d/openstack-admin.sh
openstack user list 查看账户是否生效
1.3 在master创建账户,域和项目
官网文档:创建账户,域和项目
创建域example
openstack domain create --description "An Example Domain" example
创建项目service
openstack project create --domain default \
--description "Service Project" service
创建项目myproject
openstack project create --domain default \
--description "Demo Project" myproject
创建用户myuser,需要输入密码test1234
openstack user create --domain default \
--password-prompt myuser
创建角色规则myrole
openstack role create myrole
将项目,用户和规则绑定
openstack role add --project myproject --user myuser myrole
unset OS_AUTH_URL OS_PASSWORD 取消刚才定义的环境变量
输入admin账户密码admin,测试账户认证功能
openstack --os-auth-url http://master.openstack:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
输入myuser账户密码test1234,测试账户认证功能
openstack --os-auth-url http://master.openstack:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name myproject --os-username myuser token issue
修改admin变量,下面都是用admin变量进行创建组件
vi /etc/profile.d/openstack-admin.sh
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://master.openstack:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
source /etc/profile.d/openstack-admin.sh
openstack token issue 测试token
查看keystone数据库是否生成了数据
mysql -u keystone -p'test1234' -e 'use keystone;show tables;'
1.4 master安装glance组件
官网文档:glance组件安装文档
安装glance后,镜像测试文档:image镜像
配置mysql
mysql
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'test1234';
exit
source /etc/profile.d/openstack-admin.sh 用admin变量创建配置
创建glance账户,密码配test1234,创建身份认证
openstack user create --domain default --password-prompt glance
授权
openstack role add --project service --user glance admin
创建service
openstack service create --name glance \
--description "OpenStack Image" image
在3个网络上开放端口
openstack endpoint create --region RegionOne \
image public http://master.openstack:9292
openstack endpoint create --region RegionOne \
image internal http://master.openstack:9292
openstack endpoint create --region RegionOne \
image admin http://master.openstack:9292
配置glance
yum install openstack-glance -y
vi /etc/glance/glance-api.conf
[database]
#设置连接数据库
connection = mysql+pymysql://glance:test1234@master.openstack/glance
[keystone_authtoken]
#设置连接到keystone的信息,username和password是上面注册的账户和密码
www_authenticate_uri = http://master.openstack:5000
auth_url = http://master.openstack:5000
memcached_servers = master.openstack:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = test1234
[paste_deploy]
#设置连接到keystone
flavor = keystone
[glance_store]
#设置存放镜像的目录和格式
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
su -s /bin/sh -c "glance-manage db_sync" glance 启动配置
systemctl enable openstack-glance-api.service
systemctl start openstack-glance-api.service
默认创建后就会自动生成images目录,不用自己新建,注意账户权限是glance即可
ll /var/lib/glance/
下载官网测试镜像,测试glance组件是否能正常工作
在浏览器打开下载这个镜像然后上传到这个目录下
http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
上传镜像到组件
cd /var/lib/glance/images/
glance image-create --name "cirros" \
--file cirros-0.4.0-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--visibility public
glance image-list 查看镜像列表
查看数据库是否生成文件
mysql -u keystone -p'test1234' -e 'use keystone;show tables;'
1.5 maser安装placement
官网介绍文档:placement
mysql配置
mysql
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'test1234';
exit
source /etc/profile.d/openstack-admin.sh
创建账户placement,密码配test1234,创建身份认证
openstack user create --domain default --password-prompt placement
授权
openstack role add --project service --user placement admin
创建service
openstack service create --name placement \
--description "Placement API" placement
创建3个网络端口
openstack endpoint create --region RegionOne \
placement public http://master.openstack:8778
openstack endpoint create --region RegionOne \
placement internal http://master.openstack:8778
openstack endpoint create --region RegionOne \
placement admin http://master.openstack:8778
配置placement
yum install openstack-placement-api -y
vi /etc/placement/placement.conf 修改配置
[placement_database]
#设置数据库信息
connection = mysql+pymysql://placement:test1234@master.openstack/placement
[api]
#设置API为keystone
auth_strategy = keystone
[keystone_authtoken]
#设置上面注册的账户信息
auth_url = http://master.openstack:5000/v3
memcached_servers = master.openstack:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = test1234
su -s /bin/sh -c "placement-manage db sync" placement
会出现下面这个警告,忽略即可
/usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1280, u"Name 'alembic_version_pkc' ignored for PRIMARY key.")
result = self._query(query)
修改httpd配置
vi /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>
systemctl restart httpd
查看数据库是否生成文件
mysql -u placement -p'test1234' -e 'use placement;show tables;'
1.6 master安装nova组件
官网介绍文档:nova
mysql配置
mysql
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'test1234';
exit
source /etc/profile.d/openstack-admin.sh
创建账户nova,密码配test1234,创建身份认证
openstack user create --domain default --password-prompt nova
授权
openstack role add --project service --user nova admin
创建service
openstack service create --name nova \
--description "OpenStack Compute" compute
创建3个服务端口
openstack endpoint create --region RegionOne \
compute public http://master.openstack:8774/v2.1
openstack endpoint create --region RegionOne \
compute internal http://master.openstack:8774/v2.1
openstack endpoint create --region RegionOne \
compute admin http://master.openstack:8774/v2.1
配置nova
yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
vi /etc/nova/nova.conf 修改配置
[DEFAULT]
#设置组件
enabled_apis = osapi_compute,metadata
my_ip = 192.168.116.135
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
#配置rabbitmq创建的账户和密码
transport_url = rabbit://openstack:test1234@master.openstack:5672/
[api_database]
#配置nova_api数据库的连接
connection = mysql+pymysql://nova:test1234@master.openstack/nova_api
[database]
#配置连接nova数据库信息
connection = mysql+pymysql://nova:test1234@master.openstack/nova
[api]
#设置认证方式
auth_strategy = keystone
[keystone_authtoken]
#设置认证信息,账户和密码为上面注册的信息
www_authenticate_uri = http://master.openstack:5000/
auth_url = http://master.openstack:5000/
memcached_servers = master.openstack:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = test1234
[vnc]
#设置监听地址为本机IP
enabled = true
erver_listen = 192.168.116.135
server_proxyclient_address = 192.168.116.135
[glance]
#设置glance信息
api_servers = http://master.openstack:9292
[oslo_concurrency]
#锁路径配置
lock_path = /var/lib/nova/tmp
#开启自动扫描添加node
[scheduler]
discover_hosts_in_cells_interval = 300
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://master.openstack:5000/v3
username = placement
password = test1234
grep "^[a-Z]" /etc/nova/nova.conf 确认配置
启动配置
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
出现警告,不用管
/usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u'Duplicate index `block_device_mapping_instance_uuid_virtual_name_device_name_idx`. This is deprecated and will be disallowed in a future release')
result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release')
result = self._query(query)
su -s /bin/sh -c "nova-manage cell_v2 list_cells" 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
ss -tnl
1.7(node) 在node节点安装nova组件
默认centos 7.2的内核是3.10,内核版本要在升级,要不然不能安装内核模块
安装源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
安装稳定版本
yum --enablerepo=elrepo-kernel install kernel-ml -y
查看全部内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
tail /boot/grub2/grubenv 查看默认启动的内核
grub2-set-default 0 设置对应的数字启动内核,0代表5.17版本
grub2-mkconfig -o /boot/grub2/grub.cfg 重新加载启动文件
安装内核模块
yum install bridge-utils -y
vi /etc/sysctl.conf 编辑文件
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
echo br_netfilter > /etc/modules-load.d/br_netfilter.conf 设置开机自启模块
重启系统,确认内核模块生效
reboot 重启系统
uname -r 确认新的内核版本
lsmod |grep br_netfilter
sysctl -p 查看配置是否生效
官网环境介绍:openstack部署环境介绍
官网安装node介绍:openstack-node
注意:不要使用阿里yum源、腾讯yum源等其他源,用centos本身自带的源即可。
初始化
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable NetworkManager.service
配置时区同步
yum install -y chrony
timedatectl set-timezone Asia/Shanghai 设置时区
vi /etc/chrony.conf
#注释这些
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#写对准这个时间服务器
server time1.aliyun.com iburst
systemctl enable chronyd
systemctl start chronyd
chronyc sources -V 查看是否开始校对
vi /etc/hosts 设置hosts
192.168.116.135 master.openstack
192.168.116.136 node1.openstack
hostnamectl set-hostname node1.openstack
安装openstack源
yum install -y centos-release-openstack-train.noarch
yum install python-openstackclient openstack-selinux wget -y 安装依赖包
配置nova
yum install openstack-nova-compute -y
vi /etc/nova/nova.conf
[DEFAULT]
#设置组件和连接master的rabbitmq的信息
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:test1234@master.openstack
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
#设置认证方式
auth_strategy = keystone
[keystone_authtoken]
#设置master的nova的账户信息
www_authenticate_uri = http://master.openstack:5000/
auth_url = http://master.openstack:5000/
memcached_servers = master.openstack:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = test1234
[vnc]
#192.168.116.136为node的IP,虚拟机的出口就是整个IP
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = 192.168.116.136
novncproxy_base_url = http://master.openstack:6080/vnc_auto.html
[glance]
#设置连接master的glance组件
api_servers = http://master.openstack:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
#设置连接master的placement组件信息
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://master.openstack:5000/v3
username = placement
password = test1234
grep "^[a-Z]" /etc/nova/nova.conf 确认配置
启动服务
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
node启动服务后,在master查看node的nova是否注册到了集群
master查看node1已经注册成功
source /etc/profile.d/openstack-admin.sh
openstack compute service list --service nova-compute
1.8 master配置neutron组件
官网介绍文档:neutron组件
mysql配置:
mysql
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'test1234';
exit
source /etc/profile.d/openstack-admin.sh
创建账户neutron,密码配test1234,创建身份认证
openstack user create --domain default --password-prompt neutron
授权
openstack role add --project service --user neutron admin
新建service
openstack service create --name neutron \
--description "OpenStack Networking" network
注册3个端口
openstack endpoint create --region RegionOne \
network public http://master.openstack:9696
openstack endpoint create --region RegionOne \
network internal http://master.openstack:9696
openstack endpoint create --region RegionOne \
network admin http://master.openstack:9696
neutron有2种网络模式,一般使用桥接模式
桥接模式文档:neutron桥接模式
自服务模式文档:neutron自服务模式
配置neutron
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
vi /etc/neutron/neutron.conf 修改配置
[DEFAULT]
设置组件模式
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:test1234@master.openstack
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[database]
#设置neutron数据库信息
connection = mysql+pymysql://neutron:test1234@master.openstack/neutron
[keystone_authtoken]
#设置上面注册的neutron账户信息
www_authenticate_uri = http://master.openstack:5000
auth_url = http://master.openstack:5000
memcached_servers = master.openstack:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = test1234
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
#下面全部都要添加到文件尾部
[nova]
#设置nova的连接信息
auth_url = http://master.openstack:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = test1234
确认配置
grep "^[a-Z]" /etc/neutron/neutron.conf
配置ml2插件的ml2_conf.ini文件
插件配置文件网址:ml2_conf.ini
黑色区域的文件内容要使用到
用浏览器打开网址,将内容全部复制替换掉老的文件
vi /etc/neutron/plugins/ml2/ml2_conf.ini 删除老的文件,复制上面网址的全部内容
[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
[ml2_type_flat]
#定义网络名字external,可以自定义,但是名字需要和下面linuxbridge_agent.ini文件保持一致
flat_networks = external
[securitygroup]
#安全组配置
enable_ipset = true
确认配置
grep "^[a-Z\[]" /etc/neutron/plugins/ml2/ml2_conf.ini
配置ml2插件的linuxbridge_agent.ini文件
插件文档:linuxbridge_agent.ini
黑色部分内容要使用到
用浏览器打开网址,将内容全部复制替换掉老的文件
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
#需要和上面的ml2_conf.ini文件的flat_networks = external名字一样
#eth0是本机网卡名字,使用能连接外网的网卡
physical_interface_mappings = external:eth0
[vxlan]
enable_vxlan = false
[securitygroup]
#安全组配置
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置dhcp_agent.ini文件,这个是使虚拟机自动获取到IP
vi /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
配置metadata_agent.ini文件,设置nova连接认证密码
vi /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = master.openstack
#test1234这个密码要和下面metadata_proxy_shared_secret一致
metadata_proxy_shared_secret = test1234
配置nova使用neutron组件
vi /etc/nova/nova.conf
[neutron]
auth_url = http://master.openstack:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = test1234
service_metadata_proxy = true
#这个需要和上面metadata_agent.ini配的保持一致
metadata_proxy_shared_secret = test1234
启动配置
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
systemctl restart openstack-nova-api.service
启动服务
systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
systemctl start neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
查看数据生成
mysql -u neutron -p'test1234' -e 'use neutron; show tables;'
1.9 (node)在node安装neutron组件
官网node安装neutron组件文档:node-neutron
yum install openstack-neutron-linuxbridge ebtables ipset -y
vi /etc/neutron/neutron.conf 修改配置
[DEFAULT]
#设置rabbitmq的账户和密码
transport_url = rabbit://openstack:test1234@master.openstack
auth_strategy = keystone
[keystone_authtoken]
#连接master的neutron组件,账户信息都是master的neutron信息
www_authenticate_uri = http://master.openstack:5000
auth_url = http://master.openstack:5000
memcached_servers = master.openstack:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = test1234
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
配置ml2插件的linuxbridge_agent.ini文件
插件文档:linuxbridge_agent.ini
黑色部分内容要使用到
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = external:eth0
[vxlan]
enable_vxlan = false
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
配置nova
vi /etc/nova/nova.conf
[neutron]
auth_url = http://master.openstack:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = test1234
重启nova服务
systemctl restart openstack-nova-compute.service
启动neutron组件
启动服务
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
1.10 master分配网络
neutron组件分配网络文档:neutron网络分配
openstack network agent list 确认4个组件都是up
openstack network create --share --external \
--provider-physical-network external \
--provider-network-type flat external-net
external 这里的名字必须和上面文件配置的网络一致
openstack subnet create --network external-net \
--allocation-pool start=192.168.116.50,end=192.168.116.100 \
--dns-nameserver 114.114.114.114 --gateway 192.168.116.2 \
--subnet-range 192.168.116.0/24 external-sub
#设置能连接外网的网段,要用真机IP,网关
start=192.168.116.50,end=192.168.116.100
--gateway 192.168.116.2
--subnet-range 192.168.116.0/24
brctl show 查看网卡绑定
ip a 查看真机的IP绑定到新增的网卡了
1.11(node)在node修改系统硬件配置,要不然不能创建虚拟机
virsh capabilities |grep pc 查看CPU的选项
vi /etc/nova/nova.conf 修改nova
#hw_machine_type=<None>
#hw_machine_type=<None>
hw_machine_type=x86_64=pc-i440fx-rhel7.2.0
cpu_mode=host-passthrough
重启服务
systemctl restart libvirtd.service openstack-nova-compute.service
1.12 master创建虚拟机,查看是否能运行
创建虚拟机文档:虚拟机创建
创建虚拟机硬件模板,虚拟机会根据模板的硬件配置而创建
source /etc/profile.d/openstack-admin.sh
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
--id 0 指定编号
--vcpus 1 指定CPU个数
--ram 64 指定使用内存,单位是M
--disk 1 指定使用硬盘大小,单位是G
m1.nano 硬件类型名称
创建秘钥,这个是用来master远程虚拟机使用的
ssh-keygen -q -N "" 回车就行
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
openstack keypair list
创建安全组规则
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
openstack security group list 查看安全组列表
创建虚拟机
openstack image list 查看镜像名字
openstack network list 查看网络ID
openstack server create --flavor m1.nano --image cirros \
--nic net-id=3c75db46-e55f-49dd-81c4-8ed1a2a55016 --security-group default \
--key-name mykey xuniji-vm1
--flavor m1.nano 指定使用的硬件类型名
--image cirros 指定镜像名字
--nic net-id=3c75db46-e55f-49dd-81c4-8ed1a2a55016 指定使用的网络
--security-group default 指定使用的安全组
--key-name mykey xuniji-vm1 指定虚拟机名字
openstack server list
openstack console url show xuniji-vm1 查看网页登录虚拟机方式
如果有对master.openstack进行hosts解析就直接访问网址即可,没有则把master.openstack改成master的IP地址
url | http://master.openstack:6080/vnc_auto.html?path=%3Ftoken%3D017353d8-9cca-44c8-b6eb-7537be63423f
用IP方式访问虚拟机
http://192.168.116.135:6080/vnc_auto.html?path=%3Ftoken%3D017353d8-9cca-44c8-b6eb-7537be63423f
根据提示输入账户cirros,密码gocubsgo,用sudo提权
ip a 可以到分配了真机的IP段
ping 114.114.114.114 可以通外网
1.13 master安装网页组件dashboard
网页组件dashboard文档:dashboard
yum install openstack-dashboard -y
vi /etc/openstack-dashboard/local_settings 修改配置
#设置master的IP
OPENSTACK_HOST = "192.168.116.135"
#下面全部true改为false
OPENSTACK_NEUTRON_NETWORK = {
'enable_auto_allocated_network': False,
'enable_distributed_router': False,
'enable_fip_topology_check': False,
'enable_ha_router': False,
'enable_ipv6': False,
# TODO(amotoki): Drop OPENSTACK_NEUTRON_NETWORK completely from here.
# enable_quotas has the different default value here.
'enable_quotas': False,
'enable_rbac_policy': False,
'enable_router': False,
#在这里添加访问的路径
# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
WEBROOT = '/dashboard'
#修改允许访问的方式
ALLOWED_HOSTS = ['192.168.116.135','master.openstack']
#这里添加内容
#SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
#CACHES = {
# 'default': {
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 'LOCATION': '127.0.0.1:11211',
# },
#}
#在这里添加下面
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'master.openstack:11211',
}
}
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
#修改时区为上海
# of your entire OpenStack installation, and hopefully be in UTC.
TIME_ZONE = "Asia/Shanghai"
vi /etc/httpd/conf.d/openstack-dashboard.conf 头部添加
WSGIApplicationGroup %{GLOBAL}
systemctl restart httpd.service memcached.service
访问网页版
http://192.168.116.135/dashboard 这里的/dashboard就是上面的WEBROOT路径
域输入default,账户admin,密码admin
查看账户密码去这个脚本查看
cat /etc/profile.d/openstack-admin.sh
export OS_USERNAME=admin
export OS_PASSWORD=admin
在实例可以看到上面创建的虚拟机
查看创建的硬件类型
1.14 master和node优化
master和node都修改配置
硬件优化
vi /etc/nova/nova.conf
[DEFAULT]
#开启虚拟机开机启动
resume_guests_state_on_host_boot=true
#允许超频,也就是如果有1个真实CPU,那么可以创建3*1的CPU
cpu_allocation_ratio=3
#允许内存超出使用,虚拟内存为真机内存的1.5倍
ram_allocation_ratio=1.5
#硬盘超额1倍
disk_allocation_ratio=1.0
#硬盘保留空间,不保留空间全部使用时会卡死
reserved_host_disk_mb=20480
#内存保留空间,不保留空间全部使用时会卡死
reserved_host_memory_mb=4096
#开启动态调整虚拟机硬件控制
allow_resize_to_same_host=true
baremetal_enabled_filters=RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ExactRamFilter,ExactDiskFilter,ExactCoreFilter
网络优化
vi /etc/neutron/neutron.conf 文件底部添加下面全部内容
[quotas]
#自定义的网络配置
quota_network = 10
quota_subnet = 10
quota_port = 5000
quota_driver = neutron.db.quota.driver.DbQuotaDriver
quota_router = 10
quota_floatingip = 1000
quota_security_group = 10
quota_security_group_rule = 100
配置完能重启服务器就重启服务器,不行就全部服务重启一次
控制节点重启服务
systemctl restart \
openstack-nova-api.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
systemctl restart neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
node节点重启服务
systemctl restart openstack-nova-compute.service
systemctl restart neutron-linuxbridge-agent.service
用命令行动态修改实例,VCPU,内存等方式
查看默认值,默认设置只能创建10个虚拟机,VCPU也只有20个。
nova quota-defaults 在master查看默认值,对应上面网页看到的值
nova官网命令行修改文档:nova命令行文档
master配置
通过命令修改配额,这些命令重启也会生效
source /etc/profile.d/openstack-admin.sh 调用变量
nova quota-class-update default --instances 13 设置能创建的虚拟机最大值
nova quota-defaults 可以看到值已经修改完成
刷新网页也会自动刷新
2、openstack自定义ubuntu、centos镜像
openstack的镜像使用方式有2种:
- 官网镜像直接使用方式:
centos提供qcow2镜像,可以直接使用:centos-qcow2文件
ubuntu提供img镜像,可以直接使用:ubuntu-img - 自定义方式:
自定义镜像主要是为了openstack创建虚拟机时,可以直接使用这个镜像作为虚拟机的系统模板,不用每次都要重新安装系统,配置一些初始化操作。
openstack官网制作centos镜像文档:openstack-centos
openstack官网制作ubuntu镜像文档:openstack-ubuntu
2.1 KVM自定义centos镜像
KVM使用方式文档:kvm和vmesxi使用
centos镜像地址:centos-iso
openstack官网制作centos镜像文档:openstack-centos
下载镜像,一般用Minimal版本即可
mkdir /data
cd /data/
wget https://vault.centos.org/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
qemu-img create -f qcow2 /tmp/centos.qcow2 10G 创建磁盘
指定硬件创建虚拟机
virt-install --virt-type kvm --name centos --ram 1024 \
--disk /tmp/centos.qcow2,format=qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=centos7.0 \
--location=/data/CentOS-7-x86_64-Minimal-1511.iso
--virt-type kvm 指定创建模式为kvm模式
--name centos --ram 1024 指定虚拟机内存大小
--disk /tmp/centos.qcow2,format=qcow2 指定硬盘存放位置
--network network=default 指定使用默认网络
--os-type=linux --os-variant=centos7.0 指定系统类型
--location=/data/CentOS-7-x86_64-Minimal-1511.iso 指定镜像来源
在KVM桌面
virt-manager 打开控制台,安装好系统
注意:语言一定要选英文,根分区一定要设为标准分区,要不然下面扩容硬盘扩容不了
语言格式选择英文
注意:自定义分区时,一定要把根分区的格式选择为标准分区,要不然下面扩容不了
2.1-1 KVM对虚拟机可选配置
- 添加网卡:默认是桥接网络,可以不添加网卡
如果需要一个内网卡,一个外网卡就需要添加网卡
关闭虚拟机,右键选择这个
选择virtio模式网卡
- 配置好IP,在KVM主机远程虚拟机,自定义镜像配置
初始化配置:
以下是基本初始化,根据需要设置,可以不设置
cd /etc/yum.repos.d/
yum install -y wget
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
yum clean all
yum makecache
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
2.1-2 KVM对虚拟机必做配置
- 可选操作做完后,再做这些操作
网卡文件需要配置为DHCP和开启ONBOOT
/etc/sysconfig/network-scripts/
必须运行配置:
cloud-init文档:cloud-init
#这些工具是为了自动扩容硬盘使用的,比如这个KVM虚拟机创建时只有10G空间,但是openstack创建时有20G,这个工具就会自动根据openstack的配置而扩展空间。openstack虚拟机扩容好硬盘后可以关闭服务,这个操作是一次性的。
yum install acpid cloud-init cloud-utils-growpart -y
systemctl enable acpid cloud-init
vi /etc/cloud/cloud.cfg 删除文件全部老的内容,只保存下面这些内容
users:
- default
disable_root: 0
ssh_pwauth: 0
mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
resize_rootfs_tmp: /dev
syslog_fix_perms: ~
disable_vmware_customization: false
cloud_init_modules:
- growpart
- resizefs
poweroff 关机
KVM对虚拟机操作
yum install libguestfs-tools -y
virt-sysprep -d centos 指定虚拟机名字,清除MAC地址,要不然每台openstack创建时MAC地址会冲突
virsh undefine centos 删除虚拟机,但是不删除虚拟机硬盘文件
2.2 KVM自定义ubuntu镜像
KVM使用方式文档:kvm和vmesxi使用
乌班图镜像地址:ubuntu-mini-iso
openstack官网制作ubuntu镜像文档:openstack-ubuntu
下载镜像
mkdir /data
cd /data
wget http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso
qemu-img create -f qcow2 /tmp/ubuntu-18.04.qcow2 10G 创建硬盘
创建虚拟机
virt-install --virt-type kvm --name ubuntu-18.04 --ram 1024 \
--cdrom=/data/mini.iso \
--disk path=/tmp/ubuntu-18.04.qcow2 \
--network bridge=virbr0 \
--graphics vnc,listen=0.0.0.0 --noautoconsole
在KVM桌面运行
virt-manager 打开控制台,安装好系统
注意:语言一定要选英文,要不然下面扩容硬盘扩容不了
语言选择英文
选择主分区,分区只要根分区
2.2-1 可选配置操作
初始化配置
vi /etc/apt/sources.list 删除文件老的内容,改为下面
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
apt update
vi /etc/ssh/sshd_config 开启root账户远程
PermitRootLogin yes
PasswordAuthentication yes
systemctl restart sshd
2.2-2 必选配置操作
可选操作配置完成后,进行操作
apt install cloud-init -y
systemctl enable cloud-init
dpkg-reconfigure cloud-init 空格选择,只保留Ec2开头这个源即可
vi /etc/cloud/cloud.cfg
users:
- default
disable_root: false
cloud_init_modules:
- growpart
- resizefs
/sbin/shutdown -h now 关机
3、上传镜像到openstack,用网页版创建虚拟机
3.1 上传镜像
在KVM将文件传送到openstack-master的镜像目录
scp /tmp/centos.qcow2 root@192.168.116.135:/var/lib/glance/images/
openstack有2种上传镜像方式:
3.1-1 第一种 在master用命令行上传镜像
cd /var/lib/glance/images/
glance image-create --name "CentOS-7.2-Minimal-template" \
--file centos.qcow2 \
--disk-format qcow2 --container-format bare \
--visibility public
glance image-list 查看镜像列表
3.3-2 第二种 在master用网页方式上传镜像
KVM先用工具把/tmp/centos.qcow2 镜像放到能访问网页的主机上
打开网页,选择创建
在浏览找到自己存放镜像的目录
选择镜像格式为QCOW2,最小磁盘和最低内存使用KVM虚拟机创建时的配置
3.2 创建虚拟机硬件类型
在网页上选择创建实例类型
设置硬件
3.3 创建虚拟机
在项目里面选择创建实例
输入名字和选择域
选择安装的镜像源
选择实例类型,也就是虚拟机的硬件类型
有多个网络就选择多个网路,没有默认值就行,然后创建实例
确认状态为运行,表示虚拟机创建成功
查看URL访问系统
有配置hosts解析的直接点这里就可以看到
没有配hosts解析需要去master查看url,将域名替换为IP地址
master运行:
查看虚拟机的网页控制台
openstack console url show centos-7-1
将master.openstack改为master的IP地址
http://master.openstack:6080/vnc_auto.html?path=%3Ftoken%3D45df0978-ea2f-43ac-ba91-321edf46d6e0
查看分区是否扩容成功