如何使用Juju部署OpenStack云?

我想准备一个测试云环境,为可能的12.04部署做好准备。我稍微尝试了一下UEC,但是在找到关于新堆栈的入门指南方面遇到了很大困难。虽然有关Diablo的通用文档,但Ubuntu可能已经有很多现成的组件,一个特定的指南可以节省时间。
另外,尽管我非常愿意这样做,但我的预算不包括花费4-6千美元来建立一个带有Canonical支持的小集群。
3个回答

安装OpenStack

如果您想快速上手,请转到这里:

本答案更详细地介绍了如何使用Juju与OpenStack。

范围

OpenStack平台功能强大,用途多样。本文档主要关注使用Canonical组件(如MAAS、Juju和Ubuntu)部署“标准”运行的OpenStack系统,但不限于此。在适当的情况下,将提及其他方法和软件。

假设条件

  1. 使用MAAS - 首先按照这些说明进行操作。
  2. 使用Juju
  3. 本地网络配置 - 本文档假设您具有足够的本地网络配置,包括用于访问OpenStack云的单独接口。理想的网络布局在[MAAS][MAAS OpenStack文档]中有详细说明。

规划安装

在部署任何服务之前,了解可用资源及其使用方式非常有用。OpenStack由许多相互关联的服务(如Nova、Swift等)组成,每个服务在主机方面的需求都不同。例如,提供对象存储的Swift服务与提供计算资源的Nova服务有不同的要求。
每个服务的最低要求和建议都在官方的OpenStack运维指南中列出。
使用MAAS和Juju部署OpenStack的节点推荐组合是系统中的所有节点都应能够运行任何服务。这是系统稳定性的最佳实践,因为如果某个物理节点发生故障,可以重新配置另一个节点来替代它。这当然也适用于任何硬件要求,如额外的网络接口。

如果出于经济或其他原因,您选择使用不同的硬件配置,您应该注意到您克服硬件故障的能力将会降低。此外,还需要将部署目标定位到特定节点-请参阅MAAS文档中关于标签的部分

创建OpenStack配置文件

我们将使用Juju charms来部署OpenStack的组件部分。每个charm封装了设置特定服务所需的所有内容。然而,各个服务有许多配置选项,其中一些我们希望进行更改。

为了使这个任务更容易和可复制,我们将创建一个单独的配置文件,其中包含所有服务的相关选项。这是以标准的YAML格式编写的(如果您对此不熟悉,请参考www.yaml.org)。

以下是一个openstack-config.yaml的示例:

keystone:
  admin-password: openstack
  debug: 'true'
  log-level: DEBUG
nova-cloud-controller:
  network-manager: 'Neutron'
  quantum-security-groups: 'yes'
  neutron-external-network: Public_Network
nova-compute:
  enable-live-migration: 'True'
  migration-auth-type: "none"
  virt-type: kvm
  #virt-type: lxc
  enable-resize: 'True'
quantum-gateway:
  ext-port: 'eth1'
  plugin: ovs
glance:
  ceph-osd-replication-count: 3
cinder:
  block-device: None
  ceph-osd-replication-count: 3
  overwrite: "true"
  glance-api-version: 2
ceph:
  fsid: a51ce9ea-35cd-4639-9b5e-668625d3c1d8
  monitor-secret: AQCk5+dR6NRDMRAAKUd3B8SdAD7jLJ5nbzxXXA==
  osd-devices: /dev/sdb
  osd-reformat: 'True'

对于所有服务,我们可以配置openstack-origin指向一个安装源。在这种情况下,我们将依赖默认设置,它将指向适用于Ubuntu 14.04 LTS Trusty版本的相关源。每个服务的进一步配置在此文档中有详细说明。

其他配置

部署OpenStack服务还有其他设置和配置选项。这些详细信息可以在Juju使用的各个charms的文档中找到,并且可以通过访问在线Juju Charm Store并使用页面左上角的搜索框搜索charm来进行查看。然后,在主页上的“配置”下面详细列出了配置设置,如下所示:

enter image description here

使用Juju部署OpenStack

