手把手教你如何逐步安装OpenStack
【TechTarget中国原创】 尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方。因此在Ubuntu上安装OpenStack的过程当中,可以使用下面的操作文档来弥补官方教程的不足。 学习如何使用OpenStack的最简单方式就是在自己的电脑上进行实际部署。OpenStack官网提供了如何进行部署的相关教程,但是这个教程所包含的步骤过于繁杂,并且还有很多不准确的地方,因此用户很难顺利完成整个流程——比如,在整个安装流程当中,用户不可能简单地通过apt-get来获得所有的必要组件。虽然OpenStack同时提供了图形化的分步向导,但是这种方式需要使用五台单独的虚拟机。 在安装OpenStack的过程当中用户可能会遇到一系列的错误提示信息,尽管可以在Google当中逐个搜索这些问题的解决方案,但是这种方式会让用户在漫长的安装过程中感到更加沮丧,因此我推荐用户参考这个教程完成安装。为了彻底理解整个安装流程,我在Ubuntu上完成了两次OpenStack的完整安装过程,并且将所有获得的经验都体现在这个OpenStack安装教程当中。简单来说,这个教程的目的在于尽量简化和详尽说明OpenStack所提供的官方文档,最大程度上解决可能遇到的任何问题。 OpenStack安装前提 在开始之前,首先浏览一下OpenStack官网提供的文档“OpenStack Installation Guide for Ubuntu 14.04。”为了实现最佳效果,可以同时参考官网教程以及这个文档,以保证安装过程的顺利实施。作为参考,我使用的是OpenStack Kilo,也被称为version K。 为了保证系统正常运行,环境当中必须至少包含一个计算节点和一个控制器节点。虽然我们没有部署对象存储、块存储或者网络节点,但是这些都是在生产环境当中所必须的。 如果在安装过程当中卡在某一环节无法完成,那么可以暂时跳过这一环节,因为这些步骤除了第一步之外,并不需要按照时间顺序完成。在后面的安装过程当中可能会找到之前问题的解决方案。 总体来说,部署OpenStack环境包含如下基本步骤: 通过安装数据库、配置主机文件来创建基本环境; 安装Identity Service(身份验证服务); 安装Image Service(镜像服务); 安装Compute Service(计算服务); 安装Dashboard以便能够登陆lb界面。 搭建基础环境 在尝试搭建基础环境之前,必须首先创建一台Ubuntu 14.04 Server虚拟机。可以使用任何种类的hypervisor完成这项任务。我使用的是VMware vCloud Director。至于操作系统版本,尽管我倾向于使用Ubuntu Server,但是这个文档应该同样适用于Ubuntu Desktop。Ubuntu Server和Ubuntu Desktop的主要区别在于Server版没有图形界面。 注意需要使用root权限执行如下命令。如果用户使用的是Ubuntu Desktop而不是Server版,那么需要首先使用不同于root的普通账户登录,之后更改root账户密码,这样才能够运行后续的用户命令。在搭建环境的过程当中,还应该确保制作足够的快照,这样就能够在某些部分出现问题的时候及时进行回滚操作。 用户可以使用OpenStack教程当中提供的密码,直接复制和粘结这些密码可以尽量减少可能产生的错误。此外,SQL数据库当中不会使用root密码。除非文档特殊说明,否则不要运行apt-get命令,因为根据OpenStack.org的提示,不允许对OpenStack进行自动更新。 在创建Ubuntu Server虚拟机之后,需要向“/etc/hosts”文件当中添加controller和compute1的IP地址。为了保证这两个组件都在同一台机器上,可以使用如下命令: 127.0.0.1 controller compute1 之后,运行下面的命令: apt-get install ubuntu-cloud-keyring echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" \ "trusty-updates/kilo main" > /etc/apt/sources.list.d/cloudarchive-kilo.list apt-get update && apt-get dist-upgrade 跳过安装NTP(网络时间协议)服务器这一步。当前环境当中只有一台机器,因此不需要同步时间。现在运行下面的命令: apt-get install mariadb-server python-mysqldb 需要注意的是我们使用的是MariaDB,而不是MySQL。现在我们需要按照文档说明来编辑“/etc/mysql/my.cnf”配置文件。 完成这一步之后,执行下面的命令: service mysql restart mysql_secure_installation 之后使用如下命令安装RabbitMQ服务器: apt-get install rabbitmq-server rabbitmqctl change_password guest RABBIT_PASS 身份验证服务 为了安装Identity Service,首先创建Keystone数据库。用户通过创建token来实现Keystone操作,之后用户才能够创建用户ID和密码,通过执行如下命令来完成这项任务: openssl rand -hex 10 运行这个命令之后我得到了一个token:cde3aa151a5a7e048da9。用户可以使用这个token或者制作自己的token。之后,运行如下命令: apt-get install keystone python-keystoneclient 参照OpenStack提供的文档,使用 vi /etc/keystone/keystone.conf来编辑配置文件。 需要注意的是OpenStack文档当中的某些命令会导致错误,因为其打开了一个新的shell。可以通过运行如下命令来避免产生这种错误,注意前面不要添加su –s: /bin/sh -c "keystone-manage db_sync" keystone 之后执行如下命令重启keystone服务: service keystone restart 现在用户必须导出这两种环境变量。这样就能够临时允许用户使用token来通过Keystone的认证,而不需要使用用户账户。 export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9 OS_SERVICE_ENDPOINT=http://controller:35357/v2.0 创建tenant、用户和角色 这时候我遇到了一个error 500的错误,是因为我忘记了重启Keystone服务。为了创建Keystone、用户和角色,需要首先执行下面的命令: keystone tenant-create --name admin --description "Admin Tenant" keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS 继续参照OpenStack提供的文档,执行如下命令: keystone tenant-create --name service --description "Service Tenant" 创建service entity(服务实体)和API endpoint 根据OpenStack提供的文档说明,下一步需要进行验证操作,也就是尝试发现任何错误。 验证操作 根据OpenStack所提供的文档,如果想要验证上面的操作是否正确需要执行下面的命令: unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT 为了保证用户名和密码能够顺利通过验证过程,可以使用下面的命令: keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \ > --os-auth-url http://controller:35357/v2.0 token-get 上面的命令模拟了Identity Service的验证过程,会为用户分配一个登陆token。 在我执行OpenStack所提供命令的过程当中,收到了下面的错误提示信息: The request you have made requires authentication. (HTTP 401) (Request-ID: req-0550f2c3-9077-470b-95d8-ce4ff498ff8f) Error 401表明用户没有通过验证,意味着我忘记使用下面的命令创建管理员角色了。 keystone role-create --name admin 用户还可以使用下面这条命令检查用户具有哪些角色: keystone user-role-list --user admin --tenant admin 可以使用如下命令重设token环境变量: export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9 export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0 为了修复这个问题,我为admin用户添加了admin角色: keystone user-role-add --user admin --tenant admin --role admin 还可以使用其他Keystone命令——比如list——在当前环境当中进行debug。这对于将要安装的下一个命令集同样适用: 创建OpenStack客户端环境脚本 如果不想使用token运行这些命令或者不想将它们放在命令行当中执行,那么可以配置环境变量。使用下面的命令创建两个脚本文件。 vi admin-openrc.sh export OS_TENANT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v2.0 vi demo-openrc.sh export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v2.0 之后执行如下命令: source admin-openrc.sh 添加image service(镜像服务) 参考这个文档安装Glance,之后使用下面的命令来创建数据库: keystone user-create --name glance --pass GLANCE_PASS 我收到了error 401错误提示信息,但是可以使用如下命令进行修复: export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9 export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0 如果你同时使用shell和endpoint进行认证,那么将会收到下面的提示:“警告,可以使用token和终端来绕开认证(认证凭证已经被忽略。)” 继续输入如下所示的一系列命令: keystone service-create --name glance --type image \ --description "OpenStack Image Service" keystone endpoint-create \ --service-id $(keystone service-list | awk '/ image / {print $2}') \ --publicurl http://controller:9292 \ --internalurl http://controller:9292 \ --adminurl http://controller:9292 \ --region regionOne apt-get install glance python-glanceclient 这时当你参照OpenStack教程编辑“/etc/glance/glance-api.conf”文件的时候,还需要rem out: #sqlite_db = /var/lib/glance/glance.sqlite 使用下面这些命令来替换上面这条命令: [keystone_authtoken] #identity_uri = http://127.0.0.1:35357 #admin_tenant_name = %SERVICE_TENANT_NAME% #admin_user = %SERVICE_USER% #admin_password = %SERVICE_PASSWORD% #revocation_cache_time = 10 auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 admin_tenant_name = service admin_user = glance admin_password = GLANCE_PASS 完成上面的操作之后,参考OpenStack教程继续进行编辑: vi /etc/glance/glance-registry.conf 之后输入下面的命令,省略sh –c: /bin/sh -c "glance-manage db_sync" glance 这时,我收到了如下的错误提示信息: CRITICAL glance [-] DBConnectionError: (OperationalError) (2003, "Can't connect to MySQL server on 'controller' (111)") None None 这条信息表明,我没有输入正确格式的IP地址,而且没有执行如下命令: flavor = keystone in [paste_deploy] 验证操作 根据验证操作的说明,用户必须首先下载一个Linux镜像,之后使用如下命令将其上传到image service当中: glance image-create --name "cirros-0.3.3-x86_64" --file /tmp/images/cirros-0.3.3-x86_64-disk.img \ --disk-format qcow2 --container-format bare --is-public True --progress 执行这条命令之后我收到了如下错误信息: error 403
403 Forbidden
Access was denied to this resource.
To debug that, I ran: 之后我运行下面这条命令进行debug: glance image-list 但是程序又返回一个error 500错误提示,因此我重启了glance服务: service glance-registry restart service glance-api restart 添加计算服务和部署控制器节点 我发现OpenStack教程当中的下一部分会让人感到十分困惑,因为通过apt-get获取的配置文件当中的全部内容都丢失了,为了解决这个问题,可以使用下面的内容进行替换: [DEFAULT] verbose = True dhcpbridge_flagfile=/etc/nova/nova.conf dhcpbridge=/usr/bin/nova-dhcpbridge logdir=/var/log/nova state_path=/var/lib/nova lock_path=/var/lock/nova force_dhcp_release=True libvirt_use_virtio_for_bridges=True verbose=True ec2_private_dns_show_ip=True api_paste_config=/etc/nova/api-paste.ini enabled_apis=ec2,osapi_compute,metadata my_ip = 127.0.0.1 vncserver_listen = 127.0.0.1 vncserver_proxyclient_address = 127.0.0.1 rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS auth_strategy = keystone [database] connection = mysql://nova:NOVA_DBPASS@controller/nova [keystone_authtoken] auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 admin_tenant_name = service admin_user = nova admin_password = NOVA_PASS [glance] host = controller 配置计算节点 到这个部分为止,用户已经控制器节点这个部分编辑过“/etc/nova/nova.conf"”文件了。现在唯一需要做的就是将下面这两条命令添加到“DEFAULT”区域当中: vnc_enabled = True novncproxy_base_url = http://controller:6080/vnc_auto.html 之前我们已经运行过下面这条命令: /bin/sh -c "nova-manage db sync" nova 但是现在还是应该再运行一次,虽然只是显示如下信息,没有什么实际作用: No handlers could be found for logger "oslo_config.cfg" 我们可以跳过Neutron Networking这一部分,因为我们只部署一台机器,不需要使用虚拟接口。 添加dashboard 参考OpenStack教程来安装Apache,并且在其中配置OpenStack dashboard;这样你就能够访问OpenStack命令行界面工具了。当你重启Apache之后应该会出现如下信息: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message 出现这种信息十分正常,可以直接忽略。 如果用户使用的是Ubuntu Server,那么可以安装Unity Ubuntu desktop来登陆dashboard。如果用户使用的是Ubuntu Desktop,那么虚拟机当中默认已经安装了Unity Ubuntu。通过将Ubuntu虚拟机作为桥接网络,用户还可以从另外一台虚拟机登陆Apache。 可以使用如下命令安装Unity Ubuntu: sudo apt-get install --no-install-recommends ubuntu-desktop 上面的操作并不会安装Firefox或者任何浏览器,所以用户需要在Ubuntu命令行当中添加一个用户,之后使用visudo为其赋予root访问权限,允许用户运行程序。 图A. 登陆dashborad查看hypervisor和硬件使用情况 之后用户就可以使用和“admin-openrc.sh”文件当中相同的用户ID和密码登陆dashboard了。
TechTarget中国原创内容,原文链接: http://www.searchvirtual.com.cn/showcontent_92815.htm
© TechTarget中国:http://www.techtarget.com.cn
手把手教你如何逐步安装OpenStack的更多相关文章
- 手把手教你Chrome浏览器安装Postman(含下载云盘链接)【转载】
转载自:http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...
- 干货 | 手把手教你搭建一套OpenStack云平台
1 前言 今天我们为一位朋友搭建一套OpenStack云平台. 我们使用Kolla部署stein版本的OpenStack云平台. kolla是用于自动化部署OpenStack的一个项目,它基于dock ...
- 手把手教android studio中安装Android Butterknife Zelezny (转)
原文地址:http://blog.csdn.net/xin917480852/article/details/51176524 用来快速生成findViewById() 安装方法: 打开Android ...
- 手把手教你Chrome浏览器安装Postman(含下载云盘链接)(转)
文章转自http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...
- 理解 Redis(2) - 手把手教你理清 Redis 安装全过程
Redis 官网 https://redis.io/ 之前学习 Redis 学了好多次, 下载安装也都按照教程或官网文档弄过, 但是对于安装过程一直有点迷糊, 感觉稀里糊涂地就好了, 就可以用了. 这 ...
- 手把手教你 GitLab 的安装及使用
前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这两个工具之间的差异,已经在使用 git 的路上越走越远. 于是,跟上级强烈建议让我在公司推行 git ...
- 手把手教你 GitLab 的安装及使用(转)
深山田 关注 2018.01.30 22:58 字数 1696 阅读 15559评论 2喜欢 15 前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这 ...
- 手把手教你SonarQube入门安装与使用
简介 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量. Sonar 不只是一个质量数据报告工具,更是代码质量管理平台. 支持Java, C#, C/C++, PL/SQL, C ...
- 手把手教你 Docker Compose安装DOClever
一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...
随机推荐
- python JSON性能测试与simplejson对比
简单测试了一下,如果用JSON,也就是python2.6以上自带的json处理库,效率还算可以: 1K的数据,2.9GHz的CPU,单核下每秒能dump:36898次.大约是pyamf的5倍.但数据量 ...
- 数据结构(C#):图的最短路径问题、(Dijkstra算法)
今天曾洋老师教了有关于图的最短路径问题,现在对例子进行一个自己的理解和整理: 题目: 要求:变成计算出给出结点V1到结点V8的最短路径 答: 首先呢,我会先通过图先把从V1到V8的各种路径全部计算下来 ...
- S/4HANA和CRM Fiori应用的搜索分页实现
在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Customer Management里采用 ...
- IOS 数据加密方式(加盐,MD5加密,)
加密方式封装 @interface NSString (Hash) @property (readonly) NSString *md5String; @property (readonly) NSS ...
- Hash模板
;//一般为靠近总数的素数 struct Hashtable { int x;//hash存的值 Hashtable * next; Hashtable() { next = ; } }; Hasht ...
- 在vue中使用animate库
<style> @keyframes bounce-in { 0% { transform: scale(0); } 50% { transform: scale(1.5) } 100% ...
- python_5_password
#1.python2中raw_input与python3中的input是相同的,python2中也有input但是别用(不好用,忘记它) #密码是明文的 username=input("us ...
- 页面js中文乱码解决
<script src="../Content/kindeditor-4.1.5/kindeditor.js" charset="utf-8" >& ...
- 【软件笔记】 ◆笔记·I◆ 各类冷门函数细解
[软件笔记·I] 各类冷门函数细解 ■题外话■ 总觉得作为一个志向远大的 coder (٩(◕‿◕。)۶),我觉得单单只会做题是不够的所以我开始尝试自己编写软件!初入道的我并不知道C++其实并不太适合 ...
- Java基础-方法区以及static的内存分配图
转载自: https://blog.csdn.net/Wang_1997/article/details/52267688 前面的几篇都没有太明确地指出 方法区 是什么?现在通过一些资料的收集和学习, ...