第二章:环境设计和系统准备
理论:
本项目主要帮助读者掌握搭建 OpenStack 云计算平台的环境设计及系统准备,包括硬件基本需求,OpenStack 云计算平台的搭建所需的软件包,部署一个实际的 OpenStack 云计算平台拓扑结构,并在这个环境下进行系统安装基础工作。
1.项目需求分析
(1)基本概念
需求分析是指理解用户需求,就用户的功能需求与客户达成一致,并需要估计项目风险和评估项目代价,最终形成开发计划的一个复杂过程。在这个过程中,用户是处在主导地位的,需求分析工程师和项目经理要负责整理用户需求,为之后的项目设计打下基础。从广义上理解:需求分析包括需求的获取、分析、规格说明、变更、验证、管理等一系列需求工程。狭义上理解:需求分析指需求的分析、定义过程。
需求分析阶段结束后应该得到相应的需求分析报告。
(2)分析内容
需要分析的内容可以包含:公司应用需求、技术资金投入与生产效益、行业技术发展趋势,国家政策支持等。
(3)分析过程
需求分析阶段的工作,可以分为 4 个方面:问题识别、分析与综合、制订规格说明、评审。
(4)分析方法
需求分析的方法有很多。如原型化方法、结构化方法和动态分析法等。
2.系统架构设计
一个项目的系统架构设计一般是由系统架构设计师来负责完成的。对于系统架构设计师来说,其主要职责有如下 4 条。
(1)确认需求
在项目开发过程中,架构师是在需求规格说明书完成后介入的,需求规格说明书必须得到架构师的认可。架构师需要和分析人员反复交流,以保证自己完整并准确地理解用户
需求。
(2)系统分解
依据用户需求,架构师将系统整体分解为更小的子系统和组件,从而形成不同的逻辑层或服务。随后,架构师会确定各层的接口,层与层相互之间的关系。架构师不仅要对整个系统分层,进行“纵向”分解,还要对同一逻辑层分块,进行“横向”分解。
(3)技术选型
通过对系统的一系列的分解,架构师最终形成项目的整体架构。技术选择主要取决于项目架构。
架构师对产品和技术的选型仅仅限于评估,没有决定权,最终的决定权归项目经理。架构师提出的技术方案为项目经理提供了重要的参考信息,项目经理会对项目预算、人力资源和时间进度等实际情况进行权衡,最终进行确认。
(4)制定技术规格说明
在项目开发过程中,架构师是技术权威。他需要协调所有的开发人员,与开发人员一直保持沟通,始终保证开发者依照他的架构意图去实现各项功能。
架构师不仅要保持与开发者的沟通,也需要与项目经理、需求分析员,甚至最终用户保持沟通。所以,对于架构师来讲,不仅有技术方面的要求,还有人际交流方面的要求。
3.环境说明
① 若教学环境有足够的可供学生使用的服务器,则每组分配 2 台服务器进行练习。
② 若教学环境没有服务器,可使用 PC 代替,每组分配 2 台 PC 进行练习(每台 PC
支持 CPU 虚拟化,双网卡,最低 4GB 内存,最低 100GB 硬盘)。
③ 若教学环境可供学生使用的服务器数量不够,可将所有服务器组建一个云平台,每组
学生分配 2 台虚拟机进行练习(每台虚拟机配置双网卡,最低 4GB 内存,最低 100GB 硬盘)。
操作:
1: OpenStack环境拓扑图
2:环境基本描述及配置要求
创建两台虚拟机
环境要求:CentOS-7 及 XianDian-2.2
配置要求:一块硬盘(容量20G及以上),两块网卡,一块仅主机模式,一块NAT模式
3:重命名主机名第一台虚拟机(控制节点):control
第一台虚拟机(控制节点):control
hostnamectl set-hostname control
第二台虚拟机(实例节点):computer
hostnamectl set-hostname computer
4:配置网卡
控制节点:
仅主机网卡配置:
cd /etc/sysconfig/network-scripts/ifcfg-eno16777736
找到BOOTPROTO=dhcp改成BOOTPROTO=static
找到ONBOOT=no改成ONBOOT=yes
并在末尾添加:
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=114.114.114.144
NAT网卡配置
cd /etc/sysconfig/network-scripts/eno33554984
找到BOOTPROTO=dhcp改成BOOTPROTO=static
找到ONBOOT=no改成ONBOOT=yes
并在末尾添加:
IPADDR=192.168.128.10
NETMASK=255.255.255.0
GATEWAY=192.168.128.10
DNS1=114.114.114.114
配置好后重启网卡
service network restart
实例节点:同控制节点相同,注意IP别重复
5:修改配置文件配置域名解析
进入配置文件并在末尾添加:
vi /etc/hosts
192.168.128.10 control
192.168.128.20 computer
实例节点同控制节点相同
6:配置yum
首先要将1511和先电的iso文件上传到root目录下
删除所有默认yum源在创建一个本地yum源
rm -rf /etc/yum.repos.d/*
vi /etc/yum.repos.d/yum.repo
添加以下内容
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[openstack]
name=OpenStack
baseurl=file:///opt/iaas/iaas-repo
gpgcheck=0
enabled=1
创建挂载点文件
mkdir -p /opt/centos /opt/iaas/iaas-repo
挂载iso
echo "/root/CentOS-7-x86_64-DVD-1511.iso /opt/centos/ auto defaults 0 0
/root/XianDian-IaaS-v2.2.iso /opt/iaas/ auto defaults 0 0
" >> /etc/fstab
清理yum缓存并创建新的缓存
yum clean all
yum makecache
实例节点与控制节点一样
7:防火墙配置
关闭防火墙服务
systemctl stop firewalld
关闭防火墙开机自启
systemctl disable firewalld
关闭selinux
vi /etc/selinux/config
改SELINUX=enforcing为SELINUX=disabled
实例节点与控制节点相同
8:磁盘分区
关闭虚拟机添加一块20G的硬盘
打开虚拟机分区磁盘
[root@control ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xea6a6f15.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (20973568-41943039, default 20973568):
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039):
Using default value 41943039
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
格式化分好区的磁盘
[root@control ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@control ~]# mkfs.xfs /dev/sdb2
meta-data=/dev/sdb2 isize=256 agcount=4, agsize=655296 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=2621184, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
实例节点与控制节点相同
9:安装软件
下载文件包
yum install -y iaas-xiandian
配置文件(配置环境变量)
/etc/xiandian/openrc.sh
##--------------------system Config--------------------##
##--------------------系统配置--------------------##
##控制器服务器管理器IP。示例:x.x.x.x
HOST_IP=192.168.128.10 #控制节点的NAT网卡IP地址
##控制器服务器主机名。示例:control
HOST_NAME=control #控制节点主机名
##计算节点管理器IP。示例:x.x.x.x
HOST_IP_NODE=192.168.128.20 #实例节点NAT网卡IP地址
##计算节点主机名。示例:compute
HOST_NAME_NODE=computer #实例节点主机名
##--------------------Rabbit Config ------------------##
##rabbit的用户。示例:openstack
RABBIT_USER=openstack
##rabbit用户的密码。示例:000000
RABBIT_PASS=000000
##--------------------MySQL Config---------------------##
##--------------------MySQL配置---------------------##
##MySQL根用户的密码.示例:000000
DB_PASS=000000
##--------------------Keystone Config------------------##
##--------------------密钥配置------------------##
##密钥库管理员用户的密码。示例:000000
DOMAIN_NAME=demo #自定义(域)
ADMIN_PASS=000000 #用户密码
DEMO_PASS=000000
##Mysql密钥库用户的密码。示例:000000
KEYSTONE_DBPASS=000000
##--------------------Glance Config--------------------##
##--------------------浏览配置--------------------##
##Mysql glance用户的密码。 示例:000000
GLANCE_DBPASS=000000
##Keystore glance用户的密码。 示例:000000
GLANCE_PASS=000000
##--------------------Nova Config----------------------##
##Mysql nova 用户的密码 示例:000000
NOVA_DBPASS=000000
##Keystore nova 用户的密码。 示例:000000
NOVA_PASS=000000
##--------------------Neturon Config-------------------##
##--------------------Neturon配置-------------------##
##Mysql中子用户的密码。示例:000000
NEUTRON_DBPASS=000000
##密钥库中子用户的密码。示例:000000
NEUTRON_PASS=000000
##metadata secret for neutron. 示例:000000
METADATA_SECRET=000000
##外部网络接口。示例:eth1
INTERFACE_NAME=eno16777736 #仅主机模式的网卡名字
##Vlan网络的Vlan范围中的第一个Vlan ID。 示例:101
#minvlan=
##Vlan网络的Vlan范围中的最后一个Vlan ID。示例:200
#maxvlan=
##--------------------Cinder Config--------------------##
##Mysql cinder用户的密码。示例:000000
CINDER_DBPASS=000000
##Keystore cinder用户的密码。示例:000000
CINDER_PASS=000000
##Cinder Block Disk. example:md126p3
BLOCK_DISK=sdb1 #空白分区
##--------------------Trove Config--------------------##
##Mysql Trove 用户的密码。 示例:000000
TROVE_DBPASS=000000
##密钥存储库用户的密码。示例:000000
TROVE_PASS=000000
##--------------------Swift Config---------------------##
##--------------------Swift配置---------------------##
##密钥库swift用户的密码。 exmaple:000000
SWIFT_PASS=000000
##Swift的节点对象磁盘。示例:md126p4.
OBJECT_DISK=sdb2 #空白分区
##Swift存储网络的节点IP。示例.x.x.x.x
STORAGE_LOCAL_NET_IP=192.168.128.10 #控制节点的NAT网卡IP地址
##--------------------Heat Config----------------------##
##Mysql热用户的密码。示例:000000
HEAT_DBPASS=000000
##Keystore heat用户的密码。示例:000000
HEAT_PASS=000000
##--------------------Ceilometer Config----------------##
##Password for Mysql ceilometer user. exmaple:000000
CEILOMETER_DBPASS=000000
##Keystore ceilometer用户的密码。示例:000000
CEILOMETER_PASS=000000
##--------------------AODH Config----------------##
##--------------------AODH配置----------------##
##Mysql AODH用户的密码。示例:000000
AODH_DBPASS=000000
##密钥库AODH用户的密码。示例:000000
AODH_PASS=000000
10:部署脚本安装平台
初始化配置脚本
进入/usr/local/bin/执行脚本iaas-pre-host.sh
完成后重启两个设备:reboot
挂载iso镜像
mount /root/CentOS-7-x86_64-DVD-1511.iso /opt/centos/
mount /root/XianDian-IaaS-v2.2.iso /opt/iaas/
在家目录执行以下命令:
1:控制节点
iaas-install-mysql.sh
2:控制节点
iaas-install-keystone.sh
3:控制节点
iaas-install-glance.sh
4:控制节点
iaas-install-nova-controller.sh
实例节点
iaas-install-nova-compute.sh
5:控制节点
iaas-install-neutron-controller.sh
实例节点
iaas-install-neutron-compute.sh
6:控制节点
iaas-install-neutron-controller-gre.sh
注:此文件最后一行有错误需更改
vim /usr/local/bin/iaas-install-neutron-controller-gre.sh
改systemctl enabled neutron-lbaas-agent为systemctl enable neutron-lbaas-agent
改好后执行
systemctl enable neutron-lbaas-agent
systemctl start neutron-lbaas-agent
实例节点
iaas-install-neutron-compute-gre.sh
7:控制节点
iaas-install-dashboard.sh
8:控制节点
iaas-install-cinder-controller.sh
实例节点
iaas-install-cinder-compute.sh
9:控制节点
iaas-install-swift-controller.sh
实例节点
iaas-install-swift-compute.sh
10:控制节点
iaas-install-heat.sh
11:控制节点
iaas-install-ceilometer-controller.sh
实例节点
iaas-install-ceilometer-compute.sh
12:控制节点
iaas-install-alarm.sh
完成后进入web输入控制节点IP地址(NAT)并在后面添加/dashboard如:192.168.128.10/dashboard
出现登入页面后依次输入
域:demo 账号:admin密码:000000
第三章:认证服务
理论:
在OpenStack框架中,Keystone(OpenStack Identity Service)的功能是负责验证身份、校验服务规则和发布服务令牌的,它实现了OpenStack的Identity API。Keystone可分解为两个功能,即权限管理和服务目录。权限管理主要用于用户的管理授权。服务目录,类似一个服务总线,或者说是整个OpenStack框架的注册表。认证模块提供API服务、 token 令牌机制、服务目录、规则和认证发布等功能。
1.相关概念
(1)认证(Authentication)。
认证是确认允许一个用户访问的进程。为了确认请求,OpenStack Identity会为访问用户提供证书,起初这些证书是用户名和密码,或用户名和API key。当OpenStack Identity平台构建完毕,系统会创建_member_、admin两个用户权限,在系统中,_member_表示系统的普通用户的权限,拥有系统的正常使用和对当前项目的管理权限。admin角色是代表系统的管理员身份,对系统有绝对的管理权限。
2.认证服务流程
用户请求云主机的流程涉及认证Keystone服务、计算Nova服务、镜像Glance服务,在服务流程中,令牌(Token)作为流程认证传递,具体服务申请认证机制流程,如图:
操作:(任务一)
1.配置Keystone应用环境
Keystone服务安装完毕,可以通过请求身份令牌来验证服务
openstack --os-project-name admin --os-domain-name demo --os-username admin --os-password 000000 --os-auth-url http://controller:35357/v3 token issue
2.管理认证用户
(1)创建用户
此命令创建了一个名字叫alice的用户,密码是mypassword123,邮箱是123@163.com
openstack user create alice --password mypassword123 --email 123@163.com --domain demo
创建用户命令的格式
openstack user create [--domain <domain>]
[--password <password>]
[--email <email-address>]
[--enable | --disable]
注:如发生以下情况报错
可以用此命令解决
source /etc/keystone/admin-openrc.sh
(2)创建项目
一个项目就是一个项目、团队或组织,当请求OpenStack服务时,你必须定义一个项目。例如,查询计算服务正在运行的云主机实例列表。
创建一个名为“acme”项目。
openstack project create --domain demo acme
创建项目的命令格式
openstack project create [--domain <domain>]
[--description <description>]
[--enable | --disable]
<project-name>
(3)创建角色
角色限定了用户的操作权限。例如,创建一个角色“compute-user”。
openstack role create compute-user
创建角色的命令格式
openstack role create <name>
(4)绑定用户和项目权限
添加的用户需要分配一定的权限,这就需要把用户关联绑定到对应的项目和角色。例如,给用户“alice”分配“acme”项目下的“compute-user”角色,命令如下。
openstack role add --user alice --project acme compute-user
绑定用户和项目权限的命令格式
openstack role add --user <user> --project <project> <role>
(5)图形化界面操作
以管理员身份登录到dashboard,进入“身份管理/项目”,可以看到项目(项目)列表,如图
操作(任务二)
1:创建项目
(1)通过图形化界面创建一个叫RD_Dept的项目
(2)通过命令行界面创建一个叫BS_Dept的项目
openstack project create "BS_Dept" --domain demo --description 业务部门
(3)通过脚本创建一个叫IT_Dept的项目
./Keystone-manage-project.sh
脚本内容
#!/bin/bash
if [ -f "/etc/keystone/admin-openrc.sh" ];then
source /etc/keystone/admin-openrc.sh
else
env_path=`find / -name admin-openrc.sh`
source $env_path
fi
echo -e "\033[31mPlease Input new project name : eg (openstack)\033[0m "
read New_Project_Name
if [ ! -n "$New_Project_Name" ];then
echo -e "\033[31mProject Name Is Empty,Exit\033[0m "
exit 1
fi
echo -e