现在配置已经定义好了,我们可以使用Juju来部署和关联服务。

Juju初始化

Juju需要进行一些最小的设置。在这里,我们假设它已经配置好与您的MAAS集群配合使用(有关此信息,请参阅[Juju安装指南][juju_install])。

首先,我们需要获取Juju将使用的镜像和工具:

juju sync-tools --debug

然后我们可以创建Bootstrap实例:
juju bootstrap --upload-tools --debug

我们使用upload-tools开关来使用刚刚获取的本地工具版本。调试开关将提供详细输出,这可能会很有用。这个过程可能需要几分钟,因为Juju正在创建一个实例并安装工具。完成后,您可以使用以下命令检查系统的状态:
juju status

这应该返回类似的内容:
environment: maas
machines:
  "0":
    agent-state: started
    agent-version: 1.18.1.1
    dns-name: localhost
    instance-id: localhost
    series: trusty

部署OpenStack Charms

现在Juju引导节点已经启动,我们可以部署所需的服务来完成OpenStack的安装。为了在部署过程中正确配置这些服务,我们将使用之前定义的配置文件,并通过每个部署命令的--config开关传递它。如果您的配置文件名称和路径不同,请进行相应的替换。

按照下面的顺序部署服务是有用但不是必需的。同时强烈建议打开一个额外的终端窗口并运行juju debug-log命令。这将输出所有服务运行时的日志,对于故障排除非常有用。

还建议定期运行juju status命令,以检查每个服务是否已安装并正常运行。Juju将自动尝试从在线Charm Store获取最佳版本的charm。如果您在受限制或封闭网络内进行安装,可以预先获取所需的charms。请参阅[离线charms的文档][charms-offline]。

juju deploy --to=0 juju-gui
juju deploy rabbitmq-server
juju deploy mysql
juju deploy --config openstack-config.yaml openstack-dashboard
juju deploy --config openstack-config.yaml keystone
juju deploy --config openstack-config.yaml ceph -n 3 
juju deploy --config openstack-config.yaml nova-compute -n 3
juju deploy --config openstack-config.yaml quantum-gateway
juju deploy --config openstack-config.yaml cinder
juju deploy --config openstack-config.yaml nova-cloud-controller
juju deploy --config openstack-config.yaml glance
juju deploy --config openstack-config.yaml ceph-radosgw

在OpenStack服务之间建立关联

虽然这些服务已经部署,但它们还没有连接在一起。 每个服务目前都是孤立存在的。我们使用juju add-relation命令让它们相互感知,并建立相关的连接和协议。 这些额外的配置由各个charms自己来处理。

我们应该从设置Keystone授权服务及其数据库开始建立charms之间的关联,因为这将被许多其他连接所需要:

juju add-relation keystone mysql

我们等待直到关系设置完毕。完成后使用juju status进行检查。
juju status mysql
juju status keystone

这项服务需要一些时间来稳定下来。虽然可以继续添加关系(Juju管理待处理操作的队列),但从整体时间来看,这可能会适得其反,因为许多关系都指向相同的服务。
还需要建立以下关系:
juju add-relation nova-cloud-controller mysql
juju add-relation nova-cloud-controller rabbitmq-server
juju add-relation nova-cloud-controller glance
juju add-relation nova-cloud-controller keystone
juju add-relation nova-compute mysql
juju add-relation nova-compute rabbitmq-server
juju add-relation nova-compute glance
juju add-relation nova-compute nova-cloud-controller
juju add-relation glance mysql
juju add-relation glance keystone
juju add-relation cinder keystone
juju add-relation cinder mysql
juju add-relation cinder rabbitmq-server
juju add-relation cinder nova-cloud-controller
juju add-relation openstack-dashboard keystone
juju add-relation swift-proxy swift-storage
juju add-relation swift-proxy keystone

最后,juju status的输出应该显示所有关系已经完成。OpenStack云现在正在运行,但在可以使用之前,它需要填充一些附加组件。

谢谢。URL http://insights.ubuntu.com/wp-content/uploads/UCD-latest.pdf 似乎无法访问。 - Breno Leitão