机房360首页
当前位置:首页 » 虚拟化资讯 » 手把手教你如何逐步安装OpenStack

手把手教你如何逐步安装OpenStack

来源:TechTarget中国 作者:DJ编辑 更新时间:2016/5/11 10:18:35

摘要:尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方。因此在Ubuntu上安装OpenStack的过程当中,可以使用下面的操作文档来弥补官方教程的不足。

  尽管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了。

  责任编辑:DJ编辑

机房360微信公众号订阅
扫一扫,订阅更多数据中心资讯

本文地址:http://www.jifang360.com/news/2016511/n322181806.html 网友评论: 阅读次数:
版权声明:凡本站原创文章,未经授权,禁止转载,否则追究法律责任。
相关评论
正在加载评论列表...
评论表单加载中...
  • 我要分享
推荐图片