前言

这部分基于前面部署好服务来创建我们的第一个VM实例。

一、创建第一个VM实例

1. 创建虚拟网络

# 切换admin用户
source openstack-admin.sh
# 创建一个名为provider的网络,网络类型为external
openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider
# 验证
openstack network list

参数说明:
–share:允许所有项目都可以使用该网络;
–external:定义连通外部的虚拟网络;
–provider-physical-network:指定物理网络的提供者,由ml2_conf.ini文件的flat_networks确定;
–provider-network-type flat:映射到虚拟主机的网卡eth0,由linuxbridge_agent.ini文件的physical_interface_mappings确定;

2. 创建子网

# 基于provider网络创建子网
openstack subnet create --network provider --allocation-pool start=192.168.88.100,end=192.168.88.120 --dns-nameserver 223.5.5.5 --gateway 192.168.88.2 --subnet-range 192.168.88.0/24 provider
# 验证
openstack subnet list

参数说明:
–network:指定网络名称,表示该子网用在哪个网段;
–allocation-pool:指定分配的地址池,start设定起始地址,end设置结束地址;
–dns-nameserver:指定域名服务器,可以用8.8.4.4(google),223.5.5.5(阿里云)等;
–gateway:指定网关,设定宿主机的网络网关;
–subnet-range:指定子网范围;

3. 创建VM实例规格

# 创建一个名为m1.nano的flavor
openstack flavor create --id 0 --vcpus 1 --ram 1024 --disk 10 m1.nano
# 验证
openstack flavor list

参数说明:
– id:VM实例ID;
–vcpus:cpu数量;
–ram:内存数量,单位Mb;
–disk:磁盘空间大小,单位Gb;

4. 配置密钥

# 切换demo用户
source openstack-demo.sh
# 生成密钥
ssh-keygen -q -N ""
# 查看生成的密钥文件
ls ~/.ssh/
# 上传密钥
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
# 检查密钥对
openstack keypair list

5. 添加安全组

# ping规则
openstack security group rule create --proto icmp default
# ssh规则
openstack security group rule create --proto tcp --dst-port 22 default

6. 创建虚拟机实例

# 创建一个名为provider-instance的VM实例
openstack server create --flavor m1.nano --image cirros --nic net-id=d75d1e11-0639-4b63-a463-2e6e4ae0efb3 --security-group default --key-name mykey provider-instance

参数说明:
–flavor:设定主机规格;
–image:设定虚拟机使用的镜像文件;
–nic:设定虚拟网卡使用的网络,net-id可通过openstack network list获得;
–security-group:设定虚拟机的安全组;
–key-name:设定虚拟机使用的秘钥对名称;

执行完上面命令后,可通过openstack server list命令检查是否创建成功。如果创建失败,可以在compute节点上查看nova-compute日志。

egrep ERROR /var/log/nova/nova-compute.log

7. 访问虚拟机

首先要先获取虚拟机的访问地址。

openstack console url show provider-instance

然后将地址复制到浏览器地址栏上,然后输入:

用户名:cirros 
密码:gocubsgo

也可以直接在终端里面通过ssh命令直接访问。比如:

ssh cirros@192.168.88.110

二、可视化界面部署

1. Horizon组件介绍

Horizon是OpenStack中用于管理、控制OpenStack服务的Web控制面板,通过Horizon提供的DashBoard,用户可以通过图形化的界面管理OpenStack的所有云计算资源。总之,OpenStack中所有命令行能实现的功能,都能在Horizon提供的Dashboard界面上实现其功能。所以Horizon是OpenStack各个服务项目与用户进行交互的统一管理界面。Horizon一般是以Web形式提供服务的,和OpenStack的keystone组件关系最好,可以选择性的支持其他所有的组件。

2. 组件部署

首先安装openstack-dashboard软件。

yum install -y openstack-dashboard --nogpgchec

安装完成后,修改horizon配置文件:

cp /etc/openstack-dashboard/local_settings{,.bak}
vim /etc/openstack-dashboard/local_settings

# 配置 horizon 允许登录的主机
ALLOWED_HOSTS = ['*',]

# 配置 horizon 的 api 版本信息
OPENSTACK_API_VERSIONS = {
  "identity": 3,
  "image": 2,
  "compute": 2,
}

# 开启域名支持功能
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

# 使用默认的域名
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

# 会话信息配置
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': '192.168.88.14:11211',
  },
}

# 配置认证的 keystone 地址
OPENSTACK_HOST = "192.168.88.14"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

# 配置登录 horizon 的用户所在的角色组
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

# 配置网络信息
OPENSTACK_NEUTRON_NETWORK = {
  'enable_router': False,
  'enable_quotas': False,
  'enable_ipv6': False,
  'enable_distributed_router': False,
  'enable_ha_router': False,
  'enable_fip_topology_check': False,
  'enable_lb': False,
  'enable_firewall': False,
  'enable_vpn': False,
}

# 设置时区信息
TIME_ZONE = "Asia/Shanghai"

配置完horizon后,还需要配置dashboard。

vim /etc/httpd/conf.d/openstack-dashboard.conf

# 增加一条配置
WSGIApplicationGroup %{GLOBAL}

完成上面步骤后,重启一下httpd和memcached服务。

systemctl restart httpd memcached
systemctl status httpd memcached

服务重启成功后,在浏览器上输入192.168.88.14/dashboard,然后输入用户登录信息即可。

输入域:Default(默认)
用户名:admin|demo
密码:admin|demo

3. 登录问题

  • 问题一:dashboard登录出现404。
cd /usr/share/openstack-dashboard

# 1.将web信息写入到openstack-dashboard.conf文件
python manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf

# 2.将Location节点的“/”修改为“/dashboard” 
vim /etc/httpd/conf.d/openstack-dashboard.conf
<Location "/dashboard">
    Require all granted
</Location>

# 3.建立策略文件的软链接
ln -s /etc/openstack-dashboard /usr/share/openstack-dashboard/openstack_dashboard/conf

# 4.重启httpd服务
systemctl restart httpd
  • 问题二:无法访问身份管理。
# 1.找到WEBROOT='/' ,改为WEBROOT='/dashboard'
vim /usr/share/openstack-dashboard/openstack_dashboard/defaults.py
vim /usr/share/openstack-dashboard/openstack_dashboard/test/settings.py
vim /usr/share/openstack-dashboard/static/dashboard/js/xxxxxx.js

# 2.修改openstack-dashboard.conf配置
vim /etc/httpd/conf.d/openstack-dashboard.conf
WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
Alias /dashboard/static /usr/share/openstack-dashboard/static

# 3.重启httpd服务
systemctl restart httpd

总结

这部分介绍了如何创建一个VM实例,以及完成dashborad管理界面的配置。接下来介绍Openstack存储组件的部署。