Openstack_ocata部署

2023-05-16

1.1 云计算概述

1.行业比较

  • 传统行业
    • 传统的应用正在变得越来越复杂,需要支持更多的用户,需要更强的计算能力,需要更加稳定安全等等,而为了支撑这些不断增长的需求,企业不得不去购买各类硬件设备(服务器,存储,带宽等等)和软件(数据库,中间件等等),另外还需要组建一个完整的运维团队来支持这些设备或软件的正常运作,这些维护工作就包括安装、配置、测试、运行、升级以及保证系统的安全等。便会发现支持这些应用的开销变得非常巨大,而且它们的费用会随着你应用的数量或规模的增加而不断提高。这也是为什么即使是在那些拥有很出色IT部门的大企业中,那些用户仍在不断抱怨他们所使用的系统难以满足他们的需求。而对于那些中小规模的企业,甚至个人创业者来说,创造软件产品的运维成本就更加难以承受了
  • 新行业
    • 所以,云计算,应运而生,更大、更快、更强,针对上述问题解决方案便是”云计算”!将应用部署到云端后,可以不必再关注那些令人头疼的硬件和软件问题,它们会由云服务提供商的专业团队去解决。使用的是共享的硬件,这意味着像使用一个工具一样去利用云服务(就像插上插座,你就能使用电一样简单),只需要按照你的需要来支付相应的费用,而关于软件的更新,资源的按需扩展都能自动完成

2.形象比喻

  • 水龙头观点论
    • 当需要的时候,扭开水龙头,水就来了,只需要操心交水费就是了
    • 当你需要用一个软件时,你不用跑去电脑城,打开应用商店,它就下载下来了,你只需要交钱就是了
    • 当你想看报纸的时候,你不用跑去报刊亭,只要打开头条新闻,新闻唾手可得
    • 当你想看书的时候,你不用跑去书城,只需要打开阅读软件,找到这样的一本书,在手机上阅读
    • 当你想听音乐的时候,你不用再跑去音像店苦苦找寻CD光碟,打开音乐软件,就能聆听音乐
    • 云计算,像在每个不同地区开设不同的自来水公司,没有地域限制,优秀的云软件服务商,向世界每个角落提供软件服务,就像天空上的云一样,不论你身处何方,只要你抬头,就能看见!
  • 共享单车-滴滴出行论
    • 出行需要用车,云计算或者云服务好比乘坐出租车或专车快车共享单车,随时需要随时用,按用量(路程)付费即可
    • 自己买车开车是混合云,车是自己的,出去付费停车或加油相当于部分使用公有云,而亚马逊或微软云在国内跟黑车差不多被政策限制
  • 一日三餐吃货论
    • 饿了要吃饭,在家里自己做饭属于自建私有云,需要建造厨房购买锅碗瓢盆柴米油盐等,吃完饭还需要自己刷锅洗碗等运维工作,费时费力;外面餐馆提供的就相当于公有云服务,按需胡吃海塞吃完结账抹嘴走人,餐馆后厨如何安排做菜顺序并加快出菜速度就是负载均衡和虚拟化概念;请厨师到家里上门做饭则属于典型的混合云,在资产安全的情况下有限使用公有云

3.”云计算”五大特点

1)大规模、分布式

“云”一般具有相当的规模,一些知名的云供应商如Google云计算、Amazon、IBM、微软、阿里等也都拥能拥有上百万级的服务器规模。而依靠这些分布式的服务器所构建起来的“云”能够为使用者提供前所未有的计算能力

2)虚拟化

云计算都会采用虚拟化技术,用户并不需要关注具体的硬件实体,只需要选择一家云服务提供商,注册一个账号,登陆到它们的云控制台,去购买和配置你需要的服务(比如 云服务器,云存储,CDN等等),再为你的应用做一些简单的配置之后,你就可以让你的应用对外服务了,这比传统的在企业的数据中心去部署一套应用要简单方便得多。而且你可以随时随地通过你的PC或移动设备来控制你的资源,这就好像是云服务商为每一个用户都提供了一个IDC(Internet Data Center)一样

3)高可用性和扩展性

知名的云计算供应商一般都会采用数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性。基于云服务的应用可以持续对外提供服务(7*24小时),另外“云”的规模可以动态伸缩,来满足应用和用户规模增长的需要

4)按需服务更加经济

用户可以根据自己的需要来购买服务,甚至可以按使用量来进行精确计费。这能大大节省IT成本,而资源的整体利用率也将得到明显的改善

5)安全

网络安全已经成为所有企业或个人创业者必须面对的问题,企业的IT团队或个人很难应对那些来自网络的恶意攻击,而使用云服务则可以借助更专业的安全团队来有效降低安全风险

结束语:关于"云计算"已经深深植入到我们生活中的点点滴滴,平时常用的那些APP或网站,基本都已经离不开"云计算"作为背后的强大服务支持,如剁手党爱恨交加的淘宝、京东,社交痴迷党的微信、微博等等。 越来越多的企业开始使用基于云的企业服务,生活因"云计算"正在发生着革命性的变革和改变!

4.云计算服务层次

IaaS(Infrastructure as a Service)基础设施即服务

消费者通过Internet可以从完善的计算机基础设施获得服务,如”硬件服务器租用”,有了IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用,节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用 一些大的IaaS公司包括Amazon、Microsoft、VMWare、Rackspace和Red Hat

PaaS(Platform as a Service)平台即服务

指将软件研发的平台作为一种服务,提交给用户,如”Java软件工程师的Tomcat”,某些时候也叫做中间件,你公司所有的开发都可以在这一层进行,节省了时间和资源;PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统,这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易,网页应用管理、应用设计、应用虚拟主机、存储、安全以及应用开发协作工具等 一些大的PaaS提供者有Google App Engine、Microsoft Azure、Force.com、Heroku、Engine Yard,最近兴起的公司有AppFog、Mendix和Standing Cloud

SaaS(Software as a Service)软件即服务

通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,如”Gmail”,生活每天接触的一层,大多是通过网页浏览器来接入,任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS,消费的服务完全是从网页如Netflix、MOG、Google Apps、Box.net、Dropbox或者苹果的iCloud那里进入这些分类,尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分 一些用作商务的SaaS应用包括Citrix的Go To Meeting、Cisco的WebEx、Salesforce的CRM、ADP、Workday和SuccessFactors

  • 如何理解IaaS、PaaS、SaaS?

