如何使用 Juju 部署 OpenStack 云?

Bry*_*gee 15 juju openstack

我想启动并运行一个测试云,为可能的 12.04 部署做准备。我对 UEC 有点搞砸了,但是很难找到任何有用的东西作为新堆栈的入门。有关于暗黑破坏神的通用文档,但在 Ubuntu 中可能有很多已经很方便的部分,特定的指南可以节省时间。

此外,尽管我很乐意,但我的预算不包括 4 到 6 千美元,用于在 Canonical 支持下运行一个小型集群。

Jor*_*tro 17

安装 OpenStack

如果您想快速启动并运行,请转至此处:

这个答案更详细地介绍了如何在 OpenStack 中使用 Juju。

范围

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

假设

  1. 使用 MAAS - 首先遵循这些说明。
  2. 枣的使用
  3. 本地网络配置 - 本文档假设您有足够的本地网络配置,包括用于访问 OpenStack 云的单独接口。理想的网络在[MAAS][OpenStack 的MAAS 文档] 中列出。

规划安装

在部署任何服务之前,评估可用资源及其使用方式非常有用。OpenStack 由许多相互关联的服务(Nova、Swift 等)组成,每个服务在主机方面都有不同的需求。例如,提供对象存储的 Swift 服务与提供计算资源的 Nova 服务的需求不同。

每个服务的最低要求和建议在官方OpenStack 操作指南中列出

使用 MAAS 和 Juju 部署 OpenStack 的推荐节点组合是系统中的所有节点都应该能够运行任何服务。这是系统稳健性的最佳实践,因为任何物理节点都会发生故障,因此可以重新调整另一个物理节点的用途来代替它。这显然扩展到任何硬件要求,例如额外的网络接口。

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

创建 OpenStack 配置文件

我们将使用 Juju Charms 来部署 OpenStack 的组件部分。每个魅力都封装了设置特定服务所需的一切。但是,单个服务有许多配置选项,我们希望更改其中的一些选项。

为了使此任务更容易和更可重现,我们将创建一个单独的配置文件,其中包含所有服务的相关选项。这是以标准 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'
Run Code Online (Sandbox Code Playgroud)

对于所有服务,我们可以将 配置openstack-origin为指向安装源。在这种情况下,我们将依赖默认值,它将指向 Ubuntu 14.04 LTS Trusty 版本的相关来源。本文档中解释了每个服务的进一步配置。

其他配置

其他设置和配置选项可用于部署 OpenStack 服务。这些在 Juju 使用的各个护身符的文档中有详细说明,可以通过访问在线 Juju Charm Store并使用页面左上角的搜索框搜索护身符来进行检查。然后在主页的“配置”下详细介绍配置设置,如下所示:

在此处输入图片说明

使用 Juju 部署 OpenStack

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

初始化 Juju

Juju 需要最少的设置。在这里,我们假设它已经被配置为与您的 MAAS 集群一起工作(有关这方面的更多信息,请参阅 [Juju 安装指南][juju_install]。

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

juju sync-tools --debug
Run Code Online (Sandbox Code Playgroud)

然后我们可以创建引导程序实例:

juju bootstrap --upload-tools --debug
Run Code Online (Sandbox Code Playgroud)

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

juju status
Run Code Online (Sandbox Code Playgroud)

这应该返回如下内容:

environment: maas
machines:
  "0":
    agent-state: started
    agent-version: 1.18.1.1
    dns-name: localhost
    instance-id: localhost
    series: trusty
Run Code Online (Sandbox Code Playgroud)

部署 OpenStack Charms

现在 Juju 引导节点已启动并运行,我们可以部署进行 OpenStack 安装所需的服务。为了在部署这些服务时正确配置这些服务,我们将利用我们之前定义的配置文件,将它与--config带有每个部署命令的开关一起传递。如果不同,请替换配置文件的名称和路径。

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

还建议juju status定期运行命令,以检查每个服务是否已安装并正常运行。Juju 会自动尝试从在线 Charm Store 中获取尽可能最好的 Charm 版本。如果您从受限或封闭的网络中安装,则可以预取所需的魅力。请参阅 [离线魅力的文档][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
Run Code Online (Sandbox Code Playgroud)

添加 OpenStack 服务之间的关系

虽然现在已经部署了这些服务,但它们还没有连接在一起。每个服务目前都是孤立存在的。我们使用该juju add-relation 命令让它们相互了解并设置任何相关的连接和协议。这种额外的配置由个人魅力本身负责。

我们应该通过设置 Keystone 授权服务及其数据库来开始添加魅力之间的关系,因为许多其他连接都需要这样做:

juju add-relation keystone mysql
Run Code Online (Sandbox Code Playgroud)

我们等到关系建立起来。完成后用 juju 状态检查它:

juju status mysql
juju status keystone
Run Code Online (Sandbox Code Playgroud)

此服务可能需要一些时间才能解决。尽管当然可以继续添加关系(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
Run Code Online (Sandbox Code Playgroud)

最后,juju status 的输出应该显示所有的关系是完整的。OpenStack 云现在正在运行,但在准备使用之前需要填充一些额外的组件。