OpenStack概述、虚拟机部署OpenStack

 

一、openstack概述

OpenStack是一个由美国国家航空航天局(NASA)和Rackspace合作研发并发起的开源项目。其中Rackspace贡献了Swift, NASA贡献了Nova项目,这两个子项目发展到现在的大大小小十多个项目。其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。这些项目之间的关系是松耦合。可以独立的安装,启动和停止。

  • 缺点是安装配置复杂;
  • 优点是扩展性好,安全性高,不会存在单点故障。

总结:它是

  1. Rackspace和NASA共同发起的开源项目。
  2. 是一系列开源软件项目的组合。
  3. 是基础设施资源的系统管理平台。(TaaS)
  4. 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

用上面的用户名密码登录。

 

posted on 2019-01-06 23:00  iouwenbo  阅读(2075)  评论(0编辑  收藏  举报

导航