我们把企业信息服务比做盖房子,传统还需自行购买,材料搭建房子,而laaS是根据建造的需要,向大家提供各种各样的砖头;接下来我们发现,一块砖一块砖的盖房子,效率太低了,这时候我们发明了预制件,在工厂里面,把墙面、楼板、立柱等等都预制好,到了现场直接组装,就可以完成建造,而这个提供预制件的服务就是PaaS,PaaS是资源提供方和最终使用方直接的过渡;SaaS做得更干脆,直接为我们提供一个完整的房子

回头再看SaaS为我们提供的房子,有可能是毛坯也有可能是精装,更有可能是能够根据我们的需要,自助变换户型、自助选择各种各样的装饰模块来装潢的产品三种房子代表三种不同的SaaS服务,你想要毛坯还是精装,或者是第三种自助服务? 现在可以忘掉房子的比喻,看下IaaS、PaaS、SaaS之间的区别

  • 私有云(公司自行部署云环境)、公有云(云服务提供商购买)、混合云(私有云+公有云)

    网上很流行的一种比喻:男人找个女友或老婆是自建私有云,单身约炮或者到娱乐场所消费是公有云服务,按需使用并可弹性扩容,已婚男人找二奶小蜜则属于混合云

1.2 OpenStack

1.OpenStack概述

OpenStack由美国国家航空航天局(NASA)和Rackspace合作研发,2010年7月以Apache 2.0许可证授权开源,OpenStack可以控制整个数据中心计算、存储和网络资源的大型资源池,OpenStack通过各种组件提供了基础设施即服务(IaaS)的解决方案 OpenStack项目是一个开源的云计算平台,旨在实现很简单、大规模可伸缩、功能丰富,来自世界各地云计算开发人员和技术人员共同创建OpenStack项目,OpenStack通过一组相关的服务提供一个基础设施即服务(IaaS)解决方案,每个服务提供了一个应用程序编程接口(API),促进了这种集成,根据需要可以安装部分或全部服务oss 500G

  • 下图描述了构成OpenStack架构的OpenStack服务

  • 下面的图显示了OpenStack服务之间的关系

在制定好的云系统平台上,用户在经 KeyStone 模块授权后(Provide Auth),通过 Horizon 或 RestAPI 模式创建虚拟机服务,创建过程包括了利用 Nova 模块创建虚拟机实例(VM Provision),该 VM 采用了 Glance 模块提供的镜像服务(Provide Image),然后用 Neutron 模块为新建的 VM 分配 IP 地址,把其纳入到虚拟网络中(Provide network connectivity),之后再通过 Cinder 模块创建的 Volume 为 VM 挂载存储块。整个过程都在 Cellometer 模块的资源监控下(Monitors),Cinder 产生的 Volume 和 Glance 提供的 Image 可以通过 Swift 的对象存储机制进行保存

通过以上解析我们可以看到 OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 、和 Neutron 四个核心模块完成的,相对四个辅助模块 Horizon、Cellometer、Keystone、Swift 提供的访问、监控、权限和对象存储功能

正如OpenStack概念架构图显示,OpenStack包含一些独立的部分,称作OpenStack服务,所有服务授权认证都是通过Identity服务,单个服务通过公共APIs与其他服务进行交互,特权管理员用户命令除外;在内部OpenStack服务是由几个进程组成,所有服务至少有一个API进程,用来监听API请求,预处理它们并传递它们到其他服务;除了Identity服务外,其他服务实际工作是由不同的进程完成 对于一个服务之间的进程通信,使用AMQP消息块,这些服务状态存储在一个数据库中,当部署和配置OpenStack云,可以选择不同的消息队列服务和数据库服务,如RabbitMQ、MySQL、MariaDB和SQLite 下面的图显示了大多数通用OpenStack云结构

2.OpenStack层

  • Keystone:认证管理
  • Nova:计算服务
  • Glance:虚拟镜像的注册与存储管理
  • Cinder:块存储
  • Swift:对象存储
  • Neutron:网络服务
  • Designate:DNS域名解析
  • Ironic:裸机部署
  • Ceilometer:计费服务
  • Horizon:Django开发的Web管理界面
  • Barbican:主机密钥管理
  • Heat:提供orchestration(对传统中间件高度自动化管理)服务
  • Magnum:提供容器服务
  • Sahara:提供大数据服务,可部署Hadoop、Spark群集
  • Solum:提供应用开发服务
  • Muarno:提供应用目录服务,类似App Store,将常用应用发布
  • Kolla:容器化所有OpenStack服务,便于OpenStack安装部署和升级

3.OpenStack最简单物理构架

1.3 OpenStack基础服务部署

主机系统ip网卡
controllerCentos 7 1611 64Bit192.168.1.10vmnet1(桥接)
computeCentos 7 1611 64Bit192.168.1.20vmnet1(桥接)

注:控制节点内存可设置小点,但计算节点内存越大越好(需建立实例)

1.环境准备(Controller)

