问题导读
1、脚本自动化部署原理是什么?
2、重启虚拟机后,登录 Dashboard 时出现错误,如何解决?
3、stack.sh 执行之 pip-1.4.1 安装失败,怎么办?
本篇主要阐述通过DeveStack 去部署Openstack(icehouse),对大多数来说安装部署Openstack 来说是个痛苦的过程,尤其是 OpenStack和它依赖的一些组件在快速发展中,经常出现这个版本组件对不上那个版本 dashboard 等 情况。如果只是 看看或者初期玩玩 OpenStack的话,使用 DevStack也是个不错的办法。 DevStack采用了自动化源码部署的方式,适用于开发环境的部署和Openstack 开发者, 单节点,小环境;这里采用的操作系统为Ubuntu14.04
1. 自动化部署原理 :
1.1自动执行安装脚本
将安装命令脚本化
1.2自动生成配置文件
生成正确的配置参数
1.3自动解决依赖关系
安装依赖的软件包
服务的安装顺序
2.Openstack 部署详解
2.1更新系统及安装git软件包
- $sudo apt-get update
- $sudo apt-get upgrade
- $sudo apt-get dist#upgrade
- $sudo apt-get install git
复制代码
2.2 devstack 下载
- $git branch -a #显示本地分支
- $git checkout -b icehouse origin/stable/icehouse #切换到指定icehouse分支或标签
- $git clone https://github.com/openstack-dev/devstack.git #克隆devstack的Git代码仓库
- $cd ./devstack
复制代码
2.3 devstack 下的一些文件描述
- stack.sh #自动化部署的入口;判断是否存在localrc文件; 否,进入交互模式; 是,进入配置模式(如果需要输入输入stack.sh需要的参数,如:数据库的密码、Rabbit MQ的密码、Service TOKEN 等)
- localrc #配置文件;传入stack.sh的参数;nova部署在哪个节点,用户名密码是什么
- openrc #环境变量脚本;在执行openstack命令时要导入一些环境变量 如:export OS_USERNAME = admin
- unstack.sh #卸载脚本
- lib #每个服务的自动化安装脚本;通常存放nova,swift等自动化安装脚本,手动安装时执行的所有命令;每一个openstack服务对应一个文件(以下对相关文件作了简要说明)
- apache (Web 服务)
- Swift (对象存储的组件)
- Glance (镜像管理)
- Horizon (提供了一个模块化的webbased用户界面)
- heat(应用的自动化部署AWS cloudformation)
- ceilometer(监控和计费)
- sahara(BigData-as-a-Service #BDaaS,将hadoop部署在openstack的虚拟机上)
- ironic(PXE+IPMI,物理节点的自动化部署)
- trove(Database-as-a-service,将数据库部署在openstack的虚拟机上)
- tempest(openstack单元测试框架)
- opendaylight(开源的sdn控制器)
- ldap(轻量型目录访问协议,与keystone整合,实现多级用户的鉴权)
- database、databases(postgresql/mysql,默认将选择mysql)
- nova、nova_plugins (可以说是一套虚拟化管理程序,还可以管理网络和存储;下面是支持的一些虚拟化管理程序)
- functions-libvirt hypervisor-baremetal hypervisor-fake hypervisor-ironic hypervisor-libvirt hypervisor-openvz hypervisor-vsphere hypervisor-xenserver
- neutron、neutron_plugins、neutron_thirdparty(网络管理的组件,neutron未来将取代Nova相关网络相关内容)
- cinder、cinder_plugins (存储管理的组件。Cinder存储管理主要是指虚拟机的存储管理)
复制代码
2.4 localrc配置文件详解
- ##########################Gloable configuration########################
- DATABASE_PASSWORD=redhat #数据库的密码
- ADMIN_PASSWORD=redhat #admin用户的密码
- SERVICE_PASSWORD=redhat #每个service对应用户的密码
- SERVICE_TOKEN=redhat #每个service的TOKEN
- RABBIT_PASSWORD=redhat #Message MQ的密码
- # Reclone each time
- #RECLONE=true
- # Python enviroments
- #OFFLINE=true
- ## For Keystone
- KEYSTONE_TOKEN_FORMAT=PKI
- ## For Swift
- #SWIFT_REPLICAS=1
- #SWIFT_HASH=011688b44136573e209e
- ##################openstack和devstack的日志文件的存放位置######################
- DEST=/home/stack
- LOGFILE=$DEST/logs/stack.sh.log
- VERBOSE=True
- LOG_COLOR=True
- SCREEN_LOGDIR=$DEST/logs
- # ################################服务配置##################################
- # Pre#requisite
- ENABLED_SERVICES=rabbit,mysql,key
- #############################消息队列配置###################################
- ## If you want ZeroMQ instead of RabbitMQ (don‘t forget to un-declare ‘rabbit‘ from the pre#requesite)
- #ENABLED_SERVICES+=,-rabbit,-qpid,zeromq
- ## If you want Qpid instead of RabbitMQ (don‘t forget to un-declare ‘rabbit‘ from the pre#requesite)
- #ENABLED_SERVICES+=,-rabbit,-zeromq,qpid
- ######################每个服务单独配置代码下载地址#########################
- # Horizon (Dashboard UI) - (always use the trunk)
- ENABLED_SERVICES+=,horizon
- #HORIZON_REPO=https://github.com/openstack/horizon
- #HORIZON_BRANCH=master
- ######################NOVA服务配置#######################################
- # Nova - Compute Service
- ENABLED_SERVICES+=,n-api,n-crt,n-obj,n-cpu,n-cond,n-sch,n-novnc,n-cauth
- IMAGE_URLS+=",https://launchpad.net/cirros/trunk/0.3.0/+download/cirros#0.3.0#x86_64#disk.img"
- ## Nova Cells
- ENABLED_SERVICES+=,n-cell
- ###########################Glance服务配置###############################
- # Glance - Image Service
- ENABLED_SERVICES+=,g-api,g-reg
- #####################swift服务配置##############################
- # Swift - Object Storage
- #ENABLED_SERVICES+=,s-proxy,s-object,s-container,s-account
- #####################网络服务配置:负载均衡、VPN和防火墙服务#################
- # Neutron - Networking Service
- # If Neutron is not declared the old good nova-network will be used
- ENABLED_SERVICES+=,q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron
- #VIF_PLUGGING_IS_FATAL=False
- #VIF_PLUGGING_TIMEOUT=10
- ## Neutron - Load Balancing
- #ENABLED_SERVICES+=,q-lbaas
- ## Neutron - VPN as a Service
- #ENABLED_SERVICES+=,q-vpn
- ## Neutron - Firewall as a Service
- #ENABLED_SERVICES+=,q-fwaas
- # VXLAN tunnel configuration
- Q_PLUGIN=ml2
- Q_ML2_TENANT_NETWORK_TYPE=vxlan
- ####################cinder服务配置##############################
- # Cinder - Block Device Service
- ENABLED_SERVICES+=,cinder,c-api,c-vol,c-sch
- ####################heat服务配置################################
- # Heat - Orchestration Service
- #ENABLED_SERVICES+=,heat,h-api,h-api-cfn,h-api-cw,h-eng
- #IMAGE_URLS+=",http://fedorapeople.org/groups/heat/prebuilt-jeos-images/F17-x86_64-cfntools.qcow2"
- ##################Ceilometer服务配置############################
- # Ceilometer - Metering Service (metering + alarming)
- #CEILOMETER_BACKEND=mysql
- #ENABLED_SERVICES+=,ceilometer-acompute,ceilometer-acentral,ceilometer-collector,ceilometer-api
- #ENABLED_SERVICES+=,ceilometer-alarm-notify,ceilometer-alarm-eval
- ##############keystone和swift采用apache作为web前端配置###########
- # Apache fronted for WSGI
- APACHE_ENABLED_SERVICES+=keystone
- #,swift
- #GIT_BASE=http://review.thstack.com
复制代码
2.5 进行部署 (采用非交互模式)
- $ cp localrc /home/junbj/devstack/
- $./stack.sh 等待安装部署即可;
复制代码
2.6 图形界面登录
访问: Http:// IP Address 即可
2.7 创建虚拟机通过镜像 cirros
3. 部署过程遇到的问题与解决方法
3.1 重新登录提示认证失败
重启虚拟机后,登录 Dashboard 时出现 “An error occurred authenticating. Please try again later” 的错误, 如上图 .
- $cd /devstack ; sh rejoin-stack.sh (执行devstack目录下的rejoin-stack.sh脚本即可可以解决)
复制代码
3.2 pip 源连接失败,导致 pip 安装软件包失败
- $mkdir ~/.pip
- $vim ~/.pip/pip.conf
- -----------------pip.conf-------------------------------------
- [global]
- index-url = http://pypi.douban.com/simple/
复制代码
3.3 /opt/stack 目录权限问题
- $sudo chmod 777 /opt/stack -R
复制代码
3.4 devstack 下载失败
- fatal: unable to access ‘https://github.com/openstack-dev/devstack/‘: Could not resolve host: github.com
复制代码
检查物理机的 /etc/resov.conf 文件中是否有正确的 nameserver.
3.5 stack.sh 执行失败 1 : pip-1.4.1 安装失败
- pkg_resources.DistributionNotFound: pip==1.4.1
复制代码
通过 git log 查看 devstack 代码更新记录,恢复到之前的某个版本
3.6 stack.sh 执行失败 2 : pip-1.4.1 安装失败
- $git reset --hard d4fe50feb18133e39351af7becb5ff84c8d4f479
- --------------------------------------END----------------------------------------------
复制代码