Openstack是一套IaaS解决方案,是一个开源的云计算管理平台,以Apache许可证为授权
基础管理服务包含Keystone,Cinder、Glance,Nova,Neutron,Horizon六个服务
Horizon
– 用于管理Openstack各种服务的、基于web的管理接口
– 通过图形界面实现创建用户、管理网络、启劢实例等操作

Keystone
– 为其他服务提供认证和授权的集中身份管理服务
– 也提供了集中的目录服务
– 支持多种身份认证模式,如密码认证、令牌认证、以及AWS(亚马逊Web服务)登陆
– 为用户和其他服务提供了SSO认证服务
Glance
– 扮演虚拟机镜像注册的角色
– 允许用户为直接存储拷贝服务器镜像
– 这些镜像可以用于新建虚拟机的模板

Cinder
– 为虚拟机管理存储卷的服务
– 为运行在Nova中的实例提供永久的块存储
– 可以通过快照迚行数据备份
– 经常应用在实例存储环境中,如数据库文件

Nova
– 在节点上用于管理虚拟机的服务
– Nova是一个分布式的服务,能够与Keystone交互实现认证,与Glance交互实现镜像管理
– Nova被设计成在标准硬件上能够迚行水平扩展
– 启劢实例时,如果有则需要下载镜像

Neutron
– 一种软件定义网络服务
– 用于创建网络、子网、路由器、管理浮劢IP地址
– 可以实现虚拟交换机、虚拟路由器
– 可用于在项目中创建VPN
Swift:对象存储,实现数据的存储和共享

下面我们搭建一台openstack简易平台
环境:在真机上部署DNS解析服务器和NTP时间同步服务器

]# cat /etc/named.conf 
options {
        listen-on port 53 {192.168.4.254;};
        //listen-on-v6 port 53 {::1;};
        allow-query {any;};
	directory "/var/named";

	forwarders  { 114.114.114.114; };
         dnssec-enable no;                           //dnssec,数据安全认证
         dnssec-validation no;      

};
]# systemctl restart named
]#vim /etc/chrony.conf
server ntp.aliyun.com iburst                        //同步的时间服务器地址
bindacqaddress 0.0.0.0                              //监听所有地址
allow 0/0                                           //允许所有地址同步
]# chronyc sources -v ntp.aliyun.com

配置yum源

]# ls /var/ftp/OSP                               //可以从关网上下载以下的软件包做网络yum源
docs                                      rhel-7-server-rhceph-2-osd-rpms
rhel-7-server-openstack-10-devtools-rpms  rhel-7-server-rhceph-2-tools-rpms
rhel-7-server-openstack-10-optools-rpms   rhel-7-server-rhscon-2-agent-rpms
rhel-7-server-openstack-10-rpms           rhel-7-server-rhscon-2-installer-rpms
rhel-7-server-openstack-10-tools-rpms     rhel-7-server-rhscon-2-main-rpms
rhel-7-server-rhceph-2-mon-rpms           version.txt
]# ls /var/ftp/EXTRA
comps.xml  Packages  repodata  version.txt

安装两台虚拟机,要求如下:
1、虚拟机openstack: openstack nova,内存9.5G,硬盘 系统50G,添加一块硬盘20G,两块网卡:eth0:vbr eth1:provate1
2、虚拟机nova01: nova,内存5G,硬盘 系统50G,两块网卡:eth0:vbr eth1:provate1

]# qemu-img  create -b  node.qcow2 -f qcow2 openstack.img 50G
]# qemu-img  create -b  node.qcow2 -f qcow2 nova.img 50G   
]# cd /var/lib/libvirt/images/
]# qemu-img create -f qcow2 disk.img 20G               //创建一块空的磁盘镜像
]# virsh edit openstack
<name>openstack</name>                                 //名称修改为主机名
<memory unit='KiB'>9848000</memory>                    //内存大小修改为环境要求的9.5G大小
  <currentMemory unit='KiB'>9848000</currentMemory>   //同上
<devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
    <driver name='qemu' type='qcow2'/>
    <source file='/var/lib/libvirt/images/openstack.img'/>
    <target dev='vda' bus='virtio'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x        0'/>
      </disk>
     <disk type='file' device='disk'>              //由于需要添加磁盘,在配置文件中添加disk项即可,删除address内容
     <driver name='qemu' type='qcow2'/>
     <source file='/var/lib/libvirt/images/disk.img'/>
     <target dev='vdb' bus='virtio'/>
     </disk>
<interface type='bridge'>
      <mac address='52:54:00:25:28:9b'/>
      <source bridge='vbr'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='bridge'>    //由于需要添加网卡并加入不同的网络则需要添加interface项,删除address和mac地址,source bridge
                                    改为另一个网络名
      <source bridge='private1'/>
      <model type='virtio'/>
    </interface>

---------nova虚拟机作如上同样的操作-----------------------------------------------------