[root@controller ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
//网卡类型为以太网
BOOTPROTO=static
//网卡设置为静态方式
DEVICE=ens32
//网卡名称
ONBOOT=yes
//开机自启该网卡
IPADDR=192.168.1.10
//IP地址配置
NETMASK=255.255.255.0
//子网掩码配置
[root@controller ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-ens35
[root@controller ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE=Ethernet
//网卡类型为以太网
BOOTPROTO=dhcp
//网卡设置为自动获取方式
DEVICE=ens35
//网卡名称
ONBOOT=yes
//开机自启该网卡
BOOTPROTO=dhcp
//网卡设置为自动获取方式
[root@controller ~]# systemctl stop firewalld.service
//停止防火墙服务
[root@controller ~]# systemctl disable firewalld.service
//将防火墙服务设置为开机禁用
[root@controller ~]# vi /etc/hostname
//编辑主机名
controller
//指定主机名
[root@controller ~]# vi /etc/hosts
192.168.1.10	controller
//指定控制节点对应信息
192.168.1.20	compute
//指定计算节点对应信息
[root@controller ~]# reboot
//重启

2.环境准备(Compute)

[root@compute ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
//网卡类型为以太网
BOOTPROTO=static
//网卡设置为静态方式
DEVICE=ens32
//网卡名称
ONBOOT=yes
//开机自启该网卡
IPADDR=192.168.1.20
//IP地址配置
NETMASK=255.255.255.0
//子网掩码配置
[root@compute ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-ens35
[root@compute ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE=Ethernet
//网卡类型为以太网
BOOTPROTO=dhcp
//网卡设置为自动获取方式
DEVICE=ens35
//网卡名称
ONBOOT=yes
//开机自启该网卡
[root@compute ~]# systemctl stop firewalld.service
//停止防火墙服务
[root@compute ~]# systemctl disable firewalld.service
//将防火墙服务设置为开机禁用
[root@compute ~]# vi /etc/hostname
//编辑主机名
compute
//指定主机名
[root@compute ~]# vi /etc/hosts
192.168.1.10	controller
//指定控制节点对应信息
192.168.1.20	compute
//指定计算节点对应信息
[root@compute ~]# reboot
//重启

3.安装配置NTP服务

Controller节点配置chrony

[root@controller ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/sysconfig/selinux
[root@controller ~]# setenforce 0
//临时允许所有SElinux操作
[root@controller ~]# rm -rf /etc/yum.repos.d/*
//删除默认自带YUM源
[root@controller ~]# vi /etc/yum.repos.d/local.repo
//自行新建本地YUM
[local]
//仓库名称定义
name=local
//标识名
baseurl=file:///mnt
//指定源文件所在位置(该处为光盘挂载点)
enabled=1
//启用该仓库
gpgcheck=0
//不验证软件包密钥
[root@controller ~]# mount /dev/cdrom /mnt/
//挂载光盘到/mnt/目录
[root@controller ~]# yum clean all && yum repolist
//清除YUM缓存并重新生成
[root@controller ~]# yum -y install vim wget
//下载必要工具
[root@controller ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
//下载官方在线源
[root@controller ~]# yum -y install chrony
//安装时间同步服务
[root@controller ~]# vim /etc/chrony.conf
7 server controller iburst
//将本地作为时间同步基准(默认网络时间)(数字代表行数)
[root@controller ~]# systemctl enable chronyd.service
//开机自启chronyd服务
[root@controller ~]# systemctl restart chronyd.service
//重启chronyd服务
[root@controller ~]# chronyc sources	
//查看chrony服务状态

Compute节点配置chrony

[root@compute ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/sysconfig/selinux
[root@compute ~]# setenforce 0
//临时允许所有SElinux操作
[root@compute ~]# rm -rf /etc/yum.repos.d/*
//删除默认自带YUM源
[root@compute ~]# scp root@192.168.1.10:/etc/yum.repos.d/* /etc/yum.repos.d/
[root@compute ~]# mount /dev/cdrom /mnt/				
//挂载光盘到/mnt/目录
[root@compute ~]# yum clean all && yum repolist
//清除YUM缓存并重新生成
[root@compute ~]# yum -y install vim wget chrony
//下载必要工具
[root@compute ~]# vim /etc/chrony.conf
7 server controller iburst
//将控制节点作为时间同步基准
[root@compute ~]# systemctl enable chronyd.service
//开机自启chronyd服务
[root@compute ~]# systemctl restart chronyd.service
//重启chronyd服务
[root@compute ~]# chronyc sources
//查看chrony服务状态

4.配置OpenStack YUM仓库(Controller)

[root@controller ~]# yum -y update && reboot
//更新系统所有软件包并重启
[root@controller ~]# yum -y install centos-release-openstack-ocata
//安装openstack源
[root@controller ~]# yum -y update
//再次检测更新
[root@controller ~]# yum -y install python-openstackclient
//安装openstack客户端

5.配置OpenStack YUM仓库(Compute)

[root@compute ~]# yum -y update && reboot
//更新系统所有软件包并重启
[root@compute ~]#yum -y install centos-release-openstack-ocata
//安装openstack源
[root@compute ~]#yum -y update
//再次检测更新

1.4 基础组件安装

1.安装Mariadb(Controller)

[root@controller ~]# yum -y install mariadb mariadb-server python2-PyMySQL
//安装Mariadb
[root@controller ~]# cp /usr/share/mariadb/my-medium.cnf /etc/my.cnf
//拷贝mysql模板配置文件
[root@controller ~]# vim /etc/my.cnf
41 default-storage-engine = innodb
//指定默认采用存储引擎
42 innodb_file_per_table
//独享表空间(每个表独立表空间)
43 collation-server = utf8_general_ci
//指定校对字符集
44 init-connect = 'SET NAMES utf8'
//指定连接字符集
45 character-set-server = utf8
//指定默认字符集
[root@controller ~]# systemctl enable mariadb.service
//将Mariadb服务设置为开机自启
[root@controller ~]# systemctl start mariadb.service
//启动Mariadb服务
[root@controller ~]# mysql_secure_installation
//执行安全初始化脚本,指定root密码

2.安装配置RabbitMQ(Controller)

消息队列,实现各组件通信

[root@controller ~]# yum -y install rabbitmq-server
//安装RabbitMQ服务
[root@controller ~]# systemctl enable rabbitmq-server.service
//开机自启rabbitmq-server服务
[root@controller ~]# systemctl start rabbitmq-server.service
//启动rabbitmq-server服务
[root@controller ~]# rabbitmqctl add_user openstack openstack
//新增RabbitMQ用户openstack,密码相同
[root@controller ~]# rabbitmqctl set_user_tags openstack administrator
//将openstack用户加入到管理员组
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
使用户openstack具有所有资源的配置、写、读权限以便管理其中的资源(必须敲)
[root@controller ~]# rabbitmqctl list_users
//列出当前RabbitMQ所有用户

3.安装Memcached(Controller)

缓存令牌到Memcached中,加快响应速度

[root@controller ~]# yum -y install memcached python-memcached
//安装Memcached服务
[root@controller ~]# vim /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,controller"
//指定Memcached监听主机
[root@controller ~]# systemctl enable memcached.service
//开机自启
[root@controller ~]# systemctl start memcached.service
//启动memcached服务

1.5 Keystone服务

  • Keystone采用两种授权方式
    • 基于用户名/密码
    • 基于令牌(Token)
  • Keystone提供以下三种服务
    • 令牌服务:含有授权用户额授权信息
    • 目录服务:含有用户合法操作的可用服务列表
    • 策略服务:利用Keystone具体指定用户或群组某些访问权限

1.Keystone名词

User

即用户,代表可以通过keystone进程访问的人或程序;Users通过认证信息(credentials凭证、密码、API Key等)进行验证 简单理解即拥有用户名,密码,邮箱等帐号信息的自然人

Tenant

即租户,它是各个服务中的一些可以访问的资源集合;租户可以理解为一个项目,团队或组织,你必须指定一个相应的租户(tenant)才可以申请OpenStack服务,例如指定以某租户申请Compute服务来查询当前运行的实例列表,则将收到的是该租户的运行实例列表,而无法看到其它租户的运行实例列表 Users默认总是绑定在某些Tenant上,一个租户可以或有个用户

Role

代表特定的租户中的用户的操作权限 注:可以理解租户为那些使用云环境的客户,这些客户可以是一个项目组、工作组、公司,这些客户中会建立不同的帐号(用户)及其对应的权限(角色)

Token

即令牌,访问资源的钥匙,它是通过Keystone验证后的返回值,在与其它服务交互中只需携带Token值即可;每个Token都有一个有效期,Token只在有效期内是有效

Service

即服务,如Nova、Glance、Switf等;根据(User、Tenant、Role)一个服务可以确认当前用户是否具有访问其资源的权限 但当一个User尝试访问其租户内的Service时,它必须知道这个Service是否存在以及如何访问这个Service,通常使用不同的名称表示不同的服务

Endpoint

翻译为”端点”,可理解为一个服务暴露出的访问点,如需访问一个服务,则必须知道它的endpoint;因此在Keystone中包含一个endpoint模板,该模板提供了所有存在服务的endpoint信息 endpoint模板包含一个URLs列表,列表中每个URL都对应一个服务实例的访问地址,并且具有public、private、admin三种权限;public url可以被全局访问,如http://compute.example.com,private url只能被局域网访问,如http://compute.example.local,而admin url只能被特定人群管理访问

各名词之间的关系

2.Keystone在OpenStack中的访问流程

3.部署Keystone服务

创建数据库并授权(Controller)

[root@controller ~]# mysql -u root -p
//登录MySQL数据库,密码
MariaDB [(none)]> create database keystone;
//创建keystone数据库
MariaDB [(none)]> grant all privileges on keystone.* to keystone@'localhost' identified by 'keystone';
MariaDB [(none)]> grant all privileges on keystone.* to keystone@'192.168.1.0/255.255.255.0' identified by 'keystone';
//新建keystone用户授予对keystone数据库拥有所有权限,密码设置为keystone

安装Keystone(Controller)

[root@controller ~]# yum -y install openstack-keystone httpd mod_wsgi
//安装keystone组件包
[root@controller ~]# cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
//将keystone配置文件备份
[root@controller ~]# vim /etc/keystone/keystone.conf
713 connection = mysql://keystone:keystone@controller/keystone
//配置数据库连接用户及密码,以及连接的数据库
675 provider = fernet
//配置令牌生成方式为fernet
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
//初始化身份认证服务的数据库(同步数据库),指定shell用keystone的身份执行指令,之所以要初始化,是因为python的orm对象关系映射,需要初始化来生成数据库表结构,orm(Object Relation Mapping)的缩写叫对象关系映射
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
//初始化Fernet_keys,生成token,创建了一个keystone用户与一个keystone组,并对这个用户和组授权,因为keystone是对其他组件认证的服务,那么它自己就合格么?所以它先要对自己进行一下认证

配置httpd(Controller)

[root@controller ~]# vim /etc/httpd/conf/httpd.conf
42 Listen 0.0.0.0:80
//设置监听IP及端口
95 ServerName controller
//设置当前服务器主机名
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
//将keystone的虚拟主机文件链接的http的配置目录下
[root@controller ~]# systemctl enable httpd.service
//开机自启httpd服务
[root@controller ~]# systemctl start httpd.service
//运行httpd

创建服务实体和API端点(Controller)

身份认证服务用于提供服务的目录和对应服务位置,因此所有添加到OpenStack环境中的服务在目录中都需一个service实体和API endpoints

[root@controller ~]# keystone-manage bootstrap --bootstrap-password admin \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
//引导身份服务,设置admin用户(管理用户)和密码
[root@controller ~]# export OS_USERNAME=admin
//配置管理员用户名
[root@controller ~]# export OS_PASSWORD=admin
//配置管理员密码
[root@controller ~]# export OS_PROJECT_NAME=admin
//配置项目名
[root@controller ~]# export OS_USER_DOMAIN_NAME=Default
//配置用户默认域
[root@controller ~]# export OS_PROJECT_DOMAIN_NAME=Default
//配置默认项目名
[root@controller ~]# export OS_AUTH_URL=http://controller:35357/v3
//配置管理员endpoint URL,以后的请求将往该URL提交,v3为keystone版本为3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3
//配置认证API版本为3

创建域、项目(租户)、用户和角色并把四个元素关联(Controller)

openstack中最大的资源集合就是域—>项目(租户)—>用户—>角色 因为keystone是一个独立的授权组件,因此后面每搭建一个新的服务都需要在keystone中执行四种操作:建项目、建用户 、建角色、做关联并且创建catalog

[root@controller ~]# openstack project create --domain default --description "Service Project" service
//为后续的服务创建统一的项目叫service

注:可让后面所有的服务(nova、glace等)公用一个项目service,都使用管理员角色admin (组件之间的通信都角色都是admin)

[root@controller ~]# openstack project create --domain default --description "Demo Project" demo
//创建无特权项目名为damo(可用于后面测试)

[root@controller ~]# openstack user create --domain default --password-prompt demo
//创建demo普通用户并设置密码(demo)

[root@controller ~]# openstack role create user
//创建user角色

[root@controller ~]# openstack role add --project demo --user demo user
//将demo用户添加到demo项目和user组中

验证(Controller)

出于安全考虑,关闭临时令牌认证机制

[root@controller ~]# vim /etc/keystone/keystone-paste.ini
63 [pipeline:public_api]
//检查项下是否有admin_token_auth,有则删除该项

68 [pipeline:admin_api]
//检查项下是否有admin_token_auth,有则删除该项

73 [pipeline:api_v3]
//检查项下是否有admin_token_auth,有则删除该项

[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
//重置OS_AUTH_URL和OS_PASSWORD环境变量
[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name default \
--os-user-domain-name default \
--os-project-name admin \
--os-username admin \
token issue

//管理员用户admin申请token(密码admin)

[root@controller ~]# openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name default \
--os-user-domain-name default \
--os-project-name demo \
--os-username demo \
token issue

//普通用户demo申请token(密码demo)

创建客户机环境OpenStack脚本(admin和demo用户的环境脚本)

[root@controller ~]# vim admin.sh
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
[root@controller ~]# vim demo.sh
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

使用source命令导入脚本里的环境变量以及查看keystone 认证详情

[root@controller ~]# source admin.sh
//执行admin脚本
[root@controller ~]# openstack token issue
//申请token

1.6 Glance镜像服务

1.Glance简介

Glance是OpenStack项目中的镜像服务,用于注册、登录和检索虚拟机镜像 Glance服务提供一个REST API,使其能够查询虚拟机镜像元数据和实际镜像;通过镜像服务提供的虚拟机镜像可以存储在不同的位置中

  • 镜像服务组件
    • Glance-API:接受最终用户或Nova对镜像的请求、检索和存储镜像的相关API调用
    • Glance-registry:存储、处理和检索有关镜像的元数据(如数据大小、类型等)
    • Database:存储镜像元数据,可支持多种数据库,较广泛采用mysql、sqlite

Glance支持的image格式

2.部署Glance服务

创建数据库并授权(Controller)

[root@controller ~]# mysql -u root -p
//登录MySQL数据库,密码
MariaDB [(none)]> create database glance;
//创建glance数据库
MariaDB [(none)]> grant all privileges on glance.* to glance@'localhost' identified by 'glance';
MariaDB [(none)]> grant all privileges on glance.* to glance@'192.168.1.0/255.255.255.0' identified by 'glance';
//新建glance用户授予对glance数据库拥有所有权限,密码设置为glance

创建用户(Controller)

[root@controller ~]# source admin.sh
//执行管理员身份脚本,获得管理访问身份
[root@controller ~]# openstack user create --domain default --password-prompt glance
//在"default"域中创建glance用户(密码glance)

[root@controller ~]# openstack role add --project service --user glance admin
//将glance用户添加到service项目和admin组中

创建服务实体和API端点(Controller)

[root@controller ~]# openstack service create --name glance --description "OpenStack image" image
//创建Glance服务实体

基于建立的服务实体,创建访问该实体的三个api端点

[root@controller ~]# openstack endpoint create --region RegionOne image public http://controller:9292
//创建API endpoint,专用于公网访问

[root@controller ~]# openstack endpoint create --region RegionOne image internal http://controller:9292
//创建API endpoint,专用于内网访问

[root@controller ~]# openstack endpoint create --region RegionOne image admin http://controller:9292
//创建API endpoint,专门处理admin访问

安装Glance(Controller)

[root@controller ~]# yum -y install openstack-glance
//安装glance
[root@controller ~]# mv /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
//备份源文件
[root@controller ~]# vim /etc/glance/glance-api.conf
[database]
connection = mysql+pymysql://glance:glance@controller/glance
//配置数据库连接用户及密码,以及连接的数据库
[keystone_authtoken]
auth_uri = http://controller:5000
//普通用户认证连接主机及端口
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
memcached_servers = controller:11211
//memcached的主机及端口
auth_type = password
//认证方式为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
project_name = service
//指定项目名
username = glance
//指定glance组件连接keystone组件用户名
password = glance
//指定glance组件连接keystone组件密码
[paste_deploy]
flavor = keystone
//指定验证组件为keystone
[glance_store]
stores = file,http
//指定glance组件存储支持类型
default_store = file
//指定默认存储方式为本地文件系统
filesystem_store_datadir = /var/lib/glance/images/
//指定镜像存储位置
[root@controller ~]# mv /etc/glance/glance-registry.conf /etc/glance/glance-registry.conf.bak
[root@controller ~]# vim /etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:glance@controller/glance
//配置数据库连接用户及密码,以及连接的数据库
[keystone_authtoken]
auth_uri = http://controller:5000
//普通用户认证连接主机及端口
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
memcached_servers = controller:11211
//memcached的主机及端口
auth_type = password
//认证方式为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
project_name = service
//指定项目名
username = glance
//指定glance组件连接keystone组件用户名
password = glance
//指定glance组件连接keystone组件密码
[paste_deploy]
flavor = keystone
//指定验证组件为keystone
[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance
//初始化镜像服务的数据库(同步数据库),指定shell用glance的身份执行指令

[root@controller ~]# systemctl enable openstack-glance-api.service openstack-glance-registry.service
//开机自启glance-api和glance-registry两个服务
[root@controller ~]# systemctl start openstack-glance-api.service openstack-glance-registry.service
//启动glance-api和glance-registry两个服务

验证(Controller)

可使用cirros镜像文件对镜像服务验证,cirros是一个小型的Linux镜像,一般用于OpneStack部署测试

[root@controller ~]# source admin.sh
//执行管理员身份脚本,获得管理访问身份
[root@controller ~]# wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
//下载cirros镜像文件到当前路径
[root@controller ~]# mv cirros-0.3.5-x86_64-disk.img /var/lib/glance/images/
//将cirros镜像文件移动到glance镜像目录下
[root@controller ~]# cd /var/lib/glance/images/
[root@controller ~]# openstack image create "cirros" \
--file cirros-0.3.5-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public

//使用qcow2磁盘格式,将当前位置下的cirros镜像文件上传到镜像服务并设置为公共可见(所有项目都可访问)

[root@controller ~]# openstack image list
//查看已上传的镜像

1.6 Nova计算服务

1.Nova简介

Nova架构

  • Nova下的子类:
    • nova-api服务接收和响应终端用户计算API调用
    • nova-api-metadata服务接受从实例元数据请求
    • nova-compute服务工人守护进程创建和终止虚拟机实例通过 hypervisor APIs
    • nova-consoleauth守护程序控制台代理提供的授权用户令牌
    • nova-novncproxy守护进程提供了一个代理来访问运行的实例通过VNC连接
    • nova-spicehtml5proxy提供通过SPICE连接访问运行实例的代理

libvirt

KVM

Nova访问流程

Nova-scheduler

Nova-Compute

Nova处理过程

Nova实例请求过程

2.部署Nova服务

创建数据库并授权(Controller)

[root@controller ~]# mysql -u root -p
//登录MySQL数据库,密码
MariaDB [(none)]> create database nova;
//创建nova数据库
MariaDB [(none)]> create database nova_api;
//创建nova_api数据库
MariaDB [(none)]> create database nova_cell0;
//创建nova_api数据库
MariaDB [(none)]> grant all privileges on nova_api.* to nova@'localhost' identified by 'nova';
MariaDB [(none)]> grant all privileges on nova_api.* to nova@'192.168.1.0/255.255.255.0' identified by 'nova';
//新建nova用户授予对nova_api数据库拥有所有权限,密码设置为nova
MariaDB [(none)]> grant all privileges on nova.* to nova@'localhost' identified by 'nova';
MariaDB [(none)]> grant all privileges on nova.* to nova@'192.168.1.0/255.255.255.0' identified by 'nova';
//nova用户授予对nova数据库拥有所有权限,密码设置为nova
MariaDB [(none)]> grant all privileges on nova_cell0.* to nova@'localhost' identified by 'nova';
MariaDB [(none)]> grant all privileges on nova_cell0.* to nova@'192.168.1.0/255.255.255.0' identified by 'nova';
//nova用户授予对nova_cell0数据库拥有所有权限,密码设置为nova

创建用户nova(Controller)

[root@controller ~]# source admin.sh
//执行管理员身份脚本,获得管理访问身份
[root@controller ~]# openstack user create --domain default --password-prompt nova
//在"default"域中创建nova用户(密码为nova)

[root@controller ~]# openstack role add --project service --user nova admin
//将nova用户角色添加到service项目和admin组中

创建服务实体和API端点nova(Controller)

[root@controller ~]# openstack service create --name nova --description "OpenStack Compute" compute
//创建compute服务实体

基于建立的服务实体,创建访问该实体的三个api端点

[root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
//创建API endpoint,专用于公网访问

[root@controller ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
//创建API endpoint,专用于内网访问

[root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
//创建API endpoint,专门处理admin访问

创建用户placement(Controller)

[root@controller ~]# openstack user create --domain default --password-prompt placement
//在"default"域中创建placement用户(密码为placement)

[root@controller ~]# openstack role add --project service --user placement admin
//将placement用户添加到service项目和admin组中
[root@controller ~]# openstack service create --name placement --description "Placement API" placement
//创建placement服务实体

[root@controller ~]# openstack endpoint create --region RegionOne placement public http://controller:8778

[root@controller ~]# openstack endpoint create --region RegionOne placement internal http://controller:8778

[root@controller ~]# openstack endpoint create --region RegionOne placement admin http://controller:8778

安装Nova(Controller)

[root@controller ~]# yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api
//安装Nova相关软件包
[root@controller ~]# mv /etc/nova/nova.conf /etc/nova/nova.conf.bak
//备份nova配置文件
[root@controller ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
//启动计算和元数据API接口
transport_url = rabbit://openstack:openstack@controller
//指定Rabbit连接信息
rpc_backend = rabbit
my_ip = 192.168.1.10
//指定监听IP
use_neutron = True
//启用neutron服务作为网络后端
firewall_driver = nova.virt.firewall.NoopFirewallDriver
//禁用计算服务内置的防火墙服务(使用neutron服务提供的防火墙服务)
[api_database]
connection = mysql+pymysql://nova:nova@controller/nova_api
//配置数据库连接用户及密码,以及连接的数据库(nova_api连接)
[database]
connection = mysql+pymysql://nova:nova@controller/nova
//配置数据库连接用户及密码,以及连接的数据库(nova连接)
[api]
auth_strategy = keystone
//指定验证组件为keystone
[keystone_authtoken]
auth_uri = http://controller:5000
//普通用户认证连接主机及端口
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
memcached_servers = controller:11211
//memcached的主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
project_name = service
//指定项目名
username = nova
//指定nova组件连接keystone组件用户名
password = nova
//指定nova组件连接keystone组件密码
[vnc]
enabled = true
//启用vnc(图形访问实例)
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
//指定vnc监听端口
[glance]
api_servers = http://controller:9292
//指定镜像服务API位置
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
//配置nova锁路径
[placement]
os_region_name = RegionOne
//指定区域名
project_domain_name = Default
//指定项目域名
project_name = service
//指定项目名
auth_type = password
//认证类型为密码认证
user_domain_name = Default
//指定用户域名
auth_url = http://controller:35357/v3
//管理员用户认证连接主机及端口
username = placement
//指定placement组件连接keystone组件用户名
password = placement
//指定placement组件连接keystone组件密码
[root@controller ~]# vim /etc/httpd/conf.d/00-nova-placement-api.conf
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>

注:由于包错误,必须启用对Placement API的访问,在文件末尾添加,用于允许访问/usr/bin/目录下内容

[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
//初始化计算服务的数据库(同步数据库),指定shell用glance的身份执行指令
[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
//初始化计算服务的数据库(同步数据库),指定shell用glance的身份执行指令
[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
//初始化计算服务的数据库(同步数据库),指定shell用glance的身份执行指令
[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova
//初始化计算服务的数据库(同步数据库),指定shell用glance的身份执行指令

[root@controller ~]# nova-manage cell_v2 list_cells
//查看cell_v2所生成的UUID

[root@controller ~]# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
//开机自启相关计算服务
[root@controller ~]# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
//启动计算相关服务

安装Nova(Compute)

[root@compute ~]# yum -y install openstack-nova-compute
//安装Nova
[root@compute ~]# mv /etc/nova/nova.conf /etc/nova/nova.conf.bak
//配置nova配置文件
[root@compute ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
//启动计算和元数据API接口
transport_url = rabbit://openstack:openstack@controller
//指定Rabbit连接信息
rpc_backend = rabbit
my_ip = 192.168.1.20
//指定监听IP
use_neutron = True
//启用neutron服务作为网络后端
firewall_driver = nova.virt.firewall.NoopFirewallDriver
//禁用计算服务内置的防火墙服务(使用neutron服务提供的防火墙服务)
[api]
auth_strategy = keystone
//指定验证组件为keystone
[keystone_authtoken]
auth_uri = http://controller:5000
//普通用户认证连接主机及端口
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
memcached_servers = controller:11211
//memcached的主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
project_name = service
//指定项目名
username = nova
//指定nova组件连接keystone组件用户名
password = nova
//指定nova组件连接keystone组件密码
[vnc]
enabled = True
//启用vnc(图形访问实例)
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.1.10:6080/vnc_auto.html
//指定vnc监听端口
[glance]
api_servers = http://controller:9292
//指定镜像服务API位置
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
//配置nova锁路径
[libvirt]
virt_type = qemu
//指定libvirtd管理的虚拟化类型为qemu
[placement]
os_region_name = RegionOne
//指定区域名
project_domain_name = Default
//指定项目域名
project_name = service
//指定项目名
auth_type = password
//认证类型为密码认证
user_domain_name = Default
//指定用户域名
auth_url = http://controller:35357/v3
//管理员用户认证连接主机及端口
username = placement
//指定placement组件连接keystone组件用户名
password = placement
//指定placement组件连接keystone组件密码
[root@compute ~]# grep --color vmx /proc/cpuinfo
//查看是否支持虚拟化
[root@compute ~]# systemctl enable libvirtd.service openstack-nova-compute.service
[root@compute ~]# systemctl restart libvirtd.service openstack-nova-compute.service

新增计算节点(Controller)

命令方式,每次新增计算节点时都需要执行

[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

或者,修改配置文件方式,每隔300s自动发现计算节点

[root@controller ~]# vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300
[root@controller ~]# openstack hypervisor list
//显示所有计算节点信息

[root@controller ~]# openstack compute service list
//查看计算服务部署情况

root@controller ~]# openstack catalog list
//查看服务目录列表(endpoint)

1.7 Neutron网络服务

1.OpenStack网络历程

2.网络管理方式

Flat模式

Flat DHCP模式

VLAN模式

3.部署Neutron服务

创建数据并授权(Controller)

[root@controller ~]# mysql -u root -p
MariaDB [(none)]> create database neutron;
//创建neutron数据库
MariaDB [(none)]> grant all on neutron.* to neutron@'192.168.1.0/255.255.255.0' identified by 'neutron';
//新建neutron用户授予对neutron数据库所有权限,密码设置为neutron
MariaDB [(none)]> grant all on neutron.* to neutron@'localhost' identified by 'neutron';

创建用户(Controller)

[root@controller ~]# openstack user create --domain default --password-prompt neutron
//在"default"域中创建neutron用户(密码neutron)

[root@controller ~]# openstack role add --project service --user neutron admin
//将neutron用户添加到service项目和admin组中

创建服务实体和API端点(Controller)

[root@controller ~]# openstack service create --name neutron --description "OpenStack Networking" network
//创建network服务实体

基于建立的服务实体,创建访问该实体的三个api端点

[root@controller ~]# openstack endpoint create --region RegionOne network public http://controller:9696
//创建API endpoint,专用于公网访问

[root@controller ~]# openstack endpoint create --region RegionOne network internal http://controller:9696
//创建API endpoint,专用于内网访问

[root@controller ~]# openstack endpoint create --region RegionOne network admin http://controller:9696
//创建API endpoint,专门处理admin访问

安装Neutron(Controller)

[root@controller ~]# yum -y install openstack-neutron-linuxbridge ebtables openstack-neutron openstack-neutron-ml2
//安装Neutron
[root@controller ~]# mv /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
//配置Neutron配置文件
[root@controller ~]# vim /etc/neutron/neutron.conf
[database]
connection = mysql+pymysql://neutron:neutron@controller/neutron
//配置数据库连接用户及密码,以及连接的数据库
[DEFAULT]
core_plugin = ml2
//启动ML2插件
service_plugins =
//禁用其余插件
transport_url = rabbit://openstack:openstack@controller
//指定Rabbit连接信息
auth_strategy = keystone
//指定验证组件为keystone
notify_nova_on_port_status_changes = true
//信息提示nova状态
notify_nova_on_port_data_changes = true
//信息提示nova数据状态
[keystone_authtoken]
auth_uri = http://controller:5000
//普通用户认证连接主机及端口
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
memcached_servers = controller:11211
//memcached的主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
project_name = service
//指定域名
username = neutron
//指定neutron组件连接keystone组件用户名
password = neutron
//指定neutron组件连接keystone组件用户名
[nova]
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
region_name = RegionOne
//指定区域名
project_name = service
//指定域名
username = nova
//指定连接名
password = nova
//指定连接密码
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
//配置neutron锁路径
[root@controller ~]# mv /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini.bak
//备份ml2配置文件(使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施)
[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat
//选择ml2加载驱动
tenant_network_types = 
//禁用私有网络
mechanism_drivers = linuxbridge
//指定启动的网络插件
extension_drivers =  port_security
//启用端口安全扩展驱动
[ml2_type_flat]
flat_networks = provider
//配置公共虚拟网络为flat网络
[securitygroup]
enable_ipset = true
//启动ipset增加安全性
[root@controller ~]# mv /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak
//备份Linuxbridge代理文件
[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens32
//定义节点物理网卡(用于虚拟机与外部主机通信)
[vxlan]
enable_vxlan = false
//禁用VXLAN覆盖网络(VLAN的扩展,专用于云环境)
[securitygroup]
enable_security_group = true
//启用安全组(Web控制开启禁止的端口,替代iptables控制)
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
//配置Linux bridge iptables防火墙驱动
[root@controller ~]# mv /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.bak
//备份neutron组件dhcp代理配置文件
[root@controller ~]# vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = linuxbridge
//虚拟接口驱动,使用Linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
//dhcp驱动,默认使用Dnsmasq(是一个小的开源项目)来提供dhcp服务
enable_isolated_metadata = true
//虚拟网络没有网关时,自动增加到DHCP服务路由
[root@controller ~]# mv /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.bak
//备份neutron代理配置文件
[root@controller ~]# vim /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_ip = controller
//指定元数据服务器IP地址
metadata_proxy_shared_secret = meta
//指定共享密钥
[root@controller ~]# vim  /etc/nova/nova.conf
[neutron]
url = http://controller:9696
//配置neutron组件连接地址(由nova组件连接)
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
region_name = RegionOne
//指定区域名
project_name = service
//指定项目名
username = neutron
//指定neutron组件连接keystone组件用户名
password = neutron
//指定neutron组件连接keystone组件密码
service_metadata_proxy = true
//启用元数据代理
metadata_proxy_shared_secret = meta
//指定元数据代理服务器共享密码
[root@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
//ML2插件配置文件创建软链接,网络服务初始化脚本期望指向/etc/neutron/plugin.ini
[root@controller ~]# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
//同步数据库

[root@controller ~]# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
//开机自启相关网络服务
[root@controller ~]# systemctl start neutron-server.service  neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service openstack-nova-api.service
//启动相关网络服务

安装Neutron(Compute)

[root@compute ~]# yum -y install openstack-neutron-linuxbridge ebtables ipset 
//安装Neutron
[root@compute ~]# mv /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
//配置Neutron配置文件
[root@compute ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
//指定Rabbit连接信息
auth_strategy = keystone
//指定验证组件为keystone
[keystone_authtoken]
auth_uri = http://controller:5000
//普通用户认证连接主机及端口
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
memcached_servers = controller:11211
//memcached的主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
project_name = service
//指定域名
username = neutron
//指定neutron组件连接keystone组件用户名
password = neutron
//指定neutron组件连接keystone组件密码
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
//配置neutron锁路径
[root@controller ~]# mv /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak
//备份Linuxbridge代理文件
[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens32
//定义节点物理网卡(用于虚拟机与外部主机通信)
[vxlan]
enable_vxlan = false
//禁用VXLAN覆盖网络(VLAN的扩展,专用于云环境)
[securitygroup]
enable_security_group = true
//启用安全组(Web控制开启禁止的端口,替代iptables控制)
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
//配置Linux bridge iptables防火墙驱动
[root@compute ~]# vim /etc/nova/nova.conf

[neutron]
url = http://controller:9696
//配置neutron组件连接地址(由nova组件连接)
auth_url = http://controller:35357
//管理员用户认证连接主机及端口
auth_type = password
//认证类型为密码认证
project_domain_name = default
//指定项目域名
user_domain_name = default
//指定用户域名
region_name = RegionOne
//指定区域名
project_name = service
//指定项目名
username = neutron
//指定neutron组件连接keystone组件用户名
password = neutron
//指定neutron组件连接keystone组件密码
[root@compute ~]# systemctl enable neutron-linuxbridge-agent.service
[root@compute ~]# systemctl restart neutron-linuxbridge-agent.service openstack-nova-compute.service

验证(Controller)

[root@controller ~]# openstack extension list --network
//列出加载的扩展,验证服务器进程

[root@controller ~]# openstack network agent list
//查看网络详情

1.8 仪表盘Dashboard(Controller)

1.安装仪表盘

[root@controller ~]# yum -y install openstack-dashboard
//安装仪表盘

2.修改配置

[root@controller ~]# cp /etc/openstack-dashboard/local_settings /etc/openstack-dashboard/local_settings.bak
[root@controller ~]# vim /etc/openstack-dashboard/local_settings
28 ALLOWED_HOSTS = ['*', ]
//允许所有主机访问
54 OPENSTACK_API_VERSIONS = {
55 #    "data-processing": 1.1,
56     "identity": 3,
57     "image": 2,
58     "volume": 2,
59 #    "compute": 2,
60 }
//注:取消注释,开放仪表盘API
65 OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
//登陆时需输入域名
129 SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
//定义会话名
130 CACHES = {
131     'default': {
132         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
133         'LOCATION': 'controller:11211',
134     },
135 }
//注:去掉注释,定义Memcache缓存
159 OPENSTACK_HOST = "192.168.1.10"
//指定控制节点IP
161 OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
//指定连接版本为v3(默认v2)
283     'enable_router': False,
284     'enable_quotas': False,
287     'enable_ha_router': False,
288     'enable_lb': False,
289     'enable_firewall': False,
290     'enable_vpn': False,
291     'enable_fip_topology_check': False,
[root@controller ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf
4 WSGIApplicationGroup %{GLOBAL}
//解决不能访问仪表盘问题
[root@controller ~]# systemctl restart httpd.service memcached.service
//重启httpd及memcached服务

访问只需在浏览器输入http://192.168.1.10/dashboard 即可 域为default、用户admin为管理用户、demo为普通用户

1.9准备虚拟网络及其子网(Controller)

创建子网(test-net)

2.0 准备flavor

最小默认flavor每个实例消耗512 MB内存。 对于具有计算节点的环境包含少于4 GB内存,我们建议创建只需要64 MB的m1.xueluo flavor实例。 只有使用这种flavor与CirrOS图像进行测试

2.1 使用horizon创建实例

登陆horizon

创建实例,设置实例名字

选择源为镜像,选择实例需要的镜像crrios

选择实例类型,之前有设置好的flavor

网络会自动选择,也可以手动选择

成功创建

进入该实例的控制台

完成OpenStack的主要服务安装,成功创建实例,成功使用实例

常见报错

1)日志内报错

ERROR oslo.messaging._drivers.impl_rabbit AMQP server on controlle:5672 is unreachable: [Errno -2] Name or service not known. Trying again in 32 seconds. Client port: None

解释:

报错信息带有AMQP则一般为Rabbitmq的问题,重启Rabbitmq服务

还有防火墙可能拦截Rabbitmq

2)在horizon创建实例报错

实例 “hello” 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: 主机 ‘compute’没有映射到任何单元].

解释:

没有使用命令或者相应配置发现计算节点,找不到计算节点

3)在horizon创建实例报错

Error: 实例 “demo” 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: No valid host was found. There are not enough hosts available.]

解释:

无法为实例分配资源,一般是调度器的问题或者计算节点的问题

导致错误的可能处

检查防火墙

计算节点问题,查看计算节点的nova日志,/var/log/nova/nova-compute.log

控制节点的nova-conductor问题,查看日志/var/log/nova/nova-conductor.log

  • 排错步骤:
    • 1、根据报错的提示信息排错。效率一般
    • 2、根据报错查看对应的日志,根据日志报错信息进行排错。效率一般
    • 3、把报错信息或者日志信息贴上百度进行搜索,一般遇到的报错都有人解决了。效率高
    • 4、把报错信息或者日志信息贴上Google上进行搜索,一般遇到的报错都有人解决了,但是需要一定的英语水平。效率较高
    • 5、在OpenStack知道的bug网站上进行提问和搜索。效率较高,应用于复杂性高的报错,否则前时步即可解决80%的报错
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openstack_ocata部署 的相关文章

随机推荐