OpenStack概述、虚拟机部署OpenStack
一、openstack概述
OpenStack是一个由美国国家航空航天局(NASA)和Rackspace合作研发并发起的开源项目。其中Rackspace贡献了Swift, NASA贡献了Nova项目,这两个子项目发展到现在的大大小小十多个项目。其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。这些项目之间的关系是松耦合。可以独立的安装,启动和停止。
- 缺点是安装配置复杂;
- 优点是扩展性好,安全性高,不会存在单点故障。
总结:它是
- Rackspace和NASA共同发起的开源项目。
- 是一系列开源软件项目的组合。
- 是基础设施资源的系统管理平台。(TaaS)
- 以Apache许可证为授权
openstack的组成
整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。(这四个节点也可以安装在一台机器上,单机部署)
其中:
- 控制节点负责对其余节点的控制,包含虚拟机建立,迁移,网络分配,存储分配等等
- 计算节点负责虚拟机运行
- 网络节点负责对外网络与内网络之间的通信
- 存储节点负责对虚拟机的额外存储管理等等
控制节点
控制节点包括以下服务
①管理支持服务。包含MySQL与Rabbit MQ两个服务
②基础管理服务。包含Keystone,Glance,Nova,Neutron,Horizon五个服务
③扩展管理服务。包含Cinder,Swift,Trove,Heat,Centimeter五个服务
网络节点架构
网络节点仅包含Neutron服务
Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等
网络节点包含三个网络端口
- eth0:用于与控制节点进行通信
- eth1:用于与除了控制节点之外的计算/存储节点之间的通信
- eth2:用于外部的虚拟机与相应网络之间的通信
计算节点架构
计算节点包含Nova,Neutron,Telemeter三个服务
1)基础服务
Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务
Neutron:提供计算节点与网络节点之间的通信服务
2)扩展服务
Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务
计算节点包含最少两个网络端口
- eth0:与控制节点进行通信,受控制节点统一调配
- eth1:与网络节点,存储节点进行通信
存储节点架构
存储节点包含Cinder,Swift等服务
Cinder:块存储服务,提供相应的块存储,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等等
Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件
存储节点包含最少两个网络接口
- eth0:与控制节点进行通信,接受控制节点任务,受控制节点统一调配
- eth1:与计算/网络节点进行通信,完成控制节点下发的各类任务
Openstack结构图
openstack主要组件:
- Horizon(管理控制台)。用于管理Openstack各种服务的、基于web的管理接口。
- Keystone(身份管理服务)。为访问openstack各组件提供认证和授权功能。授权方式有两种(基于用户名密码、基于令牌)。
- Nova(计算服务)。负责创建,调度,销毁云主机。
- Glance(镜像服务)。提供虚拟机镜像的存储、查询和检索服务。
- Cinder(块存储)。快速管理所有的块存储设备,为VM服务。
- Swift(对象存储)。提供高可用分布式对象存储服务。
- Neutron(网络服务)。 提供云计算环境下的虚拟网络功能。SDN(软件定义网络)
“对象存储服务”和“块存储服务”区别:
- 块存储服务:是本地的,它只能挂靠在VM上使用
- 对象存储服务:主要存取分布式对象,在任意地方都可以发起请求去存储对象。
二、openstack部署
环境准备
步骤1:配置yum仓库(真实机上操作)
创建3个光盘的挂载目录:
# mkdir /var/ftp/system
# mkdir /var/ftp/extras
# mkdir /var/ftp/HEL7OSP
开机自动挂载:
# vim /etc/fstab
末尾添加:
/iso/RHEL7OSP-10.iso /var/ftp/HEL7OSP iso9660 defaults 0 0
/iso/CentOS7-1708.iso /var/ftp/system iso9660 defaults 0 0
/iso/RHEL7-extras.iso /var/ftp/extras iso9660 defaults 0 0
# mount –a
创建yum源配置文件(local.repo):
注:仅第一个源(系统源)为gpgcheck=1需要导入公钥,其他的都是gpgcheck=0
# vim /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/system"
enabled=1
gpgcheck=1
[local_extras]
name=extras
baseurl="ftp://192.168.1.254/extras"
enabled=1
gpgcheck=0
[1local_devtools-rpms]
name=devtools-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0
[2local_optools-rpms]
name=optools-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-openstack-10-optools-rpms"
enabled=1
gpgcheck=0
[3local_rpms]
name=rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-openstack-10-rpms"
enabled=1
gpgcheck=0
[4local_tools-rpms]
name=tools-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-openstack-10-tools-rpms"
enabled=1
gpgcheck=0
[5local_mon-rpms]
name=mon-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-rhceph-2-mon-rpms"
enabled=1
gpgcheck=0
[6local_osd-rpms]
name=osd-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-rhceph-2-osd-rpms"
enabled=1
gpgcheck=0
[7local_rhceph-2-tools-rpms]
name=rhceph-2-tools-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-rhceph-2-tools-rpms"
enabled=1
gpgcheck=0
[8local_agent-rpms]
name=agent-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-rhscon-2-agent-rpms"
enabled=1
gpgcheck=0
[9local_installer-rpms]
name=installer-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-rhscon-2-installer-rpms"
enabled=1
gpgcheck=0
[10local_rhscon-2-main-rpms]
name=rhscon-2-main-rpms
baseurl="ftp://192.168.1.254/HEL7OSP/rhel-7-server-rhscon-2-main-rpms"
enabled=1
gpgcheck=0
检查:
# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识 源名称 状态
10local_rhscon-2-main-rpms rhscon-2-main-rpms 29
1local_devtools-rpms devtools-rpms 3
2local_optools-rpms optools-rpms 99
3local_rpms rpms 680
4local_tools-rpms tools-rpms 84
5local_mon-rpms mon-rpms 41
6local_osd-rpms osd-rpms 28
7local_rhceph-2-tools-rpms rhceph-2-tools-rpms 35
8local_agent-rpms agent-rpms 19
9local_installer-rpms installer-rpms 46
local_extras extras 76
local_repo CentOS-7 - Base 9,591
repolist: 10,731
步骤2:准备虚拟机(真实机上操作)
创建第一台虚拟机(openstack)
创建XML配置文件(openstack.xml):
# cd /etc/libvirt/qemu/
# cp node1.xml openstack.xml //拷贝一份做修改
# vim openstack.xml //修改名称、内存、cpu数量、储存盘,并删除UUID、Address、MAC等所有字段行。
<name>openstack</name>
<memory unit='GB'>9</memory>
<currentMemory unit='GB'>9</currentMemory>
<vcpu placement='static'>4</vcpu>
<source file='/var/lib/libvirt/images/openstack.img'/>
...
导入虚拟机:
# cd /etc/libvirt/qemu/ //注意目录
# virsh define openstack.xml
定义域 openstack(从 openstack.xml)
创建50G磁盘(openstack.img):
# cd /var/lib/libvirt/images/
# qemu-img create -f qcow2 -b node.img openstack.img 50G //以node.img为后端盘
停掉真实机多余的虚拟网络:
//注意:只保留private1和vbr。其他虚拟网络停掉。(命令:# virsh net-destroy public1)
[root@room9pc01 images]# virsh net-list //查看虚拟网络
名称 状态 自动开始 持久
----------------------------------------------------------
private1 活动 是 是
vbr 活动 是 是
相关命令:
//virsh list [--all] //列出所有虚拟机
//virsh net-list [--all] //列出所有虚拟网络
//virsh nodeinfo //查看KVM节点信息
//virsh dominfo 虚拟机名 //查看指定虚拟机信息
虚拟网络管理命令:(# virsh help | grep net)
# virsh net-info private2 //查看网络信息
# virsh net-autostart private2 //开机自启
# virsh net-autostart --disable private2 //取消开机自启
编辑XML,再添加一个网卡:
[root@room9pc01 qemu]# virsh edit openstack
拷贝原先的网卡配置,粘贴修改为:
<interface type='bridge'>
<source bridge='private1'/>
<model type='virtio'/>
</interface>
运行虚拟机openstack:
[root@room9pc01 qemu]# virsh start openstack //start(开启)、shutdown(关闭)、reboot(重启)、destroy(强制关闭)、autostart(开机自启)
域 openstack 已开始
[root@room9pc01 qemu]# virsh console openstack //注:按 ctrl+] 组合键可退出virsh console
//上两条命令可换为一条 # virsh start --console openstack
系统引导完成后用root用户登录。
配置静态IP:(eth0和eth1)
配置eth0:
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254" //注意:GATEWAY 曾拼错成:GATAWAY
配置eth1:
[root@localhost ~]# ifconfig -a //eth1未激活
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@localhost network-scripts]# vim ifcfg-eth1
# Generated by dracut initrd
DEVICE="eth1"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.4.10"
NETMASK="255.255.255.0"
//删除网关GATEWAY一行
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
扩容磁盘:
[root@localhost ~]# lsblk
[root@localhost ~]# df -h
[root@localhost ~]# growpart /dev/vda 1
CHANGED: partition=1 start=2048 old: size=4192256 end=4194304 new: size=104855519,end=104857567
若报错:unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]
则:# LANG=en_US.UTF-8
[root@localhost ~]# xfs_growfs /
meta-data=/dev/vda1 isize=512 agcount=4, agsize=131008 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524032, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524032 to 13106939
[root@localhost ~]# df -h
配置虚拟机Yum源:
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# rm -rf * //删除原先的yum源
真实机:(scp拷贝yum配置文件到虚拟机)
[root@room9pc01 qemu]# scp /etc/yum.repos.d/local.repo 192.168.1.10:/etc/yum.repos.d/
local.repo里配置了3个光盘,共12个源。
注意: 若ssh报错。 真实机 [root@room9pc01 ~]# > /root/.ssh/known_hosts
[root@localhost ~]# yum repolist
...
repolist: 10,731 //注意:是10731个包。
配置DNS:
openstack需要DNS解析域名,为了简便,不单独搭DNS服务器。
[root@localhost ~]# vim /etc/hosts
添加:
192.168.1.10 openstack
[root@localhost ~]# ping openstack //ping通
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.1.254 //设置一个可用DNS(真机),配置文件只留此行。
[root@localhost ~]# hostname openstack
配置NTP服务:(真实机)
[root@room9pc01 ~]# yum -y install chrony
[root@room9pc01 ~]# vim /etc/chrony.conf
server ntp1.aliyun.com iburst
bindacqaddress 0.0.0.0
allow 0/0 //允许所有人使用我的时间服务器
cmdallow 127.0.0.1 //控制指令
[root@room9pc01 ~]# systemctl restart chronyd
[root@room9pc01 ~]# netstat -antup | grep chronyd
[root@room9pc01 qemu]# chronyc sources -v
^* 120.25.115.20 2 6 17 6 +287us[+2429us] +/- 13ms
//出现*号代表NTP时间可用
步骤3 :部署openstack
1. 安装依赖包(5个)
[root@localhost ~]# yum -y install qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools
(装94个包)
2. 安装packstack
[root@localhost ~]# yum -y install openstack-packstack
(77个包)
另外部署好第2台虚拟机:
192.168.1.11 (主机名:nova01)
2 CPU, 6G 内存
2 网卡(192.168.1.11和192.168.4.11(无网关))
50G 硬盘
(nova01只装上述依赖包,不装packstack。)
安装依赖包时报错与解决:
# yum -y install qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools
.......
错误:软件包:gnutls-dane-3.3.26-9.el7.x86_64 (local_repo)
需要:gnutls(x86-64) = 3.3.26-9.el7
已安装: gnutls-3.3.29-8.el7.x86_64 (@base)
gnutls(x86-64) = 3.3.29-8.el7
可用: gnutls-3.3.26-9.el7.x86_64 (local_repo)
gnutls(x86-64) = 3.3.26-9.el7
错误:软件包:gnutls-utils-3.3.26-9.el7.x86_64 (local_repo)
需要:gnutls(x86-64) = 3.3.26-9.el7
已安装: gnutls-3.3.29-8.el7.x86_64 (@base)
gnutls(x86-64) = 3.3.29-8.el7
可用: gnutls-3.3.26-9.el7.x86_64 (local_repo)
gnutls(x86-64) = 3.3.26-9.el7
您可以尝试添加 --skip-broken 选项来解决该问题
您可以尝试执行:rpm -Va --nofiles --nodigest
[root@nova01 ~]# yum -y remove gnutls
[root@localhost ~]# yum -y install qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools (94个包)
3.修改openstack和nova01的/etc/hosts文件:
[root@nova01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10 openstack
192.168.1.11 nova01
注意:保证openstack和nova01两台虚拟机相互ping通
4.生成应答文件:
[root@openstack ~]# packstack --gen-answer-file=answer.ini //生成应答文件
Packstack changed given value to required value /root/.ssh/id_rsa.pub
[root@openstack ~]# vim answer.ini //修改应答文件
:42
CONFIG_SWIFT_INSTALL=n
:75
CONFIG_NTP_SERVERS=192.168.1.254
:840
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan
:876
CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5
:910
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex
:921
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
:936
CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1
:1179
CONFIG_PROVISION_DEMO=n
5.检查openstack环境部署
注意:
- 前4条必须检查
- 如果自己创建了硬盘,检查第5条
- 如果用的公有源,检查第6条
- 第7条检查是否安装了5个依赖包
- 第8条检查NTP、检查openstak和nova01两个域名是否能ping通。 # chronyc sources -v
易错: yum源为12个,共10731个包。
[root@nova01 ~]# ls /etc/yum.repos.d/
local.repo
[root@nova01 ~]# yum repolist
repolist: 10,731
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
6. 开始安装openstack
[root@openstack ~]# packstack --answer-file=answer.ini //注意:40min内未安装好可能是出错
Welcome to the Packstack setup utility
The installation log file is available at: /var/tmp/packstack/20181220-172102-yOkgtv/openstack-setup.log
Installing:
Clean Up [ DONE ]
Discovering ip protocol version [ DONE ]
Setting up ssh keys [ DONE ]
Preparing servers [ DONE ]
......
Testing if puppet apply is finished: 192.168.1.10_controller.pp [ - ]
报错:
ERROR : Error appeared during Puppet run: 192.168.1.10_controller.pp
Error: Execution of '/usr/bin/yum -d 0 -e 0 -y install openstack-selinux' returned 1: Error: Package: policycoreutils-python-2.5-17.1.el7.x86_64 (local_repo)
You will find full trace in log /var/tmp/packstack/20181220-174539-d8_hsH/manifests/192.168.1.10_controller.pp.log
无法解决。。。重做openstack虚拟机!!确保yum准确。
重装openstack虚拟机后,20:58开始执行安装。
然后漫长的等待。。。21:22结束
......
Applying Puppet manifests [ DONE ]
Finalizing [ DONE ]
**** Installation completed successfully ******
Additional information:
* File /root/keystonerc_admin has been created on OpenStack client host 192.168.1.10. To use the command line tools you need to source the file.
* To access the OpenStack Dashboard browse to http://192.168.1.10/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
* The installation log file is available at: /var/tmp/packstack/20181220-205659-nFL4NL/openstack-setup.log
* The generated manifests are available at: /var/tmp/packstack/20181220-205659-nFL4NL/manifests
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
网络配置
[root@openstack ~]# cd /etc/sysconfig/network-scripts/ifcfg-br-ex
[root@openstack network-scripts]# cat ifcfg-br-ex
ONBOOT="yes"
NM_CONTROLLED="no"
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
[root@openstack network-scripts]# cat ifcfg-eth0
DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none
验证OVS
[root@openstack ~]# ovs-vsctl show
Horizon配置
【下午第30min】
[root@openstack ~]# cd /etc/httpd/conf.d/
[root@openstack conf.d]# vim 15-horizon_vhost.conf
插入到第36行:
WSGIApplicationGroup %{GLOBAL}
[root@openstack conf.d]# apachectl graceful //重新载入Apache配置文件
浏览器访问 :http://192.168.1.10
[root@openstack conf.d]# cd
[root@openstack ~]# cat keystonerc_admin
unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD=3eb18093bf024e7c
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
用上面的用户名密码登录。