开启虚拟机,远程连接并修改ip为静态
]# virsh net-start private1
]# virsh start openstack
]# virsh console openstack
]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="yes"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"
]#cp /etc/sysconfig/network-scripts/ifcfg-eth0  >/etc/sysconfig/network-scripts/ifcfg-eth1
]#vim /etc/sysconfig/network-scripts/ifcfg-eth1
# Generated by dracut initrd
DEVICE="eth1"
ONBOOT="yes"
NM_CONTROLLED="yes"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.4.10"
NETMASK="255.255.255.0"
]#reboot
扩容操作
]# /usr/bin/growpart  /dev/vda 1 
]# /usr/sbin/xfs_growfs  /

------------------nova虚拟机上做同样的操作,ip改成11-----------------------------------------

部署Openstack:
1、在Openstack上创建卷组

]# yum -y install lvm2
]# pvcreate  /dev/vdb                  //创建物理卷
]# vgcreate cinder-volumes /dev/vdb    //创建卷组,名字必须是cinder-volumes
]# vgs                                  //查看卷组,这个卷组是给Cinder使用
  VG             #PV #LV #SN Attr   VSize   VFree  
  cinder-volumes   1   0   0 wz--n- <20.00g <20.00g                                              
]# yum install -y qemu-kvm libvirt-client libvirt-daemon >libvirt-daemon-driver-qemu python-setuptools
 //安装额外软件包

检查openstack环境部署****************************
• 是否禁用selinux
• 是否卸载firewalld和NetworkManager
• 检查配置主机网络参数(静态IP)
• 检查配置主机yum源(12个)
• 检查cinder-volumes卷组是否已经创建
• 检查公钥是否导入
• 查看相关软件包是否安装
• 检查NTP和DNS服务器是否可用

]# yum install -y openstack-packstack    //openstack批量安装管理工具
]# packstack --gen-answer-file=answer.ini  //生成应答文件,ini结尾的文件字有颜色
]# vim answer.ini  修改应答文件
CONFIG_DEFAULT_PASSWORD=redhat                 //在11行,设置一个默认密码,
CONFIG_SWIFT_INSTALL=n                         //在42行,对象存储是否安装,由于容量不够,这边写no     
CONFIG_NTP_SERVERS=192.168.1.254               //在75行,NTP服务器ip
CONFIG_CINDER_VOLUMES_CREATE=n                 //554行,不允许系统自己创建卷组
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan     //840行,网络格式
vxlan-隔离网络,划分不同网络    flat-扁平网络,共用外网
CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5       //876行,组播地址
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex 
//910行,设置虚拟交换机,用来打通次元,physnet1:br-ex:定一个有物理端口的虚拟交换机:虚拟交换机的名字
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0     //921行,将eth0网卡变成虚拟端口
CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1               //936行,隧道端口,用于两个域的虚拟机交换数据
CONFIG_PROVISION_DEMO=n                         //配置测试文件,1179行
]# packstack --answer-file=answer.ini           //执行应答文件
**** Installation completed successfully ******   //无报错即可

BUG—安装虽然没有报错,但默认无法打开 Horizon,这是一个软件的配置 BUG

]#vim /etc/httpd/conf.d/15-horizon_vhost.conf
## Server aliases                 //在配置文件中找到以下内容部分
ServerAlias 192.168.1.10
ServerAlias openstack.localhost
ServerAlias localhost
WSGIDaemonProcess apache group=apache processes=3 threads=10 user=apache
WSGIProcessGroup apache
WSGIApplicationGroup %{GLOBAL}      //添加此行内容解决bug
WSGIScriptAlias /dashboard 
"/usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi"
]# apachectl graceful                //重新载入配置文件 apachectl graceful
]# cat /root/keystonerc_admin     //登陆Horizon页面的账户和密码文放在此文件中
unset OS_SERVICE_TOKEN
    export OS_USERNAME=admin                 //账户名
    export OS_PASSWORD=202748b2dc544626      //密码
    export OS_AUTH_URL=http://192.168.1.10:5000/v2.0   
    export PS1='[\u@\h \W(keystone_admin)]\$ '
    export OS_TENANT_NAME=admin
    export OS_REGION_NAME=RegionOne
]# firefox http://192.168.1.10               //真机访问192.168.1.10
]# cat ifcfg-br-ex                           //配置eth0为外部OVS网桥的端口
ONBOOT="yes"
NM_CONTROLLED="yes"
IPADDR="192.168.1.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"
DEVICE=br-ex                              //设备名称
NAME=br-ex              
DEVICETYPE=ovs                   //设备类型
OVSBOOTPROTO="static"  
TYPE=OVSBridge                   //OVS外部网桥
]# ovs-vsctl show                  //查看ovs网桥配置
.........
Bridge br-int                   //内网
.........
Bridge br-ex                  //外网
.....
Port "eth0"                  //eth0作为网桥端口
Interface "eth0"
...........
]# ip -o addr show            //查看网卡信息

]# openstack --help //查看openstack命令帮助

以上步骤可以帮助我们搭建一个基本的openstack平台。