director のインストールと使用方法

Red Hat OpenStack Platform 8

Red Hat OpenStack Platform director を使用した OpenStack クラウド作成のエンドツーエンドシナリオ

OpenStack Documentation Team

Red Hat Customer Content Services

法律上の通知

Copyright © 2015 Red Hat.
This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.

概要

本ガイドでは、エンタープライズ環境で Red Hat OpenStack Platform director を使用して Red Hat OpenStack Platform 8 をインストールする方法について説明します。これには、director のインストール、環境のプランニング、director を使用した OpenStack 環境の構築などが含まれます。

第1章 はじめに

Red Hat OpenStack Platform director は、完全な OpenStack 環境をインストールおよび管理するためのツールセットで、OpenStack のプロジェクト TripleO (OpenStack-On-OpenStack の略) をベースとしています。このプロジェクトは、OpenStack のコンポーネントを活用して、完全に機能する OpenStack 環境をインストールします。これには、OpenStack ノードとして使用するベアメタルシステムのプロビジョニングや制御を行う OpenStack のコンポーネントが含まれます。director により、効率的で堅牢性の高い、完全な Red Hat OpenStack Platform 環境を簡単にインストールできます。
Red Hat OpenStack Platform director は、アンダークラウドとオーバークラウドという 2 つの主要な概念を採用しています。以下の数項では、それぞれの概念について説明します。
Basic Layout of Undercloud and Overcloud

図1.1 アンダークラウドおよびオーバークラウドの基本レイアウト

1.1. アンダークラウド

アンダークラウドは、director の主要ノードで、OpenStack をインストールした単一システムです。このノードには、OpenStack 環境 (オーバークラウド) を構成する OpenStack ノードのプロビジョニング/管理のためのコンポーネントが含まれます。アンダークラウドを形成するコンポーネントは、以下の機能を提供します。
  • 環境プランニング: アンダークラウドは、コンピュート、コントローラー、各種ストレージロールなどの Red Hat OpenStack Platform ロールを割り当てるプランニング機能を提供します。
  • ベアメタルシステムの制御: アンダークラウドは、電源管理の制御には各ノードの Intelligent Platform Management Interface (IPMI) を使用し、ハードウェア属性の検出や OpenStack の各ノードへのインストールには PXE ベースのサービスを使用します。この機能により、ベアメタルシステムを OpenStack ノードとしてプロビジョニングする方法が提供されます。
  • オーケストレーション: アンダークラウドは、OpenStack 環境を構築するための YAML テンプレートセットの提供および読み込みを行います。
Red Hat OpenStack Platform director は、Web ベースのグラフィカルユーザーインターフェースおよびターミナルベースのコマンドラインインターフェースの両方で、これらのアンダークラウド機能を実行します。
アンダークラウドは、以下のコンポーネントで構成されます。
  • OpenStack Dashboard (Horizon): director の Web ベースのダッシュボード
  • OpenStack Bare Metal (Ironic) および OpenStack Compute (Nova): ベアメタルノードの管理
  • OpenStack Networking (Neutron) および Open vSwitch: ベアメタルノードのネットワークの制御
  • OpenStack Image Server (Glance): ベアメタルマシンへ書き込むイメージの格納
  • OpenStack Orchestation (Heat) および Puppet: director がオーバークラウドイメージをディスクに書き込んだ後のノードのオーケストレーションおよび設定
  • OpenStack Telemetry (Ceilometer): 監視とデータの収集
  • OpenStack Identity (Keystone): director のコンポーネントの認証と承認
  • MariaDB: director のデータベースバックエンド
  • RabbitMQ: director コンポーネントのメッセージキュー

1.2. オーバークラウド

オーバークラウドは、アンダークラウドを使用して構築した Red Hat OpenStack Platform 環境で、以下のノード種別の 1 つまたは複数で構成されます。
  • コントローラー: OpenStack 環境に管理、ネットワーク、高可用性機能を提供するノード。理想的な OpenStack 環境には、高可用性のクラスターに 3 つのコントローラーノードが設定されていることが推奨されます。
    デフォルトのコントローラーノードには、Horizon、Keystone、Nova API、Neutron Server、Open vSwitch、Glance、Cinder Volume、Cinder API、Swift Storage、Swift Proxy、Heat Engine、Heat API、Ceilometer、MariaDB、RabbitMQ のコンポーネントが含まれています。また、コントローラーは高可用性機能に Pacemaker や Galera も使用します。
  • コンピュート: これらのノードは OpenStack 環境にコンピュートリソースを提供します。環境を徐々にスケーリングするにはコンピュートノードをさらに追加します。
    デフォルトのコンピュートノードには、Nova、Compute、Nova KVM、Ceilometer Agent、Open vSwitch といったコンポーネントが含まれます。
  • ストレージ: OpenStack 環境にストレージを提供するノード。これには、以下のストレージ用のノードが含まれます。
    • Ceph Storage ノード: ストレージクラスターを構成するために使用します。各ノードには、Ceph Object Storage Daemon (OSD) が含まれており、Ceph Storage ノードをデプロイする場合には、director により Ceph Monitor がコンピュートノードにインストールされます。
    • Block storage (Cinder): HA コントローラーノードの外部ブロックストレージとして使用します。このノードには、Cinder Volume、Ceilometer Agent、Open vSwitch といったコンポーネントが含まれます。
    • Object storage (Swift): HA コントローラーノードの外部オブジェクトストレージとして使用します。このノードには、Cinder Storage、Ceilometer Agent、Open vSwitch といったコンポーネントが含まれます。

1.3. 高可用性

Red Hat OpenStack Platform director は、OpenStack Platform 環境に高可用性サービスを提供するためにコントローラーノードクラスターを使用します。director は、各コントローラーノードのコンポーネントの複製セットをインストールし、単一サービスとして管理します。このタイプのクラスター設定では、1 つのコントローラーノードが機能しなくなった場合にフォールバックして、OpenStack のユーザーがある程度、継続して操作を行えるようにします。
OpenStack Platform director は、複数の主要なソフトウェアを使用して、コントローラーノード上のコンポーネントを管理します。
  • Pacemaker: Pacemaker はクラスターリソースマネージャーで、クラスター内の全ノードにおける OpenStack コンポーネントの可用性を管理/監視します。
  • HA Proxy: クラスターに負荷分散およびプロキシーサービスを提供します。
  • Galera: クラスター全体の OpenStack Platform データベースを複製します。
  • Memcached: データベースのキャッシュを提供します。

注記

Red Hat OpenStack Platform director は複数のコントローラーノードの高可用性を一括に自動設定します。ただし、フェンシングや電源管理制御を有効化するには、ノードを手動で設定する必要があります。本ガイドでは、これらの手順を記載しています。

1.4. Ceph Storage

一般的に、OpenStack を使用する大規模な組織では、数千以上のクライアントにサービスを提供します。OpenStack クライアントは、ブロックストレージリソースを消費する際には、それぞれに固有のニーズがある可能性が高く、Glance (イメージ)、Cinder (ボリューム)、Nova (コンピュート) を単一ノードにデプロイすると、数千以上のクライアントがある大規模なデプロイメントで管理することができなくなります。このような課題は、OpenStack をスケールアウトすることによって解決できます。
ただし、実際には、Red Hat Ceph Storage などのソリューションを活用して、ストレージ層を仮想化する必要もでてきます。これにより、Red Hat OpenStack Platform のストレージ層を数十テラバイト規模からペタバイトさらにはエクサバイトのストレージにスケーリングすることが可能です。Red Hat Ceph Storage は、市販のハードウェアを使用しながらも、高可用性/高パフォーマンスのストレージ仮想化層を提供します。仮想化によってパフォーマンスが低下するというイメージがありますが、Ceph はブロックデバイスイメージをクラスター全体でオブジェクトとしてストライプ化するため、大きい Ceph のブロックデバイスイメージはスタンドアロンのディスクよりもパフォーマンスが優れているということになります。Ceph Block Device では、パフォーマンスを強化するために、キャッシュ、Copy On Write クローン、Copy ON Read クローンもサポートされています。
Red Hat Ceph Storage に関する情報は、Red Hat Ceph Storage を参照してください。

第2章 要件

本章では、director を使用して Red Hat OpenStack Platform をプロビジョニングする環境をセットアップするための主要な要件を記載します。これには、director のセットアップ/アクセス要件や OpenStack サービス用に director がプロビジョニングするホストのハードウェア要件が含まれます。

2.1. 環境要件

最低要件

  • Red Hat OpenStack Platform director 用のホストマシン 1 台
  • Red Hat OpenStack Platform コンピュートノード用のホストマシン 1 台
  • Red Hat OpenStack Platform コントローラーノード用のホストマシン 1 台

推奨要件

  • Red Hat OpenStack Platform director 用のホストマシン 1 台
  • Red Hat OpenStack Platform コンピュートノード用のホストマシン 3 台
  • Red Hat OpenStack Platform コントローラーノード用のホストマシン 3 台
  • クラスター内に Red Hat Ceph Storage ノード用のホストマシン 3 台
以下の点に注意してください。
  • 全ノードにはベアメタルシステムを使用することを推奨します。最低でも、コンピュートノードにはベアメタルシステムが必要です。
  • director は電源管理制御を行うため、オーバークラウドのベアメタルシステムにはすべて、Intelligent Platform Management Interface (IPMI) が必要です。

2.2. アンダークラウドの要件

director をホストするアンダークラウドシステムは、オーバークラウド内の全ノードのプロビジョニングおよび管理を行います。
  • Intel 64 または AMD64 CPU 拡張機能をサポートする、8 コア 64 ビット x86 プロセッサー
  • 最小 16 GB の RAM
  • 最小 40 GB の空きディスク領域
  • 最小 2 枚の 1 Gbps ネットワークインターフェースカード。ただし、特にオーバークラウド環境で多数のノードをプロビジョニングする場合には、プロビジョニングネットワークの トラフィック用に 10 Gbps インターフェースを使用することを推奨します。
  • ホストのオペレーティングシステムに Red Hat Enterprise Linux 7.2 がインストール済みであること

2.3. ネットワーク要件

アンダークラウドのホストには、最低でも 2 つのネットワークが必要です。
  • プロビジョニングネットワーク: これは、director がオーバークラウドノードのプロビジョニング/管理に使用するプライベートネットワークです。プロビジョニングネットワークは、オーバークラウドで使用するベアメタルシステムの検出がしやすくなるように、DHCP および PXE ブート機能を提供します。理想的には、director が PXE ブートおよび DHCP の要求に対応できるように、このネットワークはトランキングされたインターフェースでネイティブ VLAN を使用する必要があります。これは、Intelligent Platform Management Interface (IPMI) での全オーバークラウドノードの電源管理制御に使用するネットワークでもあります。
  • 外部ネットワーク: 全ノードへのリモート接続に使用する別個のネットワーク。このネットワークに接続するこのインターフェースには、静的または外部の DHCP サービス経由で動的に定義された、ルーティング可能な IP アドレスが必要です。
これは、必要なネットワークの最小数を示します。ただし、director は他の Red Hat OpenStack Platform ネットワークトラフィックをその他のネットワーク内に分離することができます。Red Hat OpenStack Platform は、ネットワークの分離に物理インターフェースとタグ付けされた VLAN の両方をサポートしています。ネットワークの分離に関する詳しい情報は、「ネットワークのプランニング」を参照してください。
以下の点に注意してください。
  • すべてのマシンに少なくとも 2 つの NIC が必要です。標準的な最小設定の場合には、以下のいずれかを使用します。
    • プロビジョニングネットワーク用の NIC を 1 つと、外部ネットワーク用の NIC を 1 つ。
    • ネイティブの VLAN 上にプロビジョニングネットワーク用の NIC を 1 つと、異なる種別のオーバークラウドネットワークのサブネットを使用するタグ付けされた VLAN 用の NIC を 1 つ。
  • 追加の物理 NIC は、個別のネットワークの分離、ボンディングインターフェースの作成、タグ付された VLAN トラフィックの委譲に使用することができます。
  • ネットワークトラフィックの種別を分離するのに VLAN を使用している場合には、802.1Q 標準をサポートするスイッチを使用してタグ付けされた VLAN を提供します。
  • オーバークラウドの作成時に NIC を参照する場合は、全オーバークラウドマシンで 1 つの名前を使用します。理想としては、混乱を避けるため、対象のネットワークごとに、各システムで同じ NIC を使用してください。たとえば、プロビジョニングネットワークにはプライマリー NIC を使用して、OpenStack サービスにはセカンダリー NIC を使用します。
  • プロビジョニングネットワークの NIC は director マシン上でリモート接続に使用する NIC とは異なります。director のインストールでは、プロビジョニング NIC を使用してブリッジが作成され、リモート接続はドロップされます。director システムへリモート接続する場合には、外部 NIC を使用します。
  • プロビジョニングネットワークには、環境のサイズに適した IP 範囲が必要です。以下のガイドラインを使用して、この範囲に含めるべき IP アドレスの数を決定してください。
    • プロビジョニングネットワークに接続されているノード 1 台につき最小で 1 IP アドレスを含めます。
    • 高可用性を設定する予定がある場合には、クラスターの仮想 IP 用に追加の IP アドレスを含めます。
    • 環境のスケーリング用の追加の IP アドレスを範囲に追加します。

    注記

    プロビジョニングネットワーク上で IP アドレスが重複するのを避ける必要があります。 詳しい説明は、「プロビジョニングネットワークでの IP アドレスの競合に対するトラブルシューティング」を参照してください。

    注記

    ストレージ、プロバイダー、テナントネットワークの IP アドレスの使用範囲をプランニングすることに関する情報は、ネットワークガイドを参照してください。
  • すべてのオーバークラウドシステムをプロビジョニング NIC から PXE ブートするように設定して、同システム上の外部 NIC およびその他の NIC の PXE ブートを無効にします。また、プロビジョニング NIC の PXE ブート は、ハードディスクや CD/DVD ドライブよりも優先されるように、起動順序の最上位に指定します。
  • プロビジョニングネットワークに接続された Intelligent Platform Management Interface (IPMI) により、director は各ノードの電源管理を制御できるので、オーバークラウドのベアメタルシステムにはすべて IPMI が必要です。
  • 各オーバークラウドシステムの詳細 (プロビジョニング NIC の MAC アドレス、IPMI NIC の IP アドレス、IPMI ユーザー名、IPMI パスワード) をメモしてください。この情報は、後ほどオーバークラウドノードの設定時に役立ちます。

重要

OpenStack Platform の実装のセキュリティーレベルは、その環境のセキュリティーレベルと同等です。ネットワーク環境内の適切なセキュリティー原則に従って、ネットワークアクセスが正しく制御されるようにします。以下に例を示します。
  • ネットワークのセグメント化を使用して、ネットワークトラフィックを軽減し、機密データを分離します。フラットなネットワークはセキュリティーレベルがはるかに低くなります。
  • サービスアクセスとポートを最小限に制限します。
  • 適切なファイアウォールルールとパスワードが使用されるようにします。
  • SELinux が有効化されていることを確認します。
システムのセキュリティー保護については、以下のドキュメントを参照してください。

2.4. オーバークラウドの要件

以下の項では、オーバークラウドのインストール内の個別システムおよびノードの要件について詳しく説明します。

2.4.1. コンピュートノードの要件

コンピュートノードは、仮想マシンインスタンスが起動した後にそれらを稼働させる役割を果たします。コンピュートノードは、ハードウェアの仮想化をサポートしている必要があります。また、ホストする仮想マシンインスタンスの要件をサポートするのに十分なメモリーとディスク容量も必要です。
プロセッサー
Intel 64 または AMD64 CPU 拡張機能をサポートする 64 ビット x86 プロセッサーで Intel VT または AMD-V のハードウェア仮想化拡張機能が有効化されていること。このプロセッサーには最小でも 4 つのコアが搭載されていることを推奨しています。
メモリー
最小 6 GB の RAM
この要件には、仮想マシンインスタンスに割り当てるメモリー容量に基づいて、追加の RAM を加算します。
ディスク領域
最小 40 GB の空きディスク領域
ネットワークインターフェースカード
最小 1 枚の 1 Gbps ネットワークインターフェースカード (実稼働環境では最低でも NIC を 2 枚使用することを推奨)。タグ付けされた VLAN トラフィックを委譲する場合や、ボンディングインターフェース向けの場合には追加のネットワークインターフェースを使用します。
Intelligent Platform Management Interface (IPMI)
各コンピュートノードには、サーバーのマザーボード上に IPMI 機能が必要です。

2.4.2. コントローラーノードの要件

コントローラーノードは、RHEL OpenStack Platform 環境の中核となるサービス (例: Horizon Dashboard、バックエンドのデータベースサーバー、Keystone 認証、高可用性サービスなど) をホストする役割を果たします。
プロセッサー
Intel 64 または AMD64 CPU 拡張機能をサポートする 64 ビット x86 プロセッサー
メモリー
最小 6 GB の RAM
ディスク領域
最小 40 GB の空きディスク領域
ネットワークインターフェースカード
最小 2 枚の 1 Gbps ネットワークインターフェースカード。タグ付けされた VLAN トラフィックを委譲する場合や、ボンディングインターフェース向けの場合には追加のネットワークインターフェースを使用します。
Intelligent Platform Management Interface (IPMI)
各コントローラーノードには、サーバーのマザーボード上に IPMI 機能が必要です。

2.4.3. Ceph Storage ノードの要件

Ceph Storage ノードは、RHEL OpenStack Platform 環境でオブジェクトストレージを提供する役割を果たします。
プロセッサー
Intel 64 または AMD64 CPU 拡張機能をサポートする 64 ビット x86 プロセッサー
メモリー
メモリー要件はストレージ容量によって異なります。ハードディスク容量 1 TB あたり最小で 1 GB のメモリーを使用するのが理想的です。
ディスク領域
ストレージ要件はメモリーの容量によって異なります。ハードディスク容量 1 TB あたり最小で 1 GB のメモリーを使用するのが理想的です。
ディスクのレイアウト
推奨される Red Hat Ceph Storage ノードの設定には、以下のようなディスクレイアウトが必要です。
  • /dev/sda: root ディスク。director は、主なオーバークラウドイメージをディスクにコピーします。
  • /dev/sdb: ジャーナルディスク。このディスクは、/dev/sdb1/dev/sdb2/dev/sdb3 などのように、Ceph OSD 向けにパーティションを分割します。ジャーナルディスクは通常、システムパフォーマンス向上に役立つ Solid State Drive (SSD) です。
  • /dev/sdc 以降: OSD ディスク。ストレージ要件で必要な数のディスクを使用します。
本ガイドには、Ceph Storage ディスクを director にマッピングするために必要な手順を記載しています。
ネットワークインターフェースカード
最小で 1 x 1 Gbps ネットワークインターフェースカード (実稼働環境では、最低でも NIC を 2 つ以上使用することが推奨です)。タグ付けされた VLAN トラフィックを委譲する場合や、ボンディングインターフェース向けの場合には追加のネットワークインターフェースを使用します。特に大量のトラフィックにサービスを提供する OpenStack Platform 環境を構築する場合に、ストレージノードには 10 Gbps インターフェースを使用するように推奨します。
Intelligent Platform Management Interface (IPMI)
各 Ceph ノードには、サーバーのマザーボード上に IPMI 機能が必要です。

重要

director は、ジャーナルディスク上にはパーティションを作成しません。これらのジャーナルパーティションは、director が Ceph Storage ノードをデプロイする前に手動で作成しておく必要があります。
Ceph Storage OSD およびジャーナルのパーティションには、GPT ディスクラベルが必要です。このラベルも、カスタマイズの前に設定する必要があります。たとえば、Ceph Storage ホストとなるマシンで以下のコマンドを実行して、ディスクまたはパーティションの GPT ディスクラベルを作成します。
# parted [device] mklabel gpt

2.5. リポジトリーの要件

アンダークラウドもオーバークラウドも、Red Hat コンテンツ配信ネットワーク (CDN) または Red Hat Satellite 5 または 6 を利用した Red Hat リポジトリーへのアクセスが必要です。Red Hat Satelite サーバーを使用する場合は、必要なリポジトリーをお使いの OpenStack Platform 環境に同期してください。以下の CDN チャネル名一覧をガイドとして使用してください。

表2.1 OpenStack Platform リポジトリー

名前
リポジトリー
要件の説明
Red Hat Enterprise Linux 7 Server (RPMS)
rhel-7-server-rpms
ベースオペレーティングシステムのリポジトリー
Red Hat Enterprise Linux 7 Server - Extras (RPMs)
rhel-7-server-extras-rpms
Red Hat OpenStack Platform の依存関係が含まれます。
Red Hat Enterprise Linux 7 Server - RH Common (RPMs)
rhel-7-server-rh-common-rpms
Red Hat OpenStack Platform のデプロイと設定ツールが含まれます。
Red Hat Satellite Tools for RHEL 7 Server RPMs x86_64
rhel-7-server-satellite-tools-6.1-rpms
Red Hat Satellite 6 でのホスト管理ツール
Red Hat Enterprise Linux High Availability (for RHEL 7 Server) (RPMs)
rhel-ha-for-rhel-7-server-rpms
Red Hat Enterprise Linux の高可用性ツール。コントローラーノードの高可用性に使用します。
Red Hat Enterprise Linux OpenStack Platform 8 director for RHEL 7 (RPMs)
rhel-7-server-openstack-8-director-rpms
Red Hat OpenStack Platform director のリポジトリー
Red Hat Enterprise Linux OpenStack Platform 8 for RHEL 7 (RPMs)
rhel-7-server-openstack-8-rpms
コアとなる Red Hat OpenStack Platform リポジトリー
Red Hat Ceph Storage OSD 1.3 for Red Hat Enterprise Linux 7 Server (RPMs)
rhel-7-server-rhceph-1.3-osd-rpms
(Ceph Storage ノード向け) Ceph Storage Object Storage デーモンのリポジトリー。Ceph Storage ノードにインストールします。
Red Hat Ceph Storage MON 1.3 for Red Hat Enterprise Linux 7 Server (RPMs)
rhel-7-server-rhceph-1.3-mon-rpms
(Ceph Storage ノード向け) Ceph Storage Monitor デーモンのリポジトリー。Ceph Storage ノードを使用して OpenStack 環境にあるコントローラーノードにインストールします。

第3章 オーバークラウドのプランニング

以下の項では、ノードロールの定義、ネットワークトポロジーのプランニング、ストレージなど、Red Hat OpenStack Platform 環境のさまざまな面のプランニングに関するガイドラインを提供します。

3.1. ノードのデプロイメントロールのプランニング

director はオーバークラウドの構築に、デフォルトで複数のノード種別を提供します。これらのノード種別は以下のとおりです。
コントローラー
環境を制御するための主要なキーサービスを提供します。これには、Dashboard (Horizon)、認証 (keystone)、イメージストレージ (Glance)、ネットワーク (neutron)、オーケストレーション (Heat)、高可用性サービス (複数のコントローラーノードを使用する場合) が含まれます。基本的な Red Hat OpenStack Platform 環境には少なくとも 1 つのコントローラーノードが必要です。
コンピュート
ハイパーバイザーとして機能し、環境内で仮想マシンを実行するのに必要な処理能力を提供する物理サーバー。基本的な Red Hat OpenStack Platform 環境には少なくとも 1 つのコンピュートノードが必要です。
Ceph-Storage
Red Hat Ceph Storage を提供するホスト。Ceph Storage ホストはクラスターに追加され、クラスターをスケーリングします。このデプロイメントロールはオプションです。
Cinder-Storage
OpenStack の Cinder サービスに外部ブロックストレージを提供するホスト。このデプロイメントロールはオプションです。
Swift-Storage
OpenStack の Swift サービスに外部オブジェクトストレージを提供するホスト。このデプロイメントロールはオプションです。
以下の表には、オーバークラウドの構成例と各シナリオで使用するノードタイプの定義をまとめています。

表3.1 各種シナリオに使用するノードデプロイメントロール

コントローラー
コンピュート
Ceph-Storage
Swift-Storage
Cinder-Storage
合計
小規模のオーバークラウド
1
1
-
-
-
2
中規模のオーバークラウド
1
3
-
-
-
4
追加のオブジェクトおよびブロックストレージのある中規模のオーバークラウド
1
3
-
1
1
6
高可用性の中規模オーバークラウド
3
3
-
-
-
6
高可用性で Ceph Storage のある中規模オーバークラウド
3
3
3
-
-
9

3.2. ネットワークのプランニング

ロールとサービスを適切にマッピングして相互に正しく通信できるように、環境のネットワークトポロジーおよびサブネットのプランニングを行うことが重要です。Red Hat OpenStack Platform では、自律的に動作してソフトウェアベースのネットワーク、静的/Floating IP アドレス、DHCP を管理する Neutron ネットワークサービスを使用します。director は、オーバークラウド環境の各コントローラーノードに、このサービスをデプロイします。
Red Hat OpenStack Platform は、さまざまなサービスをマッピングして、お使いの環境の各種サブネットに割り当てられたネットワークトラフィックの種別を分類します。これらのネットワークトラフィック種別は以下のとおりです。

表3.2 ネットワーク種別の割り当て

ネットワーク種別
説明
そのネットワーク種別を使用するノード
IPMI
ノードの電源管理に使用するネットワーク。このネットワークは、アンダークラウドのインストール前に事前定義されます。
全ノード
プロビジョニング
director は、このネットワークトラフィック種別を使用して、PXE ブートで新規ノードをデプロイし、オーバークラウドベアメタルサーバーに OpenStack Platform のインストールをオーケストレーションします。このネットワークは、アンダークラウドのインストール前に事前定義されます。
全ノード
内部 API
内部 API ネットワークは、API 通信、RPC メッセージ、データベース通信経由で OpenStack のサービス間の通信を行う際に使用します。
コントローラー、コンピュート、Cinder Storage、Swift Storage
テナント
Neutron は、VLAN 分離 (各テナントネットワークがネットワーク VLAN) または VXLAN か GRE 経由のトンネリングを使用した独自のネットワークを各テナントに提供します。ネットワークトラフィックは、テナントのネットワークごとに分割されます。テナントネットワークにはそれぞれ IP サブネットが割り当てられています。また、ネットワーク名前空間が複数あると、複数のテナントネットワークが同じアドレスを使用できるので、競合は発生しません。
コントローラー、コンピュート
ストレージ
Block Storage、NFS、iSCSI など。理想的には、これはパフォーマンスの関係上、全く別のスイッチファブリックに分離します。
全ノード
ストレージ管理
OpenStack Object Storage (swift) は、このネットワークを使用して、参加するレプリカノード間でデータオブジェクトを同期します。プロキシーサービスは、ユーザー要求と背後にあるストレージ層の間の仲介インターフェースとして機能します。プロキシーは、受信要求を受け取り、必要なレプリカの位置を特定して要求データを取得します。Ceph バックエンドを使用するサービスは、Ceph と直接対話せずにフロントエンドのサービスを使用するため、ストレージ管理ネットワーク経由で接続を確立します。RBD ドライバーは例外で、このトラフィックは直接 Ceph に接続する点に注意してください。
コントローラー、Ceph Storage、Cinder Storage、Swift Storage
外部
グラフィカルシステム管理用の OpenStack Dashboard (Horizon)、OpenStack サービス用のパブリック API をホストして、インスタンスへの受信トラフィック向けに SNAT を実行します。外部ネットワークがプライベート IP アドレスを使用する場合には (RFC-1918 に準拠)、インターフェースからのトラフィックには、さらに NAT を実行する必要があります。
コントローラー
Floating IP
受信トラフィックが Floating IP アドレスとテナントネットワーク内のインスタンスに実際に割り当てられた IP アドレスとの間の 1 対 1 の IP アドレスマッピングを使用してインスタンスに到達できるようにします。外部 ネットワークからは分離した VLAN 上で Floating IP をホストする場合には、Floating IP VLAN をコントローラーノードにトランキングして、オーバークラウドの作成後に Neutron を介して VLAN を追加します。これにより、複数のブリッジに接続された複数の Floating IP ネットワークを作成する手段が提供されます。VLAN は、トランキングされますが、インターフェースとしては設定されません。その代わりに、Neutron は各 Floating IP ネットワークに選択したブリッジ上の VLAN セグメンテーション ID を使用して、OVS ポートを作成します。
コントローラー
一般的な Red Hat OpenStack Platform のシステム環境では通常、ネットワーク種別の数は物理ネットワークのリンク数を超えます。全ネットワークを正しいホストに接続するには、オーバークラウドは VLAN タグ付けを使用して、1 つのインターフェースに複数のネットワークを提供します。ネットワークの多くは、サブネットが分離されていますが、インターネットアクセスまたはインフラストラクチャーにネットワーク接続ができるようにルーティングを提供するレイヤー 3 のゲートウェイが必要です。

注記

Neutron VLAN モードを使用し、デプロイ時にトンネリングが無効化される場合でも、テナント VLAN (GRE および VXLAN トンネリング用) をデプロイすることを推奨します。これには、デプロイ時にマイナーなカスタマイズを行う必要があり、将来ユーティリティーネットワークまたは仮想化ネットワークとしてトンネルネットワークを使用するためのオプションが利用可能な状態になります。VLAN を使用してテナントネットワークを作成することは変わりませんが、テナントの VLAN を消費せずに特別な用途のネットワーク用に VXLAN トンネルを作成することも可能です。また、テナント VLAN を使用するデプロイメントに VXLAN 機能を追加することは可能ですが、サービスを中断せずにテナント VLAN を既存のオーバークラウドに追加することはできません。
director は、トラフィック種別の中から 5 つを特定のサブネットまたは VLAN にマッピングする方法を提供します。このようなトラフィック種別には、以下が含まれます。
  • 内部 API
  • ストレージ
  • ストレージ管理
  • テナントネットワーク
  • 外部
未割り当てのネットワークは、プロビジョニングネットワークと同じサブネットに自動的に割り当てられます。
下図では、ネットワークが個別の VLAN に分離されたネットワークトポロジーの例を紹介しています。各オーバークラウドノードは、ボンディングで 2 つ (nic2 および nic3) のインターフェースを使用して、対象の VLAN 経由でこれらのネットワークを提供します。また、各オーバークラウドのノードは、ネイティブの VLAN (nic1) を使用するプロビジョニングネットワークでアンダークラウドと通信します。
Example VLAN Topology using Bonded Interfaces

図3.1 ボンディングインターフェースを使用する VLAN トポロジーの例

以下の表は、異なるネットワークのレイアウトをマッピングするネットワークトラフィック例が記載されています。

表3.3 ネットワークマッピング

マッピング
インターフェースの総数
VLAN の総数
外部アクセスのあるフラットネットワーク
ネットワーク 1: プロビジョニング、内部 API、ストレージ、ストレージ管理、テナントネットワーク
ネットワーク 2: 外部、Floating IP (オーバークラウドの作成後にマッピング)
2
2
分離ネットワーク
ネットワーク 1: プロビジョニング
ネットワーク 2: 内部 API
ネットワーク 3: テナントネットワーク
ネットワーク 4: ストレージ
ネットワーク 5: ストレージ管理
ネットワーク 6: 外部、Floating IP (オーバークラウドの作成後にマッピング)
3 (ボンディングインターフェース 2 つを含む)
6

3.3. ストレージのプランニング

director は、オーバークラウド環境にさまざまなストレージオプションを提供します。オプションは以下のとおりです。
Ceph Storage ノード
director は、Red Hat Ceph Storage を使用して拡張可能なストレージノードセットを作成します。オーバークラウドは、各種ノードを以下の目的で使用します。
  • イメージ: Glance は仮想マシンのイメージを管理します。イメージは変更できないため、OpenStack はイメージバイナリーブロブとして処理し、それに応じてイメージをダウンロードします。Ceph Block Device でイメージを格納するには、Glance を使用することができます。
  • ボリューム: Cinder ボリュームはブロックデバイスです。OpenStack は、仮想マシンの起動や、実行中の仮想マシンへのボリュームのアタッチにボリュームを使用し、Cinder サービスを使用してボリュームを管理します。さらに、イメージの CoW (Copy-on-Write) のクローンを使用して仮想マシンを起動する際には Cinder を使用します。
  • ゲストディスク: ゲストディスクは、ゲストオペレーティングシステムのディスクです。デフォルトでは、Nova で仮想マシンを起動すると、ディスクは、ハイパーバイザーのファイルシステム上のファイルとして表示されます (通常 /var/lib/nova/instances/<uuid>/ の配下)。Cinder を使用せずに直接 Ceph 内にある全仮想マシンを起動することができます。これは、ライブマイグレーションのプロセスで簡単にメンテナンス操作を実行できるため好都合です。また、ハイパーバイザーが停止した場合には、nova evacuate をトリガーして仮想マシンをほぼシームレスに別の場所で実行することもできるので便利です。

重要

Ceph では、仮想マシンディスクのホスティングに対する QCOW2 のサポートはありません。Ceph で仮想マシンを起動するには (一時バックエンドまたはボリュームからの起動)、Glance のイメージ形式は RAW でなければなりません。
その他の情報については、『Red Hat Ceph Storage Architecture Guide』を参照してください。
Swift Storage ノード
director は、外部オブジェクトストレージノードを作成します。これは、オーバークラウド環境でコントローラーノードをスケーリングまたは置き換える必要があるが、高可用性クラスター外にオブジェクトストレージを保つ必要がある場合に便利です。

第4章 アンダークラウドのインストール

Red Hat OpenStack Platform 環境の構築では、最初にアンダークラウドシステムに director をインストールします。これには、必要なサブスクリプションやリポジトリーを有効化するために複数の手順を実行する必要があります。

4.1. director のインストールユーザーの作成

director のインストールプロセスでは、root 以外のユーザーがコマンドを実行する必要があります。以下のコマンドを使用して、stack という名前のユーザーを作成して、パスワードを設定します。
[root@director ~]# useradd stack
[root@director ~]# passwd stack  # specify a password
sudo の使用時にはパスワードなしでログインできるようにします。
[root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
[root@director ~]# chmod 0440 /etc/sudoers.d/stack
新規作成した stack ユーザーに切り替えます。
[root@director ~]# su - stack
[stack@director ~]$
stack ユーザーで director のインストールを続行します。

4.2. テンプレートとイメージ用のディレクトリーの作成

director はシステムのイメージと Heat テンプレートを使用して、オーバークラウド環境を構築します。これらのファイルを整理するには、イメージとテンプレート用にディレクトリーを作成するように推奨します。
$ mkdir ~/images
$ mkdir ~/templates
本書の他の項では、2 つのディレクトリーを使用して特定のファイルを保存します。

4.3. システムのホスト名設定

director では、インストールと設定プロセスにおいて完全修飾ドメイン名が必要です。つまり、director ホストのホスト名を設定する必要がある場合があります。以下のコマンドで、ホストのホスト名をチェックします。
$ hostname    # Checks the base hostname
$ hostname -f # Checks the long hostname (FQDN)
必要に応じて、hostnamectl を使用してホスト名を設定します。
$ sudo hostnamectl set-hostname manager.example.com
$ sudo hostnamectl set-hostname --transient manager.example.com
director では、/etc/hosts にシステムのホスト名とベース名も入力する必要があります。たとえば、システムの名前が manager.example.com の場合には、/etc/hosts には以下のように入力する必要があります。
127.0.0.1   manager.example.com manager localhost localhost.localdomain localhost4 localhost4.localdomain4

4.4. システムの登録

Red Hat OpenStack Platform director をインストールするには、まず最初に Red Hat サブスクリプションマネージャーを使用してホストシステムを登録し、必要なチャンネルをサブスクライブします。

手順4.1 サブスクリプションマネージャーを使用して必要なチャンネルをサブスクライブする手順

  1. コンテンツ配信ネットワークにシステムを登録します。プロンプトが表示されたら、カスタマーポータルのユーザー名とパスワードを入力します。
    $ sudo subscription-manager register
  2. Red Hat OpenStack Platform director のエンタイトルメントプールを検索します。
    $ sudo subscription-manager list --available --all
    
  3. 上記のステップで特定したプール ID を使用して、Red Hat OpenStack Platform 8 のエンタイトルメントをアタッチします。
    $ sudo subscription-manager attach --pool=pool_id
  4. デフォルトのリポジトリーをすべて無効にしてから、必要な Red Hat Enterprise Linux リポジトリーを有効にします。
    $ sudo subscription-manager repos --disable=*
    $ sudo subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-openstack-8-rpms --enable=rhel-7-server-openstack-8-director-rpms --enable rhel-7-server-rh-common-rpms
    
    これらのリポジトリーには、director のインストールに必要なパッケージが含まれます。
  5. システムで更新を実行して、ベースシステムパッケージを最新の状態にします。
    $ sudo yum update -y
    $ sudo reboot
システムは、director をインストールできる状態になりました。

4.5. director パッケージのインストール

以下のコマンドを使用して、director のインストールおよび設定に必要なコマンドラインツールをインストールします。
[stack@director ~]$ sudo yum install -y python-tripleoclient
これにより、director のインストールに必要なパッケージがすべてインストールされます。

4.6. director の設定

director のインストールプロセスには、ネットワーク設定を判断する特定の設定が必要です。この設定は、stack ユーザーのホームディレクトリーに undercloud.conf として配置されているテンプレートに保存されています。
Red Hat は、インストールに必要な設定を判断しやすいように、基本テンプレートを提供しています。このテンプレートは、 stack ユーザーのホームディレクトリーにコピーします。
$ cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
基本テンプレートには、以下のパラメーターが含まれています。
local_ip
director のプロビジョニング NIC 用に定義する IP アドレス。これは、director が DHCP および PXE ブートサービスに使用する IP アドレスでもあります。環境内の既存の IP アドレスまたはサブネットと競合するなど、プロビジョニングネットワークに別のサブネットを使用する場合以外は、この値はデフォルトの 192.0.2.1/24 のままにしてください。
network_gateway
オーバークラウドインスタンスのゲートウェイ。外部ネットワークにトラフィックを転送するアンダークラウドのホストです。director に別の IP アドレスを使用する場合または外部ゲートウェイを直接使用する場合には、この値はデフォルト (192.0.2.1) のままにします。

注記

director の設定スクリプトは、適切な sysctl カーネルパラメーターを使用して IP フォワーディングを自動的に有効にする操作も行います。
undercloud_public_vip
director のパブリック API 用に定義する IP アドレス。他の IP アドレスまたはアドレス範囲と競合しないプロビジョニングネットワークの IP アドレスを使用します。たとえば、192.0.2.2 で、director の設定により、この IP アドレスは /32 ネットマスクを使用するルーティングされた IP アドレスとしてソフトウェアブリッジに接続されます。
undercloud_admin_vip
director の管理 API 用に定義する IP アドレス。他の IP アドレスまたはアドレス範囲と競合しないプロビジョニングネットワークの IP アドレスを使用します。たとえば、192.0.2.3 で、director の設定により、この IP アドレスは/32 ネットマスクを使用するルーティングされた IP アドレスとしてソフトウェアブリッジに接続されます。
undercloud_service_certificate
OpenStack SSL 通信の証明書の場所とファイル名。理想的には、信頼できる認証局から、この証明書を取得します。それ以外の場合は、「付録A SSL/TLS 証明書の設定」のガイドラインを使用して独自の自己署名の証明書を作成します。これらのガイドラインには、自己署名の証明書か認証局からの証明書に拘らず、証明書の SELinux コンテキストを設定する方法が含まれています。
local_interface
director のプロビジョニング NIC 用に選択するインターフェース。これは、director が DHCP および PXE ブートサービスに使用するデバイスでもあります。どのデバイスが接続されているかを確認するには、ip addr コマンドを使用します。以下に ip addr コマンドの出力結果の例を示します。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:75:24:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.178/24 brd 192.168.122.255 scope global dynamic eth0
       valid_lft 3462sec preferred_lft 3462sec
    inet6 fe80::5054:ff:fe75:2409/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noop state DOWN
    link/ether 42:0b:c2:a5:c1:26 brd ff:ff:ff:ff:ff:ff
この例では、外部 NIC は eth0 を、プロビジョニング NIC は未設定の eth1 を使用します。今回は、local_interfaceeth1 に設定します。この設定スクリプトにより、このインターフェースが inspection_interface パラメーターで定義したカスタムのブリッジにアタッチされます。
network_cidr
オーバークラウドインスタンスの管理に director が使用するネットワーク。これはプロビジョニングネットワークです。プロビジョニングネットワークに別のサブネットを使用しない限り、この値はデフォルト (192.0.2.0/24) のままにします。
masquerade_network
外部にアクセスするためにマスカレードするネットワークを定義します。これにより、プロビジョニングネットワークにネットワークアドレス変換 (NAT) の範囲が提供され、director 経由で外部アクセスが可能になります。プロビジョニングネットワークに別のサブネットを使用しない限り、この値はデフォルト (192.0.2.0/24) のままにします。
dhcp_start, dhcp_end
オーバークラウドノードの DHCP 割り当て範囲 (開始アドレスと終了アドレス)。お使いのノードを割り当てるのに十分な IP アドレスがこの範囲に含まれるようにします。
inspection_interface
ノードのイントロスペクションに director が使用するブリッジ。これは、director の設定により作成されるカスタムのブリッジです。LOCAL_INTERFACE でこのブリッジをアタッチします。これは、デフォルトの br-ctlplane のままにします。
inspection_iprange
director のイントロスペクションサービスが PXE ブートとプロビジョニングプロセスの際に使用する IP アドレス範囲。この範囲の開始アドレスと終了アドレスの定義には、192.0.2.100,192.0.2.120 などのように、コンマ区切りの値を使用します。この範囲には、お使いのノードの IP アドレスが含まれており、dhcp_startdhcp_end の範囲と競合がないようにします。
inspection_extras
イントロスペクション時に追加のハードウェアコレクションを有効化するかどうかを定義します。イントロスペクションイメージでは python-hardware または python-hardware-detect パッケージが必要です。
inspection_runbench
ノードイントロスペクション時に一連のベンチマークを実行します。有効にするには、true に設定します。このオプションは、高度なシナリオで登録ノードのハードウェアを検査する際にベンチマーク分析を実行する場合に必要です。詳細は、「付録C プロファイルの自動タグ付け」を参照してください。
undercloud_debug
アンダークラウドサービスのログレベルを DEBUG に設定します。この値は true に設定して有効化します。
enable_tempest
検証ツールをインストールするかどうかを定義します。デフォルトは、false に設定されていますが、true で有効化することができます。
ipxe_deploy
iPXE か標準の PXE のいずれを使用するか定義します。デフォルトは true で iPXE を有効化します。false に指定すると、標準の PXE に設定されます。詳しい情報は、Red Hat カスタマーポータルの「Changing from iPXE to PXE in Red Hat OpenStack Platform director」を参照してください。
store_events
アンダークラウドの Ceilometer にイベントを保存するかどうかを定義します。
undercloud_db_password, undercloud_admin_token, undercloud_admin_password, undercloud_glance_password, など
残りのパラメーターは、全 director サービスのアクセス詳細を指定します。値を変更する必要はありません。undercloud.conf で空欄になっている場合には、これらの値は director の設定スクリプトによって自動的に生成されます。設定スクリプトの完了後には、すべての値を取得することができます。
これらのパラメーターの値は、お使いのネットワークに応じて変更してください。完了したら、ファイルを保存して以下のコマンドを実行します。
$ openstack undercloud install
このコマンドで、director の設定スクリプトを起動します。director により、追加のパッケージがインストールされ、undercloud.conf の設定に合わせてサービスを設定します。このスクリプトは、完了までに数分かかります。
設定スクリプトにより、完了時には 2 つのファイルが生成されます。
  • undercloud-passwords.conf: director サービスの全パスワード一覧
  • stackrc: director のコマンドラインツールへアクセスできるようにする初期化変数セット
stack ユーザーを初期化してコマンドラインツールを使用するには、以下のコマンドを実行します。
$ source ~/stackrc
director のコマンドラインツールが使用できるようになりました。

4.7. オーバークラウドノードのイメージの取得

director では、オーバークラウドのノードをプロビジョニングする際に、複数のディスクが必要です。必要なディスクは以下のとおりです。
  • イントロスペクションカーネルおよび ramdisk: PXE ブートでベアメタルシステムのイントロスペクションに使用
  • デプロイメントカーネルおよび ramdisk: システムのプロビジョニングおよびデプロイメントに使用
  • オーバークラウドカーネル、ramdisk、完全なイメージ: ノードのハードディスクに書き込まれるベースのオーバークラウドシステム
rhosp-director-images および rhosp-director-images-ipa パッケージからこれらのイメージを取得します。
$ sudo yum install rhosp-director-images rhosp-director-images-ipa
stack ユーザーのホーム (/home/stack/images) の images ディレクトリーに新しいイメージアーカイブをコピーします。
$ cp /usr/share/rhosp-director-images/overcloud-full-latest-8.0.tar ~/images/.
$ cp /usr/share/rhosp-director-images/ironic-python-agent-latest-8.0.tar ~/images/.
アーカイブからイメージを展開します。
$ cd ~/images
$ for tarfile in *.tar; do tar -xf $tarfile; done
これらのイメージを director にインポートします。
$ openstack overcloud image upload --image-path /home/stack/images/
このコマンドでは、bm-deploy-kernelbm-deploy-ramdiskovercloud-fullovercloud-full-initrdovercloud-full-vmlinuz のイメージを director にアップロードします。これらは、デプロイメントおよびオーバークラウド用のイメージです。また、このスクリプトにより、director の PXE サーバーにイントロスペクションイメージがインストールされます。
CLI でイメージの一覧を表示します。
$ openstack image list
+--------------------------------------+------------------------+
| ID                                   | Name                   |
+--------------------------------------+------------------------+
| 765a46af-4417-4592-91e5-a300ead3faf6 | bm-deploy-ramdisk      |
| 09b40e3d-0382-4925-a356-3a4b4f36b514 | bm-deploy-kernel       |
| ef793cd0-e65c-456a-a675-63cd57610bd5 | overcloud-full         |
| 9a51a6cb-4670-40de-b64b-b70f4dd44152 | overcloud-full-initrd  |
| 4f7e33f4-d617-47c1-b36f-cbe90f132e5d | overcloud-full-vmlinuz |
+--------------------------------------+------------------------+
この一覧では、イントロスペクション PXE イメージ (discovery-ramdisk.*) は表示されません。director は、これらのファイルを /httpboot にコピーします。
[stack@host1 ~]$ ls -l /httpboot
total 341460
-rwxr-xr-x. 1 root root   5153184 Mar 31 06:58 agent.kernel
-rw-r--r--. 1 root root 344491465 Mar 31 06:59 agent.ramdisk
-rw-r--r--. 1 root root       337 Mar 31 06:23 inspector.ipxe

4.8. アンダークラウドの Neutron サブネットでのネームサーバーの設定

オーバークラウドのノードには、DNS でホスト名が解決できるようにネームサーバーが必要です。ネットワークの分離のない標準のオーバークラウドでは、ネームサーバーはアンダークラウドの neutron サブネットで定義されます。以下のコマンドを使用して、この環境のネームサーバーを定義します。
$ neutron subnet-list
$ neutron subnet-update [subnet-uuid] --dns-nameserver [nameserver-ip]
サブネットを表示してネームサーバーを確認します。
$ neutron subnet-show [subnet-uuid]
+-------------------+-----------------------------------------------+
| Field             | Value                                         |
+-------------------+-----------------------------------------------+
| ...               |                                               |
| dns_nameservers   | 8.8.8.8                                       |
| ...               |                                               |
+-------------------+-----------------------------------------------+

重要

サービストラフィックを別のネットワークに分離する場合は、オーバークラウドのノードはネットワーク環境テンプレートの DnsServer パラメーターを使用します。これは、「ネットワーク環境ファイルの作成」の高度な設定シナリオで説明します。

4.9. アンダークラウドの設定完了

これでアンダークラウドの設定が完了しました。次の章では、ノードの登録、検査、さまざまなノードロールのタグ付けなど、オーバークラウドの基本的な設定について説明します。

第5章 基本的なオーバークラウド要件の設定

本章では、エンタープライズレベルの OpenStack Platform 環境の基本的な設定手順を説明します。基本設定のオーバークラウドには、カスタムの機能が含まれていませんが、基本的なオーバークラウドに高度な設定オプションを追加して、「6章オーバークラウドの高度なカスタマイズ設定」の説明に従い、仕様に合わせてカスタマイズすることができます。
本章の例では、すべてのノードが電源管理に IPMI を使用したベアメタルシステムとなっています。電源管理の種別およびそのオプションに関する詳細は、「付録B 電源管理ドライバー」を参照してください。

ワークフロー

  1. ノード定義のテンプレートを作成して director で空のノードを登録します。
  2. 全ノードのハードウェアを検査します。
  3. ロールにノードをタグ付けします。
  4. 追加のノードプロパティーを定義します。

要件

  • 4章アンダークラウドのインストール」で作成した director ノード
  • ノードに使用するベアメタルマシンのセット。必要なノード数は、作成予定のオーバークラウドのタイプにより異なります (オーバークラウドロールに関する情報は「ノードのデプロイメントロールのプランニング」を参照してください)。これらのマシンは、各ノード種別の要件セットに従う必要があります。これらの要件については、「オーバークラウドの要件」を参照してください。これらのノードにはオペレーティングシステムは必要ありません。director が Red Hat Enterprise Linux 7 のイメージを各ノードにコピーします。
  • ネイティブ VLAN として設定したプロビジョニングネットワーク用のネットワーク接続 1 つ。全ノードは、このネイティブに接続して、「ネットワーク要件」で設定した要件に準拠する必要があります。この章の例では、以下の IP アドレスの割り当てで、プロビジョニングサブネットとして 192.0.2.0/24 を使用します。

    表5.1 プロビジョニングネットワークの IP 割り当て

    ノード名
    IP アドレス
    MAC アドレス
    IPMI IP アドレス
    director
    192.0.2.1
    aa:aa:aa:aa:aa:aa
    コントローラー
    定義済みの DHCP
    bb:bb:bb:bb:bb:bb
    192.0.2.205
    コンピュート
    定義済みの DHCP
    cc:cc:cc:cc:cc:cc
    192.0.2.206
  • その他のネットワーク種別はすべて、OpenStack サービスにプロビジョニングネットワークを使用しますが、ネットワークトラフィックの他のタイプに追加でネットワークを作成することができます。詳しい情報は、「ネットワークの分離」を参照してください。

5.1. オーバークラウドへのノードの登録

director では、ノード定義のテンプレートが必要です。このファイル (instackenv.json) は、JSON 形式のファイルを使用して、ノードのハードウェアおよび電源管理の情報が含まれます。たとえば、2 つのノードを登録するテンプレートは、以下のようになります。
{
    "nodes":[
        {
            "mac":[
                "bb:bb:bb:bb:bb:bb"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.205"
        },
        {
            "mac":[
                "cc:cc:cc:cc:cc:cc"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.0.2.206"
        }
    ]
}
このテンプレートでは、以下の属性を使用します。
mac
ノード上のネットワークインターフェースの MAC アドレス一覧。各システムのプロビジョニング NIC の MAC アドレスのみを使用します。
pm_type
使用する電源管理ドライバー。この例では IPMI ドライバーを使用します (pxe_ipmitool)。
pm_user, pm_password
IPMI のユーザー名およびパスワード
pm_addr
IPMI デバイスの IP アドレス
cpu
(オプション) ノード上の CPU 数
memory
(オプション) メモリーサイズ (MB)
disk
(オプション) ハードディスクのサイズ (GB)
arch
(オプション) システムアーキテクチャー

注記

電源管理の種別およびそのオプションに関する詳細は、「付録B 電源管理ドライバー」を参照してください。
テンプレートの作成後に、stack ユーザーのホームディレクトリー (/home/stack/instackenv.json) にファイルを保存して、以下のコマンドを使用して director にインポートします。
$ openstack baremetal import --json ~/instackenv.json
このコマンドでテンプレートをインポートして、テンプレートから director に各ノードを登録します。
カーネルと ramdisk イメージを全ノードに割り当てます。
$ openstack baremetal configure boot
director でのノードの登録および設定が完了しました。CLI でこれらのノードの一覧を表示します。
$ ironic node-list

5.2. ノードのハードウェアの検査

ノードの登録後には、各ノードのハードウェア属性を検査します。各ノードのハードウェア属性を検査するには、以下のコマンドを実行します。
$ openstack baremetal introspection bulk start
別のターミナルウィンドウで以下のコマンドを使用してイントロスペクションの進捗状況をモニタリングします。
$ sudo journalctl -l -u openstack-ironic-inspector -u openstack-ironic-inspector-dnsmasq -u openstack-ironic-conductor -f

重要

このプロセスが最後まで実行されて正常に終了したことを確認してください。ベアメタルの場合には、通常 15 分ほどかかります。
または、各ノードに 1 回ずつ個別にイントロスペクションを実行します。ノードをメンテナンスモードに切り替えて、イントロスペクションを実行してから、メンテナンスモードから元に戻します。
$ ironic node-set-maintenance [NODE UUID] true
$ openstack baremetal introspection start [NODE UUID]
$ ironic node-set-maintenance [NODE UUID] false

5.3. プロファイルへのノードのタグ付け

各ノードのハードウェアを登録、検査した後には、特定のプロファイルにノードをタグ付けします。これらのプロファイルタグによりノードとフレーバーを照合してマッチし、フレーバーに対してデプロイメントロールが割り当てられます。アンダークラウドのインストール時に、デフォルトプロファイルのフレーバー computecontrolswift-storageceph-storageblock-storage が作成され、大半の環境で変更なしに使用することができます。

注記

ノードの多くが自動のプロファイルタグ付けを使用します。詳しい情報は、「付録C プロファイルの自動タグ付け」を参照してください。
特定のプロファイルにノードをタグ付けする場合には、各ノードの properties/capabilities パラメーターに profile オプションを追加します。たとえば、2 つのノードをタグ付けしてコントローラープロファイルとコンピュートプロファイルをそれぞれ使用するには、以下のコマンドを実行します。
$ ironic node-update 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13 add properties/capabilities='profile:compute,boot_option:local'
$ ironic node-update 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 add properties/capabilities='profile:control,boot_option:local'
profile:computeprofile:control オプションを追加することで、この 2 つのノードがそれぞれのプロファイルにタグ付けされます。
またこのコマンドは、各ノードのブートモードを定義する boot_option:local パラメーターを設定します。
ノードのタグ付けが完了した後には、割り当てたプロファイルまたはプロファイルの候補を確認します。
$ openstack overcloud profiles list

5.4. ノードの root ディスクの定義

ノードによっては、複数のディスクを使用するものもあります。つまり、プロビジョニングの際に、director は、ルートディスクに使用するディスクを特定する必要があるという意味です。以下のように、director がルートディスクを容易に特定できるように使用可能なプロパティーが複数あります。
  • model (文字列): デバイスの ID
  • vendor (文字列): デバイスのベンダー
  • serial (文字列): ディスクのシリアル番号
  • wwn (文字列): 一意のストレージ ID
  • hctl (文字列): SCSI のホスト:チャネル:ターゲット:Lun
  • size (整数):デバイスのサイズ (GB)
以下の例では、root デバイスを特定するディスクのシリアル番号を使用して、オーバークラウドイメージをデプロイするドライブを指定します。
まず、各ノードに使用予定の root ドライブのシリアル番号を検索します。ノードごとに ironic node-show コマンドを使用して、extra セクションから利用可能なブロックデバイスを特定します。たとえば、以下を使用して、全ノードとそのブロックデバイスを一覧表示します。
$ for uuid in `ironic node-list | awk '{print $2}'`; do echo "Node ID: $uuid"; ironic node-show $uuid | grep 'properties\|extra ' -A3; done
この例では、コントローラーノードに対して以下のようなディスクが出力として含まれる場合があります。
...
Node ID: 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0
| extra       | {u'newly_discovered': u'true', u'block_devices':      |
|             | {u'serials': [u'100000000', u'100000001',             |
|             | u'100000002', u'100000003', u'100000004',             |
|             | u'100000005', u'100000006', u'100000007',             |
--
| properties  | {u'cpu_arch': u'x86_64', u'root_device': {u'serial':  |
|             | u'100000005'}, u'cpus': u'16', u'capabilities':       |
|             | u'profile:control,boot_option:local',            |
|             | u'memory_mb': u'65536', u'local_gb': u'3725'}         |
...
ここでは、ドライブ毎の block_devices パラメーターと各ドライブのシリアル番号一覧として複数のブロックデバイスが表示されています。root_device は現在、シリアル番号が 100000005 に設定されています。この例では、この root デバイスを、シリアル番号が 100000000 のディスクに設定します。その際、ノードの定義の root_device パラメーターを変更する必要があります。
$ ironic node-update 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 add properties/root_device='{"serial": "100000000"}'
これにより、director が root ディスクとして使用する特定のディスクを識別しやすくなります。オーバークラウドの作成の開始時には、director はこのノードをプロビジョニングして、オーバークラウドのイメージをこのディスクに書き込みます。

5.5. 基本設定の完了

これで、オーバークラウドの基本設定で必要とされる手順が終了しました。次に、以下のいずれかを実行することができます。

重要

基本的なオーバークラウドでは、ブロックストレージにローカルの LVM ストレージを使用しますが、この設定はサポートされません。ブロックストレージには、外部ストレージソリューションを使用することを推奨します。たとえば、ブロックストレージとして NFS 共有を設定するには「NFS ストレージの設定」を参照してください。

第6章 オーバークラウドの高度なカスタマイズ設定

本章は「5章基本的なオーバークラウド要件の設定」の続きとなります。この時点では、director によりノードが登録され、オーバークラウドの作成に必要なサービスが設定されました。次に、本章の手法を使用して、オーバークラウドをカスタマイズすることができます。

6.1. Heat テンプレートについての理解

本ガイドのカスタム設定では、Heat テンプレートと環境ファイルを使用して、ネットワークの分離やネットワークインターフェースの設定など、オーバークラウドの特定の機能を定義します。本項には、Red Hat OpenStack Platform director に関連した Heat テンプレートの構造や形式を理解するための基本的な説明を記載します。

6.1.1. Heat テンプレート

director は、Heat Orchestration Template (HOT) をオーバークラウドデプロイメントプランのテンプレート形式として使用します。HOT 形式のテンプレートの多くは、YAML 形式で表現されます。テンプレートの目的は、Heat が作成するリソースのコレクションと、リソースの設定が含まれる スタック を定義して作成することです。リソースとは、コンピュートリソース、ネットワーク設定、セキュリティーグループ、スケーリングルール、カスタムリソースなどの OpenStack のオブジェクトのことです。
Heat テンプレートは、3 つのセクションから構成されています。
  • Parameters: これらは Heat に渡す設定で、スタックや値を指定しないパラメーターのデフォルト値をカスタマイズする方法を提供します。これらの設定は、テンプレートの parameters セクションで定義します。
  • Resources: これらはスタックの一部として作成/設定する固有のオブジェクトです。OpenStack には全コンポーネントに対応するコアのリソースセットが含まれています。これらの設定は、テンプレートの resources セクションで定義されます。
  • Output: これらは、スタックの作成後に Heat から渡される値です。これらの値には、Heat API またはクライアントツールを使用してアクセスすることができます。これらは、テンプレートの output セクションで定義されます。
以下に、基本的な Heat テンプレートの例を示します。
heat_template_version: 2013-05-23

description: > A very basic Heat template.

parameters:
  key_name:
    type: string
    default: lars
    description: Name of an existing key pair to use for the instance
  flavor:
    type: string
    description: Instance type for the instance to be created
    default: m1.small
  image:
    type: string
    default: cirros
    description: ID or name of the image to use for the instance

resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      name: My Cirros Instance
      image: { get_param: image }
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }

output:
  instance_name:
    description: Get the instance's name
    value: { get_attr: [ my_instance, name ] }
このテンプレートは、リソース種別 type: OS::Nova::Server を使用して、特定のフレーバー、イメージ、キーを使用する my_instance と呼ばれるインスタンスを作成します。このスタックは、My Cirros Instance と呼ばれる instance_name の値を返すことができます。
Heat がテンプレートを処理する際には、テンプレートのスタックとリソーステンプレートの子スタックセットを作成します。これにより、テンプレートで定義したメインのスタックに基づいたスタックの階層が作成されます。以下のコマンドを使用して、スタック階層を表示することができます。
$ heat stack-list --show-nested

6.1.2. 環境ファイル

環境ファイルとは、Heat テンプレートをカスタマイズする特別な種類のテンプレートです。このファイルは、3 つの主要な部分で構成されます。
  • Resource Registry: このセクションは、他の Heat テンプレートに関連付けられたカスタムのリソース名を定義します。これにより、基本的にコアリソースコレクションに存在しないカスタムのリソースを作成する方法が提供されます。これらは、環境ファイルの resource_registry セクションで定義されます。
  • Parameters: これらは、トップレベルのテンプレートのパラメーターに適用する共通設定です。たとえば、リソースレジストリーマッピングなどのネスト化されたスタックをデプロイするテンプレートがある場合には、パラメーターはトップレベルのテンプレートにのみ適用され、ネスト化されたリソースのテンプレートには適用されません。パラメーターは、環境ファイルの parameters セクションで定義されます。
  • Parameter Defaults: これらのパラメーターは、すべてのテンプレートのパラメーターのデフォルト値を変更します。たとえば、リソースレジストリーマッピングなどのネスト化されたスタックをデプロイするテンプレートがある場合には、パラメーターのデフォルトは、トップレベルのテンプレートとすべてのネスト化されたリソースを定義するテンプレートなどすべてのテンプレートに適用されます。パラメーターのデフォルトは環境ファイルの parameter_defaults セクションで定義されます。

重要

オーバークラウドのカスタムの環境ファイルを作成する場合には、parameters ではなく parameter_defaults を使用することを推奨します。これは、パラメーターがオーバークラウドのスタックテンプレートすべてに適用されるからです。
以下に基本的な環境ファイルの例を示します。
resource_registry:
  OS::Nova::Server::MyServer: myserver.yaml

parameter_defaults:
  NetworkName: my_network

parameters:
  MyIP: 192.168.0.1
たとえば、特定の Heat テンプレート (my_template.yaml) からスタックを作成する場合に、このような環境ファイル (my_env.yaml) が含まれる場合があります。my_env.yaml ファイルにより、OS::Nova::Server::MyServer と呼ばれるリソース種別が作成されます。myserver.yaml ファイルは、このリソース種別を実装して、デフォルトのタイプを上書きします。また、my_template.yaml ファイルに OS::Nova::Server::MyServer リソースを追加することができます。
MyIP は、この環境ファイルと一緒にデプロイされるメインの Heat テンプレートにのみパラメーターを適用します。この例では、my_template.yaml のパラメーターにのみ適用されます。
NetworkName は、今回の例では OS::Nova::Server::MyServer リソースやこの myserver.yaml テンプレートなど、メインの Heat テンプレート (例: my_template.yaml) と、このメインのテンプレートに含まれるリソースに関連付けられたテンプレートに適用されます。

6.1.3. コアとなるオーバークラウドの Heat テンプレート

director には、オーバークラウドのコア Heat テンプレートコレクションが含まれます。このコレクションは、/usr/share/openstack-tripleo-heat-templates に保存されています。
このテンプレートコレクションには、多数の Heat テンプレートおよび環境ファイルが含まれますが、留意すべき主要なファイルおよびディレクトリーは以下のとおりです。
  • overcloud.yaml: これはオーバークラウド環境を作成するために使用する主要なテンプレートファイルです。
  • overcloud-resource-registry-puppet.yaml: これは、オーバークラウド環境の作成に使用する主要な環境ファイルで、オーバークラウドイメージ上に保存される Puppet モジュールの設定セットを提供します。director により各ノードにオーバークラウドのイメージが書き込まれると、Heat は環境ファイルに登録されているリソースを使用して各ノードに Puppet の設定を開始します。
  • environments: オーバークラウドのデプロイメントに適用する環境ファイルのサンプルが含まれるディレクトリーです。

6.2. ネットワークの分離

director は、分離したオーバークラウドネットワークを設定する方法を提供します。つまり、オーバークラウド環境はネットワークトラフィック種別を異なるネットワークに分離して、個別のネットワークインターフェースまたはボンディングにネットワークトラフィックを割り当てます。分離ネットワークワークを設定した後に、director は OpenStack サービスが分離ネットワークを使用するように設定します。分離ネットワークが設定されていない場合には、サービスはすべて、プロビジョニングネットワーク上で実行されます。
この例では、サービスごとに別のネットワークを使用します。
  • ネットワーク 1: プロビジョニング
  • ネットワーク 2: 内部 API
  • ネットワーク 3: テナントネットワーク
  • ネットワーク 4: ストレージ
  • ネットワーク 5: ストレージ管理
  • ネットワーク 6: 外部、Floating IP (オーバークラウドの作成後にマッピング)
この例では、各オーバークラウドノードは、タグ付けられた VLAN でネットワークを提供するために、ボンディング内の残りのネットワークインターフェース 2 つを使用します。以下のネットワーク割り当ては、このボンディングに適用されます。

表6.1 ネットワークサブネットおよび VLAN 割り当て

ネットワーク種別
サブネット
VLAN
内部 API
172.16.0.0/24
201
テナント
172.17.0.0/24
202
ストレージ
172.18.0.0/24
203
ストレージ管理
172.19.0.0/24
204
管理
172.20.0.0/24
205
外部 / Floating IP
10.1.1.0/24
100
ネットワーク設定の他のサンプルについては「付録E ネットワークインターフェースのテンプレート例」を参照してください。

6.2.1. カスタムのインターフェーステンプレートの作成

オーバークラウドのネットワーク設定には、ネットワークインターフェースのテンプレートセットが必要です。これらのテンプレートをカスタマイズして、ロールごとにノードのインターフェースを設定します。このテンプレートは YAML 形式の標準の Heat テンプレート (「「Heat テンプレートについての理解」」を参照) で、director にはすぐに使用開始できるように、テンプレートサンプルが含まれています。
  • /usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans: このディレクトリーには、ロールごとに VLAN が設定された単一 NIC のテンプレートが含まれます。
  • /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans: このディレクトリーには、ロール別のボンディング NIC 設定のテンプレートが含まれます。
  • /usr/share/openstack-tripleo-heat-templates/network/config/multiple-nics: このディレクトリーには、ロール毎に NIC を 1 つ使用して複数の NIC 設定を行うためのテンプレートが含まれています。
  • /usr/share/openstack-tripleo-heat-templates/network/config/single-nic-linux-bridge-vlans: このディレクトリーには、Open vSwitch ブリッジの代わりに Linux ブリッジを使用してロールベースで単一の NIC に複数の VLAN が接続される構成のテンプレートが含まれます。
この例では、デフォルトのボンディング NIC の設定サンプルをベースとして使用します。/usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans にあるバージョンをコピーします。
$ cp -r /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans ~/templates/nic-configs
このコマンドによりローカルの Heat テンプレートが作成され、このテンプレートで各ロールのボンディングネットワークインターフェース設定を定義します。各テンプレートには、標準の parametersresourcesoutput が含まれます。今回のシナリオでは、resources セクションのみを編集します。各 resources セクションは、以下のように開始されます。
resources:
OsNetConfigImpl:
  type: OS::Heat::StructuredConfig
  properties:
    group: os-apply-config
    config:
      os_net_config:
        network_config:
このコマンドでは、os-apply-config コマンドと os-net-config サブコマンドがノードのネットワークプロパティーを設定するように要求が作成されます。network_config セクションには、種別順に並べられたカスタムのインターフェース設定が含まれます。これらの種別には以下が含まれます。
interface
単一のネットワークインターフェースを定義します。この設定では、実際のインターフェース名 (eth0、eth1、enp0s25) または番号付きのインターフェース (nic1、nic2、nic3) を使用して各インターフェースを定義します。
          - type: interface
            name: nic2
vlan
VLAN を定義します。parameters セクションから渡された VLAN ID およびサブネットを使用します。
          - type: vlan
            vlan_id: {get_param: ExternalNetworkVlanID}
            addresses:
              - ip_netmask: {get_param: ExternalIpSubnet}
ovs_bond
Open vSwitch のボンディングを定義します。ボンディングでは、2 つ以上の interfaces を結合して、冗長性や帯域幅を向上させます。
          - type: ovs_bond
            name: bond1
            members:
            - type: interface
              name: nic2
            - type: interface
              name: nic3
ovs_bridge
Open vSwitch のブリッジを定義します。ブリッジは、複数の interfacebondvlan オブジェクトを接続します。
          - type: ovs_bridge
            name: {get_input: bridge_name}
            members:
              - type: ovs_bond
                name: bond1
                members:
                  - type: interface
                    name: nic2
                    primary: true
                  - type: interface
                    name: nic3
              - type: vlan
                device: bond1
                vlan_id: {get_param: ExternalNetworkVlanID}
                addresses:
                  - ip_netmask: {get_param: ExternalIpSubnet}
linux_bridge
Linux ブリッジを定義します。Open vSwitch ブリッジと同様に、このブリッジは、複数の interfacebondvlan オブジェクトを接続します。
            - type: linux_bridge
              name: bridge1
              addresses:
                - ip_netmask:
                    list_join:
                      - '/'
                      - - {get_param: ControlPlaneIp}
                        - {get_param: ControlPlaneSubnetCidr}
              members:
                - type: interface
                  name: nic1
                  primary: true
            - type: vlan
              vlan_id: {get_param: ExternalNetworkVlanID}
              device: bridge1
              addresses:
                - ip_netmask: {get_param: ExternalIpSubnet}
              routes:
                - ip_netmask: 0.0.0.0/0
                  default: true
                  next_hop: {get_param: ExternalInterfaceDefaultRoute}
linux_bond
Linux ボンディングを定義します。Open vSwitch のボンディングと同様に、このボンディングでは、2 つ以上の interfaces を結合して、冗長性や帯域幅を向上させます。
            - type: linux_bond
              name: bond1
              members:
              - type: interface
                name: nic2
              - type: interface
                name: nic3
              bonding_options: "bond_mode=balance-tcp lacp=active other-config:lacp-fallback-ab=true"
各アイテムの完全なパラメーター一覧については「付録D ネットワークインターフェースのパラメーター」を参照してください。
この例では、デフォルトのボンディングインターフェース設定を使用します。たとえば /home/stack/templates/nic-configs/controller.yaml テンプレートは以下の network_config を使用します。
resources:
  OsNetConfigImpl:
    type: OS::Heat::StructuredConfig
    properties:
      group: os-apply-config
      config:
        os_net_config:
          network_config:
            - type: interface
              name: nic1
              use_dhcp: false
              addresses:
                - ip_netmask:
                    list_join:
                      - '/'
                      - - {get_param: ControlPlaneIp}
                        - {get_param: ControlPlaneSubnetCidr}
              routes:
                - ip_netmask: 169.254.169.254/32
                  next_hop: {get_param: EC2MetadataIp}
            - type: ovs_bridge
              name: {get_input: bridge_name}
              dns_servers: {get_param: DnsServers}
              members:
                - type: ovs_bond
                  name: bond1
                  ovs_options: {get_param: BondInterfaceOvsOptions}
                  members:
                    - type: interface
                      name: nic2
                      primary: true
                    - type: interface
                      name: nic3
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: ExternalNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: ExternalIpSubnet}
                  routes:
                    - default: true
                      next_hop: {get_param: ExternalInterfaceDefaultRoute}
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: InternalApiNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: InternalApiIpSubnet}
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: StorageNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: StorageIpSubnet}
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: StorageMgmtNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: StorageMgmtIpSubnet}
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: TenantNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: TenantIpSubnet}
                - type: vlan
                  device: bond1
                  vlan_id: {get_param: ManagementNetworkVlanID}
                  addresses:
                    - ip_netmask: {get_param: ManagementIpSubnet}

注記

管理ネットワークのセクションは、ネットワークインターフェースの Heat テンプレートにコメントアウトされて含まれています。このセクションをアンコメントして、管理ネットワークを有効化します。
このテンプレートは、ブリッジ (通常 br-ex という名前の外部ブリッジ) を定義し、nic2nic3 の 2 つの番号付きインターフェースから、bond1 と呼ばれるボンディングインターフェースを作成します。ブリッジにはタグ付けされた VLAN デバイスの番号が含まれており、bond1 を親デバイスとして使用します。またこのテンプレートには、director に接続するインターフェースも含まれます。
ネットワークインターフェーステンプレートの他のサンプルについては「付録E ネットワークインターフェースのテンプレート例」を参照してください。
これらのパラメーターの多くは get_param 関数を使用する点に注意してください。これらのパラメーターは、使用するネットワーク専用に作成した環境ファイルで定義します。

重要

使用していないインターフェースは、不要なデフォルトルートとネットワークループの原因となる可能性があります。たとえば、テンプレートにはネットワークインターフェース (nic4) が含まれる可能性があり、このインターフェースは OpenStack のサービス用の IP 割り当てを使用しませんが、DHCP やデフォルトルートを使用します。ネットワークの競合を回避するには、使用済みのインターフェースを ovs_bridge デバイスから削除し、DHCP とデフォルトのルート設定を無効にします。
- type: interface
  name: nic4
  use_dhcp: false
  defroute: false

6.2.2. ネットワーク環境ファイルの作成

ネットワーク環境ファイルは Heat の環境ファイルで、オーバークラウドのネットワーク環境を記述し、前のセクションのネットワークインターフェース設定テンプレートを参照します。IP アドレス範囲と合わせてネットワークのサブネットおよび VLAN を定義します。また、これらの値をローカルの環境用にカスタマイズします。
director には、すぐに使用開始できるように、環境ファイルのサンプルセットが含まれています。各環境ファイルは、/usr/share/openstack-tripleo-heat-templates/network/config/ のネットワークインターフェースファイルの例と同じです。
  • /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml: single-nic-vlans ネットワークインターフェースディレクトリー内の VLAN 設定が含まれる単一 NIC の環境ファイルサンプルです。外部ネットワークの無効化 (net-single-nic-with-vlans-no-external.yaml) 、または IPv6 の有効化 (net-single-nic-with-vlans-v6.yaml) 向けの環境ファイルもあります。
  • /usr/share/openstack-tripleo-heat-templates/environments/net-bond-with-vlans.yaml: bond-with-vlans ネットワークインターフェースディレクトリー内の VLAN 設定が含まれる単一 NIC の環境ファイルサンプルです。外部ネットワークの無効化 (net-bond-with-vlans-no-external.yaml) 、または IPv6 の有効化 (net-bond-with-vlans-v6.yaml) 向けの環境ファイルもあります。
  • /usr/share/openstack-tripleo-heat-templates/environments/net-multiple-nics.yaml: multiple-nics ネットワークインターフェースディレクトリー内の VLAN 設定が含まれる単一 NIC の環境ファイルサンプルです。IPv6 の有効化 (net-multiple-nics-v6.yaml) 向けの環境ファイルもあります。
  • /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-linux-bridge-with-vlans.yaml: Open vSwitch ブリッジではなく Linux ブリッジを使用して VLAN 設定を行う単一 NIC の環境ファイルサンプルです。これは、single-nic-linux-bridge-vlans ネットワークインターフェースディレクトリーを使用します。
このシナリオでは、/usr/share/openstack-tripleo-heat-templates/environments/net-bond-with-vlans.yaml ファイルの変更版を使用します。このファイルを stack ユーザーの templates ディレクトリーにコピーします。
$ cp /usr/share/openstack-tripleo-heat-templates/environments/net-bond-with-vlans.yaml /home/stack/templates/network-environment.yaml
この環境ファイルには、以下のように変更されたセクションが含まれます。
resource_registry:
  OS::TripleO::BlockStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/cinder-storage.yaml
  OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
  OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml
  OS::TripleO::ObjectStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/swift-storage.yaml
  OS::TripleO::CephStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/ceph-storage.yaml

parameter_defaults:
  InternalApiNetCidr: 172.16.0.0/24
  TenantNetCidr: 172.17.0.0/24
  StorageNetCidr: 172.18.0.0/24
  StorageMgmtNetCidr: 172.19.0.0/24
  StorageMgmtNetCidr: 172.19.0.0/24
  ManagementNetCidr: 172.20.0.0/24
  ExternalNetCidr: 10.1.1.0/24
  InternalApiAllocationPools: [{'start': '172.16.0.10', 'end': '172.16.0.200'}]
  TenantAllocationPools: [{'start': '172.17.0.10', 'end': '172.17.0.200'}]
  StorageAllocationPools: [{'start': '172.18.0.10', 'end': '172.18.0.200'}]
  StorageMgmtAllocationPools: [{'start': '172.19.0.10', 'end': '172.19.0.200'}]
  ManagementAllocationPools: [{'start': '172.20.0.10', 'end': '172.20.0.200'}]
  # Leave room for floating IPs in the External allocation pool
  ExternalAllocationPools: [{'start': '10.1.1.10', 'end': '10.1.1.50'}]
  # Set to the router gateway on the external network
  ExternalInterfaceDefaultRoute: 10.1.1.1
  # Gateway router for the provisioning network (or Undercloud IP)
  ControlPlaneDefaultRoute: 192.0.2.254
  # The IP address of the EC2 metadata server. Generally the IP of the Undercloud
  EC2MetadataIp: 192.0.2.1
  # Define the DNS servers (maximum 2) for the overcloud nodes
  DnsServers: ["8.8.8.8","8.8.4.4"]
  InternalApiNetworkVlanID: 201
  StorageNetworkVlanID: 202
  StorageMgmtNetworkVlanID: 203
  TenantNetworkVlanID: 204
  ManagementNetworkVlanID: 205
  ExternalNetworkVlanID: 100
  # Set to "br-ex" if using floating IPs on native VLAN on bridge br-ex
  NeutronExternalNetworkBridge: "''"
  # Customize bonding options if required
  BondInterfaceOvsOptions:
    "bond_mode=balance-tcp"
resource_registry セクションには、ノードのロールごとにカスタムのネットワークインターフェースンテプレートへの変更済みのリンクが含まれます。「カスタムのインターフェーステンプレートの作成」 を参照してください。
parameter_defaults セクションには、各ネットワーク種別のネットワークオプションを定義するパラメーター一覧が含まれます。これらのオプションについての詳しい参考情報は「付録F ネットワーク環境のオプション」を参照してください。
このシナリオでは、各ネットワークのオプションを定義します。すべてのネットワークの種別で、ホストと仮想 IP への IP アドレス割り当てに使われた個別の VLAN とサブネットを使用します。上記の例では、内部 API ネットワークの割り当てプールは、172.16.0.10 から開始し、172.16.0.200 で終了し、VLAN 201を使用します。これにより、静的な仮想 IP は 172.16.0.10 から 172.16.0.200 までの範囲内で割り当てられる一方で、環境では VLAN 201 が使用されます。
外部ネットワークは、Horizon Dashboard とパブリック API をホストします。クラウドの管理と Floating IP の両方に外部ネットワークを使用する場合には、仮想マシンインスタンス用の Floating IP として IP アドレスのプールを使用する余裕があることを確認します。本ガイドの例では、10.1.1.10 から 10.1.1.50 までの IP アドレスのみを外部ネットワークに割り当て、10.1.1.51 以上は Floating IP アドレスに自由に使用できます。または、Floating IP ネットワークを別の VLAN に配置し、作成後にオーバークラウドを設定してそのネットワークを使用するようにします。
BondInterfaceOvsOptions オプションは、nic2 および nic3 を使用するボンディングインターフェースのオプションを提供します。ボンディングオプションについての詳しい情報は、「付録G ボンディングオプション」を参照してください。

重要

オーバークラウドの作成後にネットワーク設定を変更すると、リソースの可用性が原因で設定に問題が発生する可能性があります。たとえば、ネットワーク分離テンプレートでネットワークのサブネット範囲を変更した場合に、サブネットがすでに使用されているため、再設定が失敗してしまう可能性があります。

6.2.3. OpenStack サービスの分離ネットワークへの割り当て

各 OpenStack サービスは、リソースレジストリーでデフォルトのネットワーク種別に割り当てられます。これらのサービスは、そのネットワーク種別に割り当てられたネットワーク内の IP アドレスにバインドされます。OpenStack サービスはこれらのネットワークに分割されますが、実際の物理ネットワーク数はネットワーク環境ファイルに定義されている数と異なる可能性があります。ネットワーク環境ファイル (/home/stack/templates/network-environment.yaml) で新たにネットワークマッピングを定義することで、OpenStack サービスを異なるネットワーク種別に再割り当てすることができます。ServiceNetMap パラメーターにより、各サービスに使用するネットワーク種別が決定されます。
たとえば、ハイライトしたセクションを変更して、ストレージ管理ネットワークサービスをストレージネットワークに再割り当てすることができます。
parameter_defaults:
  ...
  ServiceNetMap:
    NeutronTenantNetwork: tenant
    CeilometerApiNetwork: internal_api
    MongoDbNetwork: internal_api
    CinderApiNetwork: internal_api
    CinderIscsiNetwork: storage
    GlanceApiNetwork: storage
    GlanceRegistryNetwork: internal_api
    KeystoneAdminApiNetwork: internal_api
    KeystonePublicApiNetwork: internal_api
    NeutronApiNetwork: internal_api
    HeatApiNetwork: internal_api
    NovaApiNetwork: internal_api
    NovaMetadataNetwork: internal_api
    NovaVncProxyNetwork: internal_api
    SwiftMgmtNetwork: storage_mgmt
    SwiftProxyNetwork: storage
    HorizonNetwork: internal_api
    MemcachedNetwork: internal_api
    RabbitMqNetwork: internal_api
    RedisNetwork: internal_api
    MysqlNetwork: internal_api
    CephClusterNetwork: storage_mgmt
    CephPublicNetwork: storage
    # Define which network will be used for hostname resolution
    ControllerHostnameResolveNetwork: internal_api
    ComputeHostnameResolveNetwork: internal_api
    BlockStorageHostnameResolveNetwork: internal_api
    ObjectStorageHostnameResolveNetwork: internal_api
    CephStorageHostnameResolveNetwork: storage
    ...
これらのパラメーターを storage に変更すると、対象のサービスはストレージ管理ネットワークではなく、ストレージネットワークに割り当てられます。つまり、parameter_defaults セットをストレージ管理ネットワークではなくストレージネットワーク向けに定義するだけで設定することができます。

6.2.4. デプロイするネットワークの選択

通常、ネットワークとポートの環境ファイルにある resource_registry セクションは変更する必要はありません。ネットワークの一覧は、ネットワークのサブセットを使用する場合のみ変更してください。

注記

カスタムのネットワークとポートを指定する場合には、デプロイメントのコマンドラインで environments/network-isolation.yaml は追加せずに、ネットワークの環境ファイルにネットワークとポートをすべて指定してください。
分離されたネットワークを使用するには、各ネットワークのサーバーに IP アドレスを指定する必要があります。分離されたネットワーク上の IP アドレスは、アンダークラウドで Neutron を使用して管理できるため、ネットワークごとに Neutron でのポート作成を有効化する必要があります。また、環境ファイルのリソースレジストリーを上書きすることができます。
まず、これはデプロイ可能なネットワークとポートの包括的なセットです。
resource_registry:
  # This section is usually not modified, if in doubt stick to the defaults
  # TripleO overcloud networks
  OS::TripleO::Network::External: /usr/share/openstack-tripleo-heat-templates/network/external.yaml
  OS::TripleO::Network::InternalApi: /usr/share/openstack-tripleo-heat-templates/network/internal_api.yaml
  OS::TripleO::Network::StorageMgmt: /usr/share/openstack-tripleo-heat-templates/network/storage_mgmt.yaml
  OS::TripleO::Network::Storage: /usr/share/openstack-tripleo-heat-templates/network/storage.yaml
  OS::TripleO::Network::Tenant: /usr/share/openstack-tripleo-heat-templates/network/tenant.yaml

  # Port assignments for the VIPs
  OS::TripleO::Network::Ports::ExternalVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external.yaml
  OS::TripleO::Network::Ports::InternalApiVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::Network::Ports::StorageVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::Network::Ports::StorageMgmtVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt.yaml
  OS::TripleO::Network::Ports::TenantVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml
  OS::TripleO::Network::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/vip.yaml

  # Port assignments for the controller role
  OS::TripleO::Controller::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::Controller::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt.yaml
  OS::TripleO::Controller::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml

  # Port assignments for the compute role
  OS::TripleO::Compute::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::Compute::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::Compute::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml

  # Port assignments for the ceph storage role
  OS::TripleO::CephStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::CephStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt.yaml

  # Port assignments for the swift storage role
  OS::TripleO::SwiftStorage::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::SwiftStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::SwiftStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt.yaml

  # Port assignments for the block storage role
  OS::TripleO::BlockStorage::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::BlockStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::BlockStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt.yaml
このファイルの最初のセクションには、OS::TripleO::Network::* リソースのリソースレジストリーの宣言が含まれます。デフォルトでは、これらのリソースは noop.yaml ファイルを参照しており、このファイルではネットワークは作成されません。ネットワークごとの YAML ファイルにあるリソースを参照すると、ネットワークの作成が有効化されます。
次の数セクションで、各ロールのノードに IP アドレスを指定します。コントローラーノードでは、ネットワークごとに IP が指定されます。コンピュートノードとストレージノードは、ネットワークのサブネットでの IP が指定されます。
事前設定済みのネットワークの 1 つを指定せずにデプロイするには、ロールのネットワーク定義および対応するポートの定義を無効にします。たとえば、以下のように storage_mgmt.yaml への全参照を noop.yaml で置き換えることができます。
resource_registry:
  # This section is usually not modified, if in doubt stick to the defaults
  # TripleO overcloud networks
  OS::TripleO::Network::External: /usr/share/openstack-tripleo-heat-templates/network/external.yaml
  OS::TripleO::Network::InternalApi: /usr/share/openstack-tripleo-heat-templates/network/internal_api.yaml
  OS::TripleO::Network::StorageMgmt: /usr/share/openstack-tripleo-heat-templates/network/noop.yaml
  OS::TripleO::Network::Storage: /usr/share/openstack-tripleo-heat-templates/network/storage.yaml
  OS::TripleO::Network::Tenant: /usr/share/openstack-tripleo-heat-templates/network/tenant.yaml

  # Port assignments for the VIPs
  OS::TripleO::Network::Ports::ExternalVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external.yaml
  OS::TripleO::Network::Ports::InternalApiVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::Network::Ports::StorageVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::Network::Ports::StorageMgmtVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
  OS::TripleO::Network::Ports::TenantVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml
  OS::TripleO::Network::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/vip.yaml

  # Port assignments for the controller role
  OS::TripleO::Controller::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::Controller::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
  OS::TripleO::Controller::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml

  # Port assignments for the compute role
  OS::TripleO::Compute::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::Compute::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::Compute::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml

  # Port assignments for the ceph storage role
  OS::TripleO::CephStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::CephStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml

  # Port assignments for the swift storage role
  OS::TripleO::SwiftStorage::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::SwiftStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::SwiftStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml

  # Port assignments for the block storage role
  OS::TripleO::BlockStorage::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::BlockStorage::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::BlockStorage::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml

parameter_defaults:
  ServiceNetMap:
    NeutronTenantNetwork: tenant
    CeilometerApiNetwork: internal_api
    MongoDbNetwork: internal_api
    CinderApiNetwork: internal_api
    CinderIscsiNetwork: storage
    GlanceApiNetwork: storage
    GlanceRegistryNetwork: internal_api
    KeystoneAdminApiNetwork: ctlplane # Admin connection for Undercloud
    KeystonePublicApiNetwork: internal_api
    NeutronApiNetwork: internal_api
    HeatApiNetwork: internal_api
    NovaApiNetwork: internal_api
    NovaMetadataNetwork: internal_api
    NovaVncProxyNetwork: internal_api
    SwiftMgmtNetwork: storage # Changed from storage_mgmt
    SwiftProxyNetwork: storage
    HorizonNetwork: internal_api
    MemcachedNetwork: internal_api
    RabbitMqNetwork: internal_api
    RedisNetwork: internal_api
    MysqlNetwork: internal_api
    CephClusterNetwork: storage # Changed from storage_mgmt
    CephPublicNetwork: storage
    ControllerHostnameResolveNetwork: internal_api
    ComputeHostnameResolveNetwork: internal_api
    BlockStorageHostnameResolveNetwork: internal_api
    ObjectStorageHostnameResolveNetwork: internal_api
    CephStorageHostnameResolveNetwork: storage
noop.yaml 使用するとネットワークやポートが作成されないため、ストレージ管理ネットワークのサービスはプロビジョニングネットワークにデフォルト設定されます。ストレージ管理サービスをストレージネットワークなどの別のネットワークに移動するには ServiceNetMap で変更することができます。

6.3. ノード配置の制御

director のデフォルトの動作は、通常プロファイルタグをもとに、各ロールにノードが無作為に選択されますが、director には、固有のノード配置を定義する機能も備えられています。この手法は、以下の作業に役立ちます。
  • controller-0controller-1 などの固有のノード ID を割り当てる
  • カスタムのホスト名を定義する
  • 固有の IP アドレスを定義する

6.3.1. 固有のノード ID の割り当て

以下の手順では、固有のノードにノード ID を割り当てます。ノード ID には、controller-0controller-1novacompute-0novacompute-1 などがあります。
最初のステップでは、デプロイメント時に Nova スケジューラーが照合するノード別ケイパビリティーとしてこの ID を割り当てます。以下に例を示します。
ironic node-update <id> replace properties/capabilities='node:controller-0,boot_option:local'
これにより、node:controller-0 の機能をノードに割り当てます。0 から開始するユニークな連続インデックスを使用して、すべてのノードに対してこのパターンを繰り返します。特定のロール (コントローラー、コンピュート、各ストレージロール) にすべてのノードが同じようにタグ付けされるようにします。そうでない場合は、このケイパビリティーは Nova スケジューラーにより正しく照合されません。
次のステップでは、Heat 環境ファイル (例: scheduler_hints_env.yaml) を作成します。このファイルは、スケジューラーヒントを使用して、各ノードのケイパビリティーと照合します。以下に例を示します。
parameter_defaults:
  ControllerSchedulerHints:
    'capabilities:node': 'controller-%index%'
これらのスケジューラーヒントを使用するには、オーバークラウドの作成時に、overcloud deploy command scheduler_hints_env.yaml 環境ファイルを追加します。
これらのパラメーターを使用してロールごとに、同じアプローチを使用することができます。
  • コントローラーノードの ControllerSchedulerHints
  • コンピュートノードの NovaComputeSchedulerHints
  • Block Storage ノードの BlockStorageSchedulerHints
  • Object Storage ノードの ObjectStorageSchedulerHints
  • Ceph Storage ノードの CephStorageSchedulerHints

注記

プロファイル照合よりもノードの配置が優先されます。スケジューリングが機能しなくならないように、プロファイル照合用に設計されたフレーバー (computecontrol など) ではなく、デプロイメントにデフォルトの baremetal フレーバーを使用します。

6.3.2. カスタムのホスト名

「固有のノード ID の割り当て」 のノード ID の設定と組み合わせて、director は特定のカスタムホスト名を各ノードに割り当てることもできます。システムの場所 (例: rack2-row12) を定義する必要がある場合や、インベントリー ID を照合する必要がある場合、またはカスタムのホスト名が必要となるその他の状況において、カスタムのホスト名は便利です。
ノードのホスト名をカスタマイズするには、「固有のノード ID の割り当て」からの scheduler_hints_env.yaml ファイルなどの環境ファイルで HostnameMap パラメーターを使用します。以下に例を示します。
parameter_defaults:
  ControllerSchedulerHints:
    'capabilities:node': 'controller-%index%'
  NovaComputeSchedulerHints:
    'capabilities:node': 'novacompute-%index%'
  HostnameMap:
    overcloud-controller-0: overcloud-controller-prod-123-0
    overcloud-controller-1: overcloud-controller-prod-456-0
    overcloud-controller-2: overcloud-controller-prod-789-0
    overcloud-novacompute-0: overcloud-novacompute-prod-abc-0
parameter_defaults セクションで HostnameMap を定義し、各マッピングは、HostnameFormat パラメーターを使用して Heat が定義する元のホスト名に設定します (例: overcloud-controller-0)。また、2 つ目の値は、ノードに指定するカスタムのホスト名 (例: overcloud-controller-prod-123-0) にします。
ノード ID の配置と合わせてこの手法を使用することで、各ノードにカスタムのホスト名が指定されるようにします。

6.3.3. 予測可能な IP の割り当て

作成された環境でさらに制御を行う場合には、director はオーバークラウドノードに各ネットワークの固有の IP を割り当てることもできます。コアの Heat テンプレートコレクションにある environments/ips-from-pool-all.yaml 環境ファイルを使用します。このファイルを stack ユーザーの templates ディレクトリーにコピーしてください。
$ cp /usr/share/openstack-tripleo-heat-templates/environments/ips-from-pool-all.yaml ~/templates/.
ips-from-pool-all.yaml ファイルには、主に 2 つのセクションがあります。
1 番目のセクションは、デフォルトよりも優先される resource_registry の参照セットです。この参照では、director に対して、ノード種別のある特定のポートに固有の IP を使用するように指示を出します。適切なテンプレートの絶対 URL を使用するように各リソースを編集してください。以下に例を示します。
  OS::TripleO::Controller::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external_from_pool.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api_from_pool.yaml
  OS::TripleO::Controller::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_from_pool.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt_from_pool.yaml
  OS::TripleO::Controller::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant_from_pool.yaml
デフォルトの設定では、全ノード種別上にあるすべてのネットワークが、事前に割り当てられた IP を使用するように設定します。特定のネットワークやノード種別がデフォルトの IP 割り当てを使用するように許可するには、環境ファイルからノード種別やネットワークに関連する resource_registry のエントリーを削除するだけです。
2 番目のセクションは、実際の IP アドレスを割り当てる parameter_defaults です。各ノード種別には、関連するパラメーターが指定されます。
  • コントローラーノードの ControllerIPs
  • コンピュートノードの NovaComputeIPs
  • Ceph Storage ノードの CephStorageIPs
  • Block Storage ノードの BlockStorageIPs
  • Object Storage ノードの SwiftStorageIPs
各パラメーターは、アドレスの一覧へのネットワーク名のマッピングです。各ネットワーク種別には、そのネットワークにあるノード数と同じ数のアドレスが最低でも必要です。director はアドレスを順番に割り当てます。各種別の最初のノードは、適切な一覧にある最初のアドレスが割り当てられ、2 番目のノードは 2 番目のアドレスというように割り当てられていきます。
たとえば、オーバークラウドに 3 つの Ceph Storage ノードが含まれる場合には、CephStorageIPs パラメーターは以下のようになります。
CephStorageIPs:
  storage:
  - 172.16.1.100
  - 172.16.1.101
  - 172.16.1.102
  storage_mgmt:
  - 172.16.3.100
  - 172.16.3.101
  - 172.16.3.102
最初の Ceph Storage ノードは 172.16.1.100 と 172.16.3.100 の 2 つのアドレスを取得し、2 番目は 172.16.1.101 と 172.16.3.101、3 番目は 172.16.1.102 と 172.16.3.102 を取得します。他のノード種別でも同じパターンが適用されます。
選択した IP アドレスは、ネットワーク環境ファイルで定義されている各ネットワークの割り当てプールの範囲に入らないようにしてください (「ネットワーク環境ファイルの作成」 参照)。たとえば、internal_api の割り当てが InternalApiAllocationPools の範囲に入らないようにします。これにより、各ネットワークに選択した仮想 IP との競合が避けられます。同様に、IP の割り当ては外部の負荷分散で定義した仮想 IP の設定と競合しないようにします (「外部の負荷分散機能の設定」 参照)。
デプロイメント中にこの設定を適用するには、openstack overcloud deploy コマンドに環境ファイルを含めてください。

6.4. コンテナー化されたコンピュートノードの設定

director には、OpenStack のコンテナー化プロジェクト (Kolla) のサービスとオーバークラウドのコンピュートノードを統合するオプションがあります。たとえば、Red Hat Enterprise Linux Atomic Host をベースのオペレーティングシステムや個別のコンテナーとして使用して異なる OpenStack サービスを実行するコンピュートノードを作成します。
director のコアとなる Heat テンプレートコレクションには、コンテナー化されているコンピュートノードの設定をサポートする環境ファイルが含まれます。これらのファイルには以下が含まれます。
  • docker.yaml: コンテナー化されているコンピュートノードを設定する主要な環境ファイル
  • docker-network.yaml: コンテナー化されたコンピュートノードのネットワークの環境ファイル (ネットワークの分離なし)
  • docker-network-isolation.yaml: コンテナー化されたコンピュートノードのネットワークの環境ファイル (ネットワークの分離あり)

6.4.1. コンテナー化されたコンピュートの環境ファイル (docker.yaml) の検証

docker.yaml ファイルは、コンテナー化されたコンピュートノードの設定が含まれる主な環境ファイルです。このファイルには、resource_registry のエントリーが含まれます。
resource_registry:
  OS::TripleO::ComputePostDeployment: ../docker/compute-post.yaml
  OS::TripleO::NodeUserData: ../docker/firstboot/install_docker_agents.yaml
OS::TripleO::NodeUserData
初回起動時にカスタムの設定を使用する Heat テンプレートを提供します。今回の場合は、初回起動時に、openstack-heat-docker-agents コンテナーをコンピュートノードにインストールします。このコンテナーは、初期化スクリプトのセットを提供して、コンテナー化されたコンピュートノードと Heat フックを設定して director と通信します。
OS::TripleO::ComputePostDeployment
コンピュートノードに対するデプロイ後の設定リソースが含まれる Heat テンプレートを提供します。これには、Puppet に tags セットを提供するソフトウェア設定リソースが含まれます。
  ComputePuppetConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: puppet
      options:
        enable_hiera: True
        enable_facter: False
        tags: package,file,concat,file_line,nova_config,neutron_config,neutron_agent_ovs,neutron_plugin_ml2
      inputs:
      - name: tripleo::packages::enable_install
        type: Boolean
        default: True
      outputs:
      - name: result
      config:
        get_file: ../puppet/manifests/overcloud_compute.pp
これらのタグは、Puppet モジュールを openstack-heat-docker-agents コンテナーに渡すように定義します。
docker.yaml ファイルには、NovaImage と呼ばれる parameter が含まれており、コンピュートノードをプロビジョニングする際に overcloud-full イメージを異なるイメージ (atomic-image) に置き換えます。このような新規イメージをアップロードする方法は、「Atomic Host のイメージのアップロード」 を参照してください。
docker.yaml ファイルには、Docker レジストリーとイメージが コンピュートノードサービスを使用するように定義する parameter_defaults セクションも含まれます。このセクションを変更して、デフォルトの registry.access.redhat.com の代わりにローカルのレジストリーを使用するように指定することもできます。ローカルのレジストリーの設定方法は 「ローカルのレジストリーの使用」 を参照してください。

6.4.2. Atomic Host のイメージのアップロード

director では、atomic-image としてイメージストアにインポートする Red Hat Enterprise Linux 7 Atomic Host のクラウドイメージのコピーが必要です。これは、コンピュートノードにはオーバークラウドの作成のプロビジョニングの際に、ベースの OS イメージが必要なためです。
Red Hat Enterprise Linux 7 Atomic Host の製品ページ (https://access.redhat.com/downloads/content/271/ver=/rhel---7/7.2.2-2/x86_64/product-software) から クラウドのイメージ のコピーをダウンロードし、stack ユーザーのホームディレクトリーの images サブディレクトリーに保存します。
イメージのダウンロードが完了したら、stack ユーザーとして director にイメージをインポートします。
$ glance image-create --name atomic-image --file ~/images/rhel-atomic-cloud-7.2-12.x86_64.qcow2 --disk-format qcow2 --container-format bare
このコマンドでは、その他のオーバークラウドのイメージとこのイメージをインポートします。
$ glance image-list
+--------------------------------------+------------------------+
| ID                                   | Name                   |
+--------------------------------------+------------------------+
| 27b5bad7-f8b2-4dd8-9f69-32dfe84644cf | atomic-image           |
| 08c116c6-8913-427b-b5b0-b55c18a01888 | bm-deploy-kernel       |
| aec4c104-0146-437b-a10b-8ebc351067b9 | bm-deploy-ramdisk      |
| 9012ce83-4c63-4cd7-a976-0c972be747cd | overcloud-full         |
| 376e95df-c1c1-4f2a-b5f3-93f639eb9972 | overcloud-full-initrd  |
| 0b5773eb-4c64-4086-9298-7f28606b68af | overcloud-full-vmlinuz |
+--------------------------------------+------------------------+

6.4.3. ローカルのレジストリーの使用

デフォルトの設定は、Red Hat のコンテナーレジストリーをイメージのダウンロードに使用しますが、オプションの手順として、ローカルレジストリーを使用して、オーバークラウドの作成プロセス中の帯域幅を確保することができます。
既存のローカルレジストリーを使用するか、新しいものをインストールします。新しいレジストリーをインストールするには、『Getting Started with Containers』の「Chapter 2. Get Started with Docker Formatted Container Images」 の説明を参照してください。
必要なイメージをレジストリーにプルします。
$ sudo docker pull registry.access.redhat.com/openstack-nova-compute:latest
$ sudo docker pull registry.access.redhat.com/openstack-data:latest
$ sudo docker pull registry.access.redhat.com/openstack-nova-libvirt:latest
$ sudo docker pull registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest
$ sudo docker pull registry.access.redhat.com/openstack-openvswitch-vswitchd:latest
$ sudo docker pull registry.access.redhat.com/openstack-openvswitch-db-server:latest
$ sudo docker pull registry.access.redhat.com/openstack-heat-docker-agents:latest
イメージをプルした後には、正しいレジストリーホストにタグ付けします。
$ sudo docker tag registry.access.redhat.com/openstack-nova-compute:latest localhost:8787/registry.access.redhat.com/openstack-nova-compute:latest
$ sudo docker tag registry.access.redhat.com/openstack-data:latest localhost:8787/registry.access.redhat.com/openstack-data:latest
$ sudo docker tag registry.access.redhat.com/openstack-nova-libvirt:latest localhost:8787/registry.access.redhat.com/openstack-nova-libvirt:latest
$ sudo docker tag registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest localhost:8787/registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest
$ sudo docker tag registry.access.redhat.com/openstack-openvswitch-vswitchd:latest localhost:8787/registry.access.redhat.com/openstack-openvswitch-vswitchd:latest
$ sudo docker tag registry.access.redhat.com/openstack-openvswitch-db-server:latest localhost:8787/registry.access.redhat.com/openstack-openvswitch-db-server:latest
$ sudo docker tag registry.access.redhat.com/openstack-heat-docker-agents:latest localhost:8787/registry.access.redhat.com/openstack-heat-docker-agents:latest
レジストリーにプッシュします。
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-nova-compute:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-data:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-nova-libvirt:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-neutron-openvswitch-agent:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-openvswitch-vswitchd:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-openvswitch-db-server:latest
$ sudo docker push localhost:8787/registry.access.redhat.com/openstack-heat-docker-agents:latest
メインの docker.yaml 環境ファイルのコピーを templates サブディレクトリーに作成します。
$ cp /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml ~/templates/.
ファイルを編集して resource_registry が絶対 URL を使用するように変更します。
resource_registry:
  OS::TripleO::ComputePostDeployment: /usr/share/openstack-tripleo-heat-templates/docker/compute-post.yaml
  OS::TripleO::NodeUserData: /usr/share/openstack-tripleo-heat-templates/docker/firstboot/install_docker_agents.yaml
parameter_defaultsDockerNamespace をお使いのレジストリーの URL に変更します。また、DockerNamespaceIsRegistrytrue に設定します。以下に例を示します。
parameter_defaults:
  DockerNamespace: registry.example.com:8787/registry.access.redhat.com
  DockerNamespaceIsRegistry: true
ローカルレジストリーには、必要な Docker イメージと、コンテナー化されたコンピュートの設定が含まれ、このレジストリーを使用する準備が整いました。

6.4.4. オーバークラウドのデプロイメントへの環境ファイルの追加

オーバークラウドの作成の際は、以下のように、openstack overcloud deploy のコマンドと合わせて、コンテナー化されたコンピュートノードの主要な環境ファイル (docker.yaml) とネットワークの環境ファイル (docker-network.yaml) を追加します。
$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker-network.yaml [OTHER OPTIONS] ...
コンテナー化されたコンピュートノードは、ネットワークが分離されたオーバークラウドでも機能します。これには、主要な環境ファイルに加え、ネットワーク分離ファイル (docker-network-isolation.yaml) も必要です。「ネットワークの分離」からのネットワーク分離ファイルの前に、これらのファイルを追加してください。以下に例を示します。
openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker-network-isolation.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml [OTHER OPTIONS] ...
director により、コンテナー化されたコンピュートノードによりオーバークラウドが作成されました。

6.5. 外部の負荷分散機能の設定

オーバークラウドは、複数のコントローラーを合わせて、高可用性クラスターとして使用し、OpenStack サービスのオペレーションパフォーマンスを最大限に保つようにします。さらに、クラスターにより、OpenStack サービスへのアクセスの負荷分散が行われ、コントローラーノードに均等にトラフィックを分配して、各ノードのサーバーで過剰負荷を軽減します。また、外部のロードバランサーを使用して、この分散を実行することも可能です。たとえば、組織で、コントローラーノードへのトラフィックの分散処理に、ハードウェアベースのロードバランサーを使用する場合などです。
外部の負荷分散機能の設定に関する詳しい情報は、全手順が記載されている専用の『External Load Balancing for the Overcloud』ガイドを参照してください。

6.6. IPv6 ネットワークの設定

デフォルトでは、オーバークラウドは、インターネットプロトコルのバージョン 4 (IPv4) を使用してサービスのエンドポイントを設定しますが、オーバークラウドはインターネットプロトコルのバージョン 6 (IPv6) のエンドポイントもサポートします。これは、IPv6 のインフラストラクチャーをサポートする組織には便利です。director には、環境ファイルのセットが含まれており、IPv6 ベースのオーバークラウドの作成に役立ちます。
オーバークラウドでの IPv6 の設定に関する詳しい情報は、全手順が記載されている専用の『IPv6 Networking for the Overcloud』ガイドを参照してください。

6.7. NFS ストレージの設定

本項では、NFS 共有を使用するオーバークラウドの設定について説明します。インストールおよび設定のプロセスは、コアとなる Heat テンプレートコレクション内に既に存在する環境ファイルの変更がベースとなります。
コアの Heat テンプレートコレクションの /usr/share/openstack-tripleo-heat-templates/environments/ には一連の環境ファイルが格納されています。これらは、director で作成したオーバークラウドでサポートされている一部の機能のカスタム設定に役立つ環境テンプレートです。これには、ストレージ設定に有用な環境ファイルが含まれます。このファイルは、/usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml に配置されています。このファイルを stack ユーザーのテンプレートディレクトリーにコピーしてください。
$ cp /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml ~/templates/.
この環境ファイルには、OpenStack のブロックストレージおよびイメージストレージのコンポーネントの異なるストレージオプションを設定するのに役立つ複数のパラメーターが記載されています。この例では、オーバークラウドが NFS 共有を使用するように設定します。以下のパラメーターを変更してください。
CinderEnableIscsiBackend
iSCSI バックエンドを有効にするパラメーター。false に設定してください。
CinderEnableRbdBackend
Ceph Storage バックエンドを有効にするパラメーター。false に設定してください。
CinderEnableNfsBackend
NFS バックエンドを有効にするパラメーター。true に設定してください。
NovaEnableRbdBackend
Nova エフェメラルストレージ用に Ceph Storage を有効にするパラメーター。false に設定します。
GlanceBackend
Glance に使用するバックエンドを定義するパラメーター。イメージ用にファイルベースストレージを使用するには file に設定してください。オーバークラウドは、Glance 用にマウントされた NFS 共有にこれらのファイルを保存します。
CinderNfsMountOptions
ボリュームストレージ用の NFS マウントオプション
CinderNfsServers
ボリュームストレージ用にマウントする NFS 共有 (例: 192.168.122.1:/export/cinder)
GlanceFilePcmkManage
イメージストレージ用の共有を管理するための Pacemaker を有効にするパラメーター。無効に設定されている場合には、オーバークラウドはコントローラーノードのファイルシステムにイメージを保管します。true に設定してください。
GlanceFilePcmkFstype
Pacemaker がイメージストレージ用に使用するファイルシステムの種別を定義するパラメーター。nfs に設定します。
GlanceFilePcmkDevice
イメージストレージをマウントするための NFS 共有 (例: 192.168.122.1:/export/glance)
GlanceFilePcmkOptions
イメージストレージ用の NFS マウントオプション
環境ファイルのオプションは、以下の例のようになるはずです。
parameter_defaults:
CinderEnableIscsiBackend: false
CinderEnableRbdBackend: false
CinderEnableNfsBackend: true
NovaEnableRbdBackend: false
GlanceBackend: 'file'

CinderNfsMountOptions: 'rw,sync'
CinderNfsServers: '192.0.2.230:/cinder'

GlanceFilePcmkManage: true
GlanceFilePcmkFstype: 'nfs'
GlanceFilePcmkDevice: '192.0.2.230:/glance'
GlanceFilePcmkOptions: 'rw,sync,context=system_u:object_r:glance_var_lib_t:s0'

重要

Glance が /var/lib ディレクトリーにアクセスできるようにするには、GlanceFilePcmkOptions パラメーターに context=system_u:object_r:glance_var_lib_t:s0 と記載します。この SELinux コンテキストがない場合には、Glance はマウントポイントへの書き込みに失敗することになります。
これらのパラメーターは、Heat テンプレートコレクションの一部として統合されます。このように設定することにより、Cinder と Glance が使用するための 2 つの NFS マウントポイントが作成されます。
このファイルを保存して、オーバークラウドの作成に含まれるようにします。

6.8. Ceph Storage の設定

director では、Red Hat Ceph Storage のオーバークラウドへの統合には主に 2 つの方法を提供します。
Ceph Storage Cluster でのオーバークラウドの作成
director には、オーバークラウドの作成中に Ceph Storage Cluster を作成する機能があります。director は、データの格納に Ceph OSD を使用する Ceph Storage ノードセットを作成します。さらに、director は、オーバークラウドのコントローラーノードに Ceph Monitor サービスをインストールします。これは、組織が高可用性のコントローラーノードが 3 つあるオーバークラウドを作成する場合は、Ceph Monitor も高可用性サービスになることになります。
既存の Ceph Storage のオーバークラウドへの統合
既存の Ceph Storage Cluster がある場合には、オーバークラウドのデプロイメント時に統合できます。これは、オーバークラウドの設定以外のクラスターの管理やスケーリングが可能であることを意味します。
オーバークラウドの Ceph Storage に関する詳しい情報は、両シナリオに沿った全手順を記載している専用の 『オーバークラウド向けの Red Hat Ceph Storage』 ガイドを参照してください。

6.9. サードパーティーのストレージの設定

director には、環境ファイルが 2 つ含まれており、以下のサードパーティー製のストレージプロバイダーの設定に役立ちます。
Dell Storage Center
Block Storage (cinder) サービス用に単一の Dell Storage Center バックエンドをデプロイします。
環境ファイルは /usr/share/openstack-tripleo-heat-templates/environments/cinder-dellsc-config.yaml にあります。
完全な設定情報については『Dell Storage Center Back End Guide』を参照してください。
Dell EqualLogic
Block Storage (cinder) サービス用に単一の Dell EqualLogic バックエンドをデプロイします。
環境ファイルは /usr/share/openstack-tripleo-heat-templates/environments/cinder-eqlx-config.yaml にあります。
完全な設定情報については『Dell EqualLogic Back End Guide』を参照してください。
NetApp ブロックストレージ
Block Storage (cinder) サービス用に NetApp ストレージアプライアンスをバックエンドとしてデプロイします。
環境ファイルは /usr/share/openstack-tripleo-heat-templates/environments/cinder-dellsc-config.yaml/cinder-netapp-config.yaml にあります。
完全な設定情報については『NetApp Block Storage Back End Guide』を参照してください。

6.10. オーバークラウドのタイムゾーンの設定

環境ファイルの TimeZone パラメーターを使用して、オーバークラウドのデプロイメントのタイムゾーンを設定することができます。TimeZone パラメーターを空にすると、オーバークラウドはデフォルトの UTC 時間に設定されます。

director は、タイムゾーンデータベース /usr/share/zoneinfo/ で定義されている標準タイムゾーン名を認識します。たとえば、タイムゾーンを Japan に設定する場合には、/usr/share/zoneinfo の内容を確認して適切なエントリーを特定してください。
$ ls /usr/share/zoneinfo/
Africa      Asia       Canada   Cuba   EST      GB       GMT-0      HST      iso3166.tab  Kwajalein  MST      NZ-CHAT   posix       right      Turkey     UTC       Zulu
America     Atlantic   CET      EET    EST5EDT  GB-Eire  GMT+0      Iceland  Israel       Libya      MST7MDT  Pacific   posixrules  ROC        UCT        WET
Antarctica  Australia  Chile    Egypt  Etc      GMT      Greenwich  Indian   Jamaica      MET        Navajo   Poland    PRC         ROK        Universal  W-SU
Arctic      Brazil     CST6CDT  Eire   Europe   GMT0     Hongkong   Iran     Japan        Mexico     NZ       Portugal  PST8PDT     Singapore  US         zone.tab

上記の出力にはタイムゾーンファイルおよび追加のタイムゾーンを含むディレクトリーが含まれます。たとえば、Japan はこの結果では個別のタイムゾーンファイルですが、Africa は追加のタイムゾーンファイルが含まれるディレクトリーとなっています。
$ ls /usr/share/zoneinfo/Africa/
Abidjan      Algiers  Bamako  Bissau       Bujumbura   Ceuta    Dar_es_Salaam  El_Aaiun  Harare        Kampala   Kinshasa    Lome        Lusaka  Maseru     Monrovia  Niamey       Porto-Novo  Tripoli
Accra        Asmara   Bangui  Blantyre     Cairo       Conakry  Djibouti       Freetown  Johannesburg  Khartoum  Lagos       Luanda      Malabo  Mbabane    Nairobi   Nouakchott   Sao_Tome    Tunis
Addis_Ababa  Asmera   Banjul  Brazzaville  Casablanca  Dakar    Douala         Gaborone  Juba          Kigali    Libreville  Lubumbashi  Maputo  Mogadishu  Ndjamena  Ouagadougou  Timbuktu    Windhoek

使用するタイムゾーンを決定した後には、環境ファイルで処理されるように名前を入力します。たとえば、「timezone.yaml」という名前のファイルにエントリーを追加して、タイムゾーンを Japan に設定します。
parameter_defaults:
  TimeZone: 'Japan'

次に、オーバークラウドのデプロイプロセスを使用して、テンプレートを実行して設定を適用します。
$ openstack overcloud deploy --templates -e timezone.yaml

6.11. オーバークラウドの SSL/TLS の有効化

デフォルトでは、オーバークラウドはサービスに対して暗号化されていないエンドポイントを使用します。これは、オーバークラウドの設定には、パブリック API エンドポイントの SSL/TLS を有効化するために追加の環境ファイルが必要という意味です。

注記

このプロセスでは、パブリック API のエンドポイントの SSL/TLS のみを有効化します。内部 API や管理 API は暗号化されません。
このプロセスには、パブリック API のエンドポイントを定義するネットワークの分離が必要です。ネットワークの分離に関する説明は 「ネットワークの分離」 を参照してください。
秘密鍵と認証局からの証明書が作成されていることを確認します。有効な SSL/TLS 鍵および認証局ファイルの作成に関する情報は、「付録A SSL/TLS 証明書の設定」を参照してください。

SSL/TLS の有効化

Heat テンプレートコレクションから enable-tls.yaml の環境ファイルをコピーします。
$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/enable-tls.yaml ~/templates/.
このファイルを編集して、下記のパラメーターに以下の変更を加えます。

parameter_defaults:

SSLCertificate:
証明書ファイルのコンテンツを SSLCertificate パラメーターにコピーします。以下に例を示します。
parameter_defaults:
  SSLCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIDgzCCAmugAwIBAgIJAKk46qw6ncJaMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV
    ...
    sFW3S2roS4X0Af/kSSD8mlBBTFTCMBAj6rtLBKLaQbIxEpIzrgvp
    -----END CERTIFICATE-----

重要

この認証局のコンテンツで、新しく追加する行は、すべて同じレベルにインデントする必要があります。
SSLKey:
以下のように、秘密鍵の内容を SSLKey パラメーターにコピーします。
parameter_defaults:
  ...
  SSLKey: |
    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAqVw8lnQ9RbeI1EdLN5PJP0lVO9hkJZnGP6qb6wtYUoy1bVP7
    ...
    ctlKn3rAAdyumi4JDjESAXHIKFjJNOLrBmpQyES4XpZUC7yhqPaU
    -----END RSA PRIVATE KEY-----

重要

この秘密鍵のコンテンツにおいて、新しく追加する行はすべて同じ ID レベルに指定する必要があります。
EndpointMap:
EndpointMap には、HTTPS および HTTP 通信を使用したサービスのマッピングが含まれます。SSL 通信に DNS を使用する場合は、このセクションをデフォルト設定のままにしておいてください。ただし、SSL 証明書の共通名に IP アドレスを使用する場合は (「付録A SSL/TLS 証明書の設定」参照)、CLOUDNAME のインスタンスをすべて IP_ADDRESS に置き換えてください。これには以下のコマンドを使用してください。
$ sed -i 's/CLOUDNAME/IP_ADDRESS/' ~/templates/enable-tls.yaml

重要

IP_ADDRESS または CLOUDNAME は、実際の値に置き換えないでください。Heat により、オーバークラウドの作成時にこれらの変数が適切な値に置き換えられます。

resource_registry:

OS::TripleO::NodeTLSData:
OS::TripleO::NodeTLSData: のリソース URL を絶対 URL に変更します。
resource_registry:
OS::TripleO::NodeTLSData: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/tls/tls-cert-inject.yaml

ルート証明書の注入

自己署名証明書を使用する場合または、証明書の署名者がオーバークラウドのイメージにあるデフォルトのトラストストアに含まれない場合には、証明書をオーバークラウドのイメージに注入する必要があります。Heat テンプレートコレクションから inject-trust-anchor.yaml 環境ファイルをコピーします。
$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/inject-trust-anchor.yaml ~/templates/.
このファイルを編集して、下記のパラメーターに以下の変更を加えます。

parameter_defaults:

SSLRootCertificate:
SSLRootCertificate パラメーターにルート認証局ファイルの内容をコピーします。以下に例を示します。
parameter_defaults:
  SSLRootCertificate: |
    -----BEGIN CERTIFICATE-----
    MIIDgzCCAmugAwIBAgIJAKk46qw6ncJaMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV
    ...
    sFW3S2roS4X0Af/kSSD8mlBBTFTCMBAj6rtLBKLaQbIxEpIzrgvp
    -----END CERTIFICATE-----

重要

この認証局のコンテンツで、新しく追加する行は、すべて同じレベルにインデントする必要があります。

resource_registry:

OS::TripleO::NodeTLSCAData:
OS::TripleO::NodeTLSCAData: のリソース URL を絶対 URL に変更します。
resource_registry:
  OS::TripleO::NodeTLSCAData: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/tls/ca-inject.yaml

DNS エンドポイントの設定

DNS ホスト名を使用して SSL/TLS でオーバークラウドにアクセスする場合は、新しい環境ファイル (~/templates/cloudname.yaml) を作成して、オーバークラウドのエンドポイントのホスト名を定義します。以下のパラメーターを使用してください。

parameter_defaults:

CloudName:
オーバークラウドエンドポイントの DNS ホスト名
DnsServers:
使用する DNS サーバー一覧。設定済みの DNS サーバーには、パブリック API の IP アドレスに一致する設定済みの CloudName へのエントリーが含まれていなければなりません。
このファイルの内容の例は以下のとおりです。
parameter_defaults:
CloudName: overcloud.example.com
DnsServers: ["10.0.0.1"]

オーバークラウド作成時の環境ファイルの追加

7章オーバークラウドの作成」に記載のデプロイメントのコマンド (openstack overcloud deploy) は、-e オプションを使用して環境ファイルを追加します。以下の順番にこのセクションから環境ファイルを追加します。
  • SSL/TLS を有効化する環境ファイル (enable-tls.yaml)
  • DNS ホスト名を設定する環境ファイル (cloudname.yaml)
  • ルート認証局を注入する環境ファイル (inject-trust-anchor.yaml)
例:
$ openstack overcloud deploy --templates [...] -e /home/stack/templates/enable-tls.yaml -e ~/templates/cloudname.yaml -e ~/templates/inject-trust-anchor.yaml

6.12. オーバークラウドの登録

オーバークラウドは、Red Hat コンテンツ配信ネットワーク、Red Hat Satellite 5 または 6 サーバーにノードを登録する方法を提供します。これは、環境ファイルまたはコマンドラインのいずれかを使用して実行することができます。

方法 1: コマンドライン

デプロイメントのコマンド (openstack overcloud deploy) は、一連のオプションを使用して登録情報を定義します。「オーバークラウドのパラメーター設定」の表には、これらのオプションと説明についてまとめています。これらのオプションは、「7章オーバークラウドの作成」でデプロイメントのコマンドを実行する時に追加してください。以下に例を示します。
# openstack overcloud deploy --templates --rhel-reg --reg-method satellite --reg-sat-url http://example.satellite.com  --reg-org MyOrg --reg-activation-key MyKey --reg-force [...]

方法 2: 環境ファイル

登録ファイルを Heat テンプレートコレクションからコピーします。
$ cp -r /usr/share/openstack-tripleo-heat-templates/extraconfig/pre_deploy/rhel-registration ~/templates/.
~/templates/rhel-registration/environment-rhel-registration.yaml を編集し、登録の方法と詳細に応じて以下の値を変更します。
rhel_reg_method
登録の方法を選択します。portalsatellitedisable のいずれかです。
rhel_reg_type
登録するユニットの種別。system として登録するには空欄のままにします。
rhel_reg_auto_attach
互換性のあるサブスクリプションをこのシステムに自動的にアタッチします。true に設定して有効にするか、false に設定して無効にします。
rhel_reg_service_level
自動アタッチメントに使用するサービスレベル
rhel_reg_release
このパラメーターを使用して、自動アタッチメント用のリリースバージョンを設定します。Red Hat Subscription Manager からのデフォルトを使用するには、空欄のままにします。
rhel_reg_pool_id
使用するサブスクリプションプール ID。サブスクリプションを自動でアタッチしない場合に使用します。
rhel_reg_sat_url
オーバークラウドノードを登録する Satellite サーバーのベース URL。このパラメーターには、HTTPS URL ではなく、Satellite の HTTP URL を使用します。たとえば、https://satellite.example.com ではなく http://satellite.example.com を使用します。オーバークラウドの作成プロセスではこの URL を使用して、どのサーバーが Red Hat Satellite 5 または Red Hat Satellite 6 サーバーであるかを判断します。Red Hat Satellite 5 サーバーの場合は、オーバークラウドは katello-ca-consumer-latest.noarch.rpm ファイルを取得して subscription-manager に登録し、katello-agent をインストールします。Red Hat Satellite 5 サーバーの場合はオーバークラウドは RHN-ORG-TRUSTED-SSL-CERT ファイルを取得して rhnreg_ks に登録します。
rhel_reg_server_url
使用するサブスクリプションサービスのホスト名を指定します。デフォルトは、カスタマーポータルのサブスクリプション管理、subscription.rhn.redhat.com です。このオプションを使用しない場合、システムはカスタマーポータルのサブスクリプション管理に登録されます。サブスクリプションサーバーの URL は、https://hostname:port/prefix の形式を使用します。
rhel_reg_base_url
更新を受信するためのコンテンツ配信サーバーのホスト名を指定します。デフォルトは https://cdn.redhat.com です。Satellite 6 は独自のコンテンツをホストするため、URL は Satellite 6 で登録されているシステムに使用する必要があります。コンテンツのベース URL は https://hostname:port/prefix の形式を使用します。
rhel_reg_org
登録に使用する組織
rhel_reg_environment
選択した組織内で使用する環境
rhel_reg_repos
有効化するリポジトリーのコンマ区切りリスト
rhel_reg_activation_key
登録に使用するアクティベーションキー
rhel_reg_user, rhel_reg_password
登録用のユーザー名およびパスワード。可能な場合には、登録用のアクティベーションキーを使用します。
rhel_reg_machine_name
マシン名。ノードのホスト名を使用するには、空欄のままにします。
rhel_reg_force
登録のオプションを強制するには true に設定します (例:ノードの再登録時など)。
rhel_reg_sat_repo
katello-agent などの Red Hat Satellite 6 の管理ツールが含まれるリポジトリー (例: rhel-7-server-satellite-tools-6.1-rpms)。
7章オーバークラウドの作成」に記載のデプロイメントのコマンド (openstack overcloud deploy) は、-e オプションを使用して環境ファイルを追加します。~/templates/rhel-registration/environment-rhel-registration.yaml~/templates/rhel-registration/rhel-registration-resource-registry.yaml の両方を追加します。以下に例を示します。
$ openstack overcloud deploy --templates [...] -e /home/stack/templates/rhel-registration/environment-rhel-registration.yaml -e /home/stack/templates/rhel-registration/rhel-registration-resource-registry.yaml

重要

登録は、OS::TripleO::NodeExtraConfig Heat リソースとして設定されます。これは、このリソースを登録のみに使用できることを意味します。詳しくは、「オーバークラウドの設定前のカスタマイズ」を参照してください。

6.13. 初回起動での設定のカスタマイズ

director は、オーバークラウドの初期設定時に全ノードに設定を行うメカニズムを提供し、cloud-init でこの設定をアーカイブします。アーカイブした内容は、OS::TripleO::NodeUserData リソース種別を使用して呼び出すことが可能です。
以下の例は、全ノード上の IP アドレスを使用してネームサーバーを更新することを目的します。まず基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml) を作成する必要があります。このテンプレートは、固有のネームサーバーが指定された各ノードの resolv.conf を追加するスクリプトを実行します。OS::TripleO::MultipartMime リソース種別を使用して、この設定スクリプトを送信します。
heat_template_version: 2014-10-16

description: >
Extra hostname configuration

resources:
userdata:
  type: OS::Heat::MultipartMime
  properties:
    parts:
    - config: {get_resource: nameserver_config}

nameserver_config:
  type: OS::Heat::SoftwareConfig
  properties:
    config: |
      #!/bin/bash
      echo "nameserver 192.168.1.1" >> /etc/resolv.conf

outputs:
OS::stack_id:
  value: {get_resource: userdata}
次に、OS::TripleO::NodeUserData リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/firstboot.yaml) を作成します。
resource_registry:
OS::TripleO::NodeUserData: /home/stack/templates/nameserver.yaml
初回起動の設定を追加するには、最初にオーバークラウドを作成する際に、この環境ファイルをスタックに追加します。たとえば、以下のコマンドを実行します。
$ openstack overcloud deploy --templates -e /home/stack/templates/firstboot.yaml
-e は、オーバークラウドのスタックに環境ファイルを提供します。
これにより、初回作成/起動時に、全ノードに設定が追加されます。オーバークラウドのスタックの更新など、これらのテンプレートを後ほど追加しても、このスクリプトは実行されません。

重要

OS::TripleO::NodeUserData は、1 つの Heat テンプレートに対してのみ登録することが可能です。それ以外に使用すると、最初に使用した Heat テンプレートの内容が上書きされてしまいます。

6.14. オーバークラウドの設定前のカスタマイズ

オーバークラウドは、OpenStackコンポーネントのコア設定に Puppet を使用します。director は、初回のブートが完了してコア設定が開始する前に、カスタム設定を提供するリソースのセットを用意します。これには、以下のリソースが含まれます。
OS::TripleO::ControllerExtraConfigPre
Puppet のコア設定前にコントローラーノードに適用される追加の設定
OS::TripleO::ComputeExtraConfigPre
Puppet のコア設定前にコンピュートノードに適用される追加の設定
OS::TripleO::CephStorageExtraConfigPre
Puppet のコア設定前に CephStorage ノードに適用される追加の設定
OS::TripleO::NodeExtraConfig
Puppet のコア設定前に全ノードに適用される追加の設定
以下の例では、まず基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml) を作成します。このテンプレートは、変数のネームサーバーが指定された各ノードの resolv.conf を追加するスクリプトを実行します。
heat_template_version: 2014-10-16

description: >
Extra hostname configuration

parameters:
server:
  type: string
nameserver_ip:
  type: string

resources:
ExtraPreConfig:
  type: OS::Heat::SoftwareConfig
  properties:
    group: script
    config:
      str_replace:
        template: |
          #!/bin/sh
          echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf
        params:
          _NAMESERVER_IP_: {get_param: nameserver_ip}
ExtraPreDeployment:
  type: OS::Heat::SoftwareDeployment
  properties:
    config: {get_resource: ExtraPreConfig}
    server: {get_param: server}
    actions: ['CREATE','UPDATE']

outputs:
deploy_stdout:
  description: Deployment reference, used to trigger pre-deploy on changes
  value: {get_attr: [ExtraPreDeployment, deploy_stdout]}

重要

servers パラメーターは、設定を適用するサーバー一覧で、親テンプレートにより提供されます。このパラメーターは、すべての事前設定テンプレートで必須です。
次に、OS::TripleO::NodeExtraConfig リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/pre_config.yaml) を作成します。
resource_registry:
OS::TripleO::NodeExtraConfig: /home/stack/templates/nameserver.yaml
parameter_defaults:
nameserver_ip: 192.168.1.1
この設定を適用するには、オーバークラウドの作成時または更新時にスタックにこの環境ファイルを追加します。たとえば、以下のコマンドを実行します。
$ openstack overcloud deploy --templates -e /home/stack/templates/pre_config.yaml
このコマンドにより、オーバークラウドの初期作成またはその後の更新時にコア設定が開始する前に、全ノードに設定が適用されます。

重要

これらのリソースは、それぞれ 1 つの Heat テンプレートに対してのみ登録することが可能です。複数で使用すると、リソースごとに使用する Heat テンプレートが上書きされます。

6.15. オーバークラウドの設定後のカスタマイズ

オーバークラウドの作成が完了してから、オーバークラウドの初回作成時またはその後の更新時に追加の設定が必要となる状況が発生する可能性があります。このような場合は、OS::TripleO::NodeExtraConfigPost リソースを使用して、標準の OS::Heat::SoftwareConfig 種別を使用した設定を適用します。これにより、メインのオーバークラウド設定が完了してから、追加の設定が適用されます。
以下の例では、まず基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml) を作成します。このテンプレートは、変数のネームサーバーが指定された各ノードの resolv.conf を追加するスクリプトを実行します。
heat_template_version: 2014-10-16

description: >
Extra hostname configuration

parameters:
servers:
  type: json
nameserver_ip:
  type: string

resources:
ExtraConfig:
  type: OS::Heat::SoftwareConfig
  properties:
    group: script
    config:
      str_replace:
        template: |
          #!/bin/sh
          echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf
        params:
          _NAMESERVER_IP_: {get_param: nameserver_ip}

ExtraDeployments:
  type: OS::Heat::SoftwareDeployments
  properties:
    servers:  {get_param: servers}
    config: {get_resource: ExtraConfig}
    actions: ['CREATE','UPDATE']

重要

servers パラメーターは、設定を適用するサーバー一覧で、親テンプレートにより提供されます。このパラメーターは、 すべての OS::TripleO::NodeExtraConfigPost テンプレートで必須です。
次に、OS::TripleO::NodeExtraConfigPost: リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/post_config.yaml) を作成します。
resource_registry:
OS::TripleO::NodeExtraConfigPost: /home/stack/templates/nameserver.yaml
parameter_defaults:
nameserver_ip: 192.168.1.1
この設定を適用するには、オーバークラウドの作成時または更新時にスタックにこの環境ファイルを追加します。たとえば、以下のコマンドを実行します。
$ openstack overcloud deploy --templates -e /home/stack/templates/post_config.yaml
このコマンドにより、オーバークラウドの初期作成またはその後の更新時にコア設定が完了した後に、全ノードに設定が適用されます。

重要

OS::TripleO::NodeExtraConfigPost は、1 つの Heat テンプレートに対してのみ登録することが可能です。複数で使用すると、使用する Heat テンプレートが上書きされます。

6.16. Puppet 設定データのカスタマイズ

Heat テンプレートコレクションには、追加の設定を特定のノードタイプに渡すためのパラメーターセットが含まれています。これらのパラメーターは、ノードの Puppet の設定用 hieradata として設定を保存します。これには、以下のパラメーターが含まれます。
ExtraConfig
全ノードに追加する設定
controllerExtraConfig
コントローラーノードに追加する設定
NovaComputeExtraConfig
コンピュートノードに追加する設定
BlockStorageExtraConfig
ブロックストレージノードに追加する設定
ObjectStorageExtraConfig
オブジェクトストレージノードに追加する設定
CephStorageExtraConfig
Ceph ストレージノードに追加する設定
デプロイ後の設定プロセスに設定を追加するには、parameter_defaults セクションにこれらのパラメーターが記載された環境ファイルを作成します。たとえば、コンピュートホストに確保するメモリーを 1024 MB に増やして、VNC キーマップを日本語に設定するには、以下のように設定します。
parameter_defaults:
NovaComputeExtraConfig:
  nova::compute::reserved_host_memory: 1024
  nova::compute::vnc_keymap: ja
openstack overcloud deploy を実行する際に、この環境ファイルを含めます。

重要

各パラメーターは 1 回のみ定義することが可能です。1 回以上使用すると、以前の値が上書きされます。

6.17. カスタムの Puppet 設定の適用

特定の状況では、追加のコンポーネントをオーバークラウドノードにインストールして設定する必要がある場合があります。これには、カスタムの Puppet マニフェストを使用して、主要な設定が完了してからノードに適用します。基本例として、各ノードに motd をインストールします。このインストールのプロセスでは、まず Heat テンプレート (/home/stack/templates/custom_puppet_config.yaml) を作成して、Puppet 設定を起動します。
heat_template_version: 2014-10-16

description: >
Run Puppet extra configuration to set new MOTD

parameters:
servers:
  type: json

resources:
ExtraPuppetConfig:
  type: OS::Heat::SoftwareConfig
  properties:
    config: {get_file: motd.pp}
    group: puppet
    options:
      enable_hiera: True
      enable_facter: False

ExtraPuppetDeployments:
  type: OS::Heat::SoftwareDeployments
  properties:
    config: {get_resource: ExtraPuppetConfig}
    servers: {get_param: servers}
これにより、テンプレート内に /home/stack/templates/motd.pp を含め、ノードが設定されるようにこのファイルを渡します。motd.pp ファイル自体には、motd をインストールして設定する Puppet クラスが含まれています。
次に、OS::TripleO::NodeExtraConfigPost: リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/puppet_post_config.yaml) を作成します。
resource_registry:
OS::TripleO::NodeExtraConfigPost: /home/stack/templates/custom_puppet_config.yaml
最後に、オーバークラウドのスタックが作成または更新されたら、この環境ファイルを含めます。
$ openstack overcloud deploy --templates -e /home/stack/templates/puppet_post_config.yaml
これにより、motd.pp からの設定がオーバークラウド内の全ノードに適用されます。

6.18. カスタムのコア Heat テンプレートの使用

オーバークラウドの作成時に、director は Heat テンプレートのコアセットを使用します。標準の Heat テンプレートをローカルディレクトリーにコピーして、オーバークラウド作成にこれらのテンプレートを使用することが可能です。
/usr/share/openstack-tripleo-heat-templates にある Heat テンプレートコレクションを stack ユーザーのテンプレートディレクトリーにコピーします。
$ cp -r /usr/share/openstack-tripleo-heat-templates ~/templates/my-overcloud
これにより、オーバークラウドの Heat テンプレートのクローンが作成されます。openstack overcloud deploy を実行する際には、--templates オプションを使用してローカルのテンプレートディレクトリーを指定します。これは、本シナリオの後半に記載しています (7章オーバークラウドの作成を参照)。

注記

ディレクトリーの指定をせずに --templates オプションを使用すると、director はデフォルトのテンプレートディレクトリー (/usr/share/openstack-tripleo-heat-templates) を使用します。

重要

Red Hat は、今後のリリースで Heat テンプレートコレクションの更新を提供します。変更されたテンプレートコレクションを使用すると、カスタムのコピーと /usr/share/openstack-tripleo-heat-templates にあるオリジナルのコピーとの間に相違が生じる可能性があります。Red Hat は、Heat テンプレートコレクションを変更する代わりに以下の項に記載する方法を使用することを推奨します。
Heat テンプレートコレクションのコピーを作成する場合には、git などのバージョン管理システムを使用して、テンプレートに加えられた変更をトラッキングすべきです。

第7章 オーバークラウドの作成

OpenStack 環境作成における最後の段階では、openstack overcloud deploy コマンドを実行して OpenStack 環境を作成します。このコマンドを実行する前に、キーオプションやカスタムの環境ファイルの追加方法を熟知するようにしてください。本章では、openstack overcloud deploy コマンドと、それに関連するオプションについて説明します。

警告

バックグラウンドプロセスとして openstack overcloud deploy を実行しないでください。バックグラウンドのプロセスとして開始された場合にはオーバークラウドの作成は途中で停止してしまう可能性があります。

7.1. オーバークラウドのパラメーター設定

以下の表では、openstack overcloud deploy コマンドを使用する際の追加パラメーターを一覧表示します。

表7.1 デプロイメントパラメーター

パラメーター
説明
--templates [TEMPLATES]
デプロイする Heat テンプレートが格納されているディレクトリー。空欄にした場合には、コマンドはデフォルトのテンプレートの場所である /usr/share/openstack-tripleo-heat-templates/ を使用します。
~/templates/my-overcloud
-t [TIMEOUT], --timeout [TIMEOUT]
デプロイメントのタイムアウト (分単位)
240
--control-scale [CONTROL_SCALE]
スケールアウトするコントローラーノード数
3
--compute-scale [COMPUTE_SCALE]
スケールアウトするコンピュートノード数
3
--ceph-storage-scale [CEPH_STORAGE_SCALE]
スケールアウトする Ceph Storage ノードの数
3
--block-storage-scale [BLOCK_STORAGE_SCALE]
スケールアウトする Cinder ノード数
3
--swift-storage-scale [SWIFT_STORAGE_SCALE]
スケールアウトする Swift ノード数
3
--control-flavor [CONTROL_FLAVOR]
コントローラーノードに使用するフレーバー
control
--compute-flavor [COMPUTE_FLAVOR]
コンピュートノードに使用するフレーバー
compute
--ceph-storage-flavor [CEPH_STORAGE_FLAVOR]
Ceph Storage ノードに使用するフレーバー
ceph-storage
--block-storage-flavor [BLOCK_STORAGE_FLAVOR]
Cinder ノードに使用するフレーバー
cinder-storage
--swift-storage-flavor [SWIFT_STORAGE_FLAVOR]
Swift Storage ノードに使用するフレーバー
swift-storage
--neutron-flat-networks [NEUTRON_FLAT_NETWORKS]
フラットなネットワークが neutron プラグインで設定されるように定義します。外部ネットワークを作成ができるようにデフォルトは「datacenter」に設定されています。
datacentre
--neutron-physical-bridge [NEUTRON_PHYSICAL_BRIDGE]
各ハイパーバイザーで作成する Open vSwitch ブリッジ。デフォルト値は「br-ex」で、通常この値の変更は推奨していません。
br-ex
--neutron-bridge-mappings [NEUTRON_BRIDGE_MAPPINGS]
使用する論理ブリッジから物理ブリッジへのマッピング。ホスト (br-ex) の外部ブリッジを物理名 (datacenter) にマッピングするようにデフォルト設定されています。これは、デフォルトの Floating ネットワークに使用されます。
datacentre:br-ex
--neutron-public-interface [NEUTRON_PUBLIC_INTERFACE]
ネットワークノード向けにインターフェースを br-ex にブリッジするインターフェースを定義します。
nic1、eth0
--hypervisor-neutron-public-interface [HYPERVISOR_NEUTRON_PUBLIC_INTERFACE]
各ハイパーバイザーでブリッジに追加するインターフェース
nic1、eth0
--neutron-network-type [NEUTRON_NETWORK_TYPE]
Neutron のテナントネットワーク種別
gre または vxlan
--neutron-tunnel-types [NEUTRON_TUNNEL_TYPES]
neutron テナントネットワークのトンネリング種別。複数の値を指定するには、コンマ区切りの文字列を使用します。
'vxlan' 'gre,vxlan'
--neutron-tunnel-id-ranges [NEUTRON_TUNNEL_ID_RANGES]
テナントネットワークを割り当てに使用できる GRE トンネリングの ID 範囲
1:1000
--neutron-vni-ranges [NEUTRON_VNI_RANGES]
テナントネットワークを割り当てに使用できる VXLAN VNI の ID 範囲
1:1000
--neutron-disable-tunneling
VLAN で区切られたネットワークまたは neutron でのフラットネットワークを使用するためにトンネリングを無効化します。
--neutron-network-vlan-ranges [NEUTRON_NETWORK_VLAN_RANGES]
サポートされる Neutron ML2 および Open vSwitch VLAN マッピングの範囲。デフォルトでは、物理ネットワーク「datacentre」上の VLAN を許可するように設定されています。
datacentre:1:1000
--neutron-mechanism-drivers [NEUTRON_MECHANISM_DRIVERS]
neutron テナントネットワークのメカニズムドライバー。デフォルトでは、「openvswitch」に設定されており、複数の値を指定するにはコンマ区切りの文字列を使用します。
'openvswitch,l2population'
--libvirt-type [LIBVIRT_TYPE]
ハイパーバイザーに使用する仮想化タイプ
kvm、qemu
--ntp-server [NTP_SERVER]
時間同期に使用するネットワークタイムプロトコル (NTP) サーバー
pool.ntp.org
--cinder-lvm
Cinder ストレージには LVM iSCSI ドライバーを使用します。
--tripleo-root [TRIPLEO_ROOT]
director の設定ファイルを保存するディレクトリー。デフォルトのままにします。
--nodes-json [NODES_JSON]
ノード登録に使用するオリジナルの JSON ファイル。オーバークラウドの作成後には、director によりこのファイルが変更されます。デフォルトは、instackenv.json です。
--no-proxy [NO_PROXY]
環境変数 no_proxy のカスタム値を定義します。これにより、プロキシー通信からの特定のドメイン拡張は除外されます。
-O [OUTPUT DIR], --output-dir [OUTPUT DIR]
Tuskar テンプレートファイルを書き込むディレクトリー。存在しない場合は作成されます。ディレクトリーが指定されていない場合は、一時ディレクトリーが使用されます。
~/templates/plan-templates
-e [EXTRA HEAT TEMPLATE], --extra-template [EXTRA HEAT TEMPLATE]
オーバークラウドデプロイメントに渡す追加の環境ファイル。複数回指定することが可能です。openstack overcloud deploy コマンドに渡す環境ファイルの順序が重要である点に注意してください。たとえば、逐次的に渡される各環境ファイルは、前の環境ファイルのパラメーターを上書きします。
-e ~/templates/my-config.yaml
--validation-errors-fatal
オーバークラウドの作成プロセスでは、一式のデプロイメントチェックが行われます。このオプションは、事前デプロイメントチェックで何らかのエラーが発生した場合に存在します。どのようなエラーが発生してもデプロイメントが失敗するので、このオプションを使用することを推奨します。
--validation-warnings-fatal
オーバークラウドの作成プロセスで、デプロイ前に一連のチェックを行います。このオプションは、デプロイ前のチェックでクリティカルではない警告が発生した場合に存在します。
--rhel-reg
カスタマーポータルまたは Satellite 6 にオーバークラウドノードを登録します。
--reg-method
オーバークラウドノードに使用する登録メソッド
Red Hat Satellite 6 または Red Hat Satellite 5 は satellite、カスタマーポータルは portal
--reg-org [REG_ORG]
登録に使用する組織
--reg-force
すでに登録済みの場合でもシステムを登録します。
--reg-sat-url [REG_SAT_URL]
オーバークラウドノードを登録する Satellite サーバーのベース URL。このパラメーターには、HTTPS URL ではなく、Satellite の HTTP URL を使用します。たとえば、https://satellite.example.com ではなく http://satellite.example.com を使用します。オーバークラウドの作成プロセスではこの URL を使用して、どのサーバーが Red Hat Satellite 5 または Red Hat Satellite 6 サーバーであるかを判断します。Red Hat Satellite 5 サーバーの場合は、オーバークラウドは katello-ca-consumer-latest.noarch.rpm ファイルを取得して subscription-manager に登録し、katello-agent をインストールします。Red Hat Satellite 5 サーバーの場合はオーバークラウドは RHN-ORG-TRUSTED-SSL-CERT ファイルを取得して rhnreg_ks に登録します。
--reg-activation-key [REG_ACTIVATION_KEY]
登録に使用するアクティベーションキー

注記

オプションの完全一覧については、以下のコマンドを実行します。
$ openstack help overcloud deploy

7.2. オーバークラウド作成時の環境ファイルの追加

オーバークラウドをカスタマイズするには、-e を指定して、環境ファイルを追加します。必要に応じていくつでも環境ファイルを追加することができますが、後で実行される環境ファイルで定義されているパラメーターとリソースが優先されることになるため、環境ファイルの順番は重要です。以下の一覧は、環境ファイルの順序の例です。
  • Heat テンプレートコレクションの初期化ファイル (environments/network-isolation.yaml) を含むネットワーク分離ファイルと、次にカスタムの NIC 設定ファイル。ネットワークの分離についての詳しい情報は、「ネットワークの分離」を参照してください。
  • 外部のロードバランシングの環境ファイル
  • Ceph Storage、NFS、iSCSI などのストレージ環境ファイル
  • Red Hat CDN または Satellite 登録用の環境ファイル
  • その他のカスタム環境ファイル

警告

-e オプションを使用してオーバークラウドに追加した環境ファイルはいずれも、オーバークラウドのスタック定義の一部となります。director は、「8章オーバークラウド作成後のタスクの実行」に記載の再デプロイおよびデプロイ後の機能にこれらの環境ファイルを必要とします。これらのファイルが含まれていない場合には、オーバークラウドが破損する可能性があります。
オーバークラウドの設定を後で変更する予定がある場合は、カスタム環境ファイルと Heat テンプレートのパラメーターを変更し、openstack overcloud deploy のコマンドを再度実行します。オーバークラウドを手動で編集しても、director を使用してオーバークラウドスタックの更新を行う際に director の設定で上書きされてしまうので、設定は直接編集しないでください。

7.3. オーバークラウドの作成例

以下のコマンドは、カスタムの環境ファイルを追加で指定して、どのようにオーバークラウドの作成を開始するかに関する例です。
$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/storage-environment.yaml --control-scale 3 --compute-scale 3 --ceph-storage-scale 3 --control-flavor control --compute-flavor compute --ceph-storage-flavor ceph-storage --ntp-server pool.ntp.org --neutron-network-type vxlan --neutron-tunnel-types vxlan
このコマンドでは、以下の追加オプションも使用できます。
  • --templates: /usr/share/openstack-tripleo-heat-templates の Heat テンプレートコレクションを使用してオーバークラウドを作成します。
  • -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml: -e オプションは、オーバークラウドデプロイメントに別の環境ファイルを追加します。この場合は、ネットワーク分離の設定を初期化する環境ファイルです。
  • -e ~/templates/network-environment.yaml: -e オプションはオーバークラウドデプロイメントに別の環境ファイルを追加します。この場合は、「ネットワーク環境ファイルの作成」で作成したネットワーク環境ファイルです。
  • -e ~/templates/storage-environment.yaml: -e オプションはオーバークラウドデプロイメントに別の環境ファイルを追加します。この場合は、ストレージの設定を初期化する環境ファイルです。
  • --control-scale 3: コントローラーノードを 3 つにスケーリングします。
  • --compute-scale 3: コンピュートノードを 3 つにスケーリングします。
  • --ceph-storage-scale 3: Ceph Storage ノードを 3 つにスケーリングします。
  • --control-flavor control: 対象のコントローラーノードに特定のフレーバーを使用します。
  • --compute-flavor compute: 対象のコンピュートノードに特定のフレーバーを使用します。
  • --ceph-storage-flavor ceph-storage: Ceph Storage ノードに特定のフレーバーを使用します。
  • --ntp-server pool.ntp.org: 時刻の同期に NTP サーバーを使用します。これは、コントローラーノードクラスターの同期を保つ際に便利です。
  • --neutron-network-type vxlan: オーバークラウドの Neutron ネットワークに Virtual Extensible LAN (VXLAN) を使用します。
  • --neutron-tunnel-types vxlan: オーバークラウドの Neutron トンネリングに Virtual Extensible LAN (VXLAN) を使用します。

7.4. オーバークラウド作成の監視

オーバークラウドの作成プロセスが開始され、director によりノードがプロビジョニングされます。このプロセスは完了するまで多少時間がかかります。オーバークラウドの作成のステータスを確認するには、stack ユーザーとして別のターミナルを開き、以下を実行します。
$ source ~/stackrc                # Initializes the stack user to use the CLI commands
$ heat stack-list --show-nested
heat stack-list --show-nested コマンドは、オーバークラウド作成の現在のステージを表示します。

7.5. オーバークラウドへのアクセス

director は、director ホストからオーバークラウドに対話するための設定を行い、認証をサポートするスクリプトを作成して、stack ユーザーのホームディレクトリーにこのファイル (overcloudrc) を保存します。このファイルを使用するには、以下のコマンドを実行します。
$ source ~/overcloudrc
これにより、director ホストの CLI からオーバークラウドと対話するために必要な環境変数が読み込まれます。director ホストとの対話に戻るには、以下のコマンドを実行します。
$ source ~/stackrc
オーバークラウドの各ノードには、heat-admin と呼ばれるユーザーが含まれます。stack ユーザーには、各ノードに存在するこのユーザーに SSH 経由でアクセスすることができます。SSH でノードにアクセスするには、希望のノードの IP アドレスを特定します。
$ nova list
次に、heat-admin ユーザーとノードの IP アドレスを使用して、ノードに接続します。
$ ssh heat-admin@192.0.2.23

7.6. オーバークラウド作成の完了

これでオーバークラウドの作成が完了しました。作成後の機能については、「8章オーバークラウド作成後のタスクの実行」を参照してください。

第8章 オーバークラウド作成後のタスクの実行

本章では、任意のオーバークラウドを作成後に実行するタスクについて考察します。

8.1. オーバークラウドのテナントネットワークの作成

オーバークラウドには、インスタンス用のテナントネットワークが必要です。source コマンドで overcloud を読み込んで、Neutron で初期テナントネットワークを作成します。以下に例を示します。
$ source ~/overcloudrc
$ neutron net-create default
$ neutron subnet-create --name default --gateway 172.20.1.1 default 172.20.0.0/16
上記のステップにより、default という名前の基本的な Neutron ネットワークが作成されます。オーバークラウドは、内部 DHCP メカニズムを使用したこのネットワークから、IP アドレスを自動的に割り当てます。
neutron net-list で作成したネットワークを確認します。
$ neutron net-list
+-----------------------+-------------+----------------------------------------------------+
| id                    | name        | subnets                                            |
+-----------------------+-------------+----------------------------------------------------+
| 95fadaa1-5dda-4777... | default     | 7e060813-35c5-462c-a56a-1c6f8f4f332f 172.20.0.0/16 |
+-----------------------+-------------+----------------------------------------------------+

8.2. オーバークラウドの外部ネットワークの作成

先ほど 「ネットワークの分離」 で外部ネットワークに使用するノードインターフェースを設定しましたが、インスタンスに Floating IP を割り当てることができるように、オーバークラウドでこのネットワークを作成する必要があります。

ネイティブ VLAN の使用

以下の手順では、外部ネットワーク向けの専用インターフェースまたはネイティブの VLAN が設定されていることが前提です。
source コマンドで overcloud を読み込み、Neutron で外部ネットワークを作成します。以下に例を示します。
$ source ~/overcloudrc
$ neutron net-create nova --router:external --provider:network_type flat --provider:physical_network datacentre
$ neutron subnet-create --name nova --enable_dhcp=False --allocation-pool=start=10.1.1.51,end=10.1.1.250 --gateway=10.1.1.1 nova 10.1.1.0/24
以下の例では、nova という名前のネットワークを作成します。オーバークラウドには、デフォルトの Floating IP プールにこの特定の名前が必要です。このネットワークは、「オーバークラウドの検証」の検証テストでも重要となります。
このコマンドにより、ネットワークと datacenter の物理ネットワークのマッピングも行われます。デフォルトでは、datacenterbr-ex ブリッジにマッピングされます。オーバークラウドの作成時にカスタムの Neutron の設定を使用していない限りは、このオプションはデフォルトのままにしてください。

非ネイティブ VLAN の使用

ネイティブ VLAN を使用しない場合には、以下のコマンドでネットワークを VLAN に割り当てます。
$ source ~/overcloudrc
$ neutron net-create nova --router:external --provider:network_type vlan --provider:physical_network datacentre --provider:segmentation_id 104
$ neutron subnet-create --name nova --enable_dhcp=False --allocation-pool=start=10.1.1.51,end=10.1.1.250 --gateway=10.1.1.1 nova 10.1.1.0/24
provider:segmentation_id の値は、使用する VLAN を定義します。この場合は、104 を使用します。
neutron net-list で作成したネットワークを確認します。
$ neutron net-list
+-----------------------+-------------+---------------------------------------------------+
| id                    | name        | subnets                                           |
+-----------------------+-------------+---------------------------------------------------+
| d474fe1f-222d-4e32... | nova        | 01c5f621-1e0f-4b9d-9c30-7dc59592a52f 10.1.1.0/24  |
+-----------------------+-------------+---------------------------------------------------+

8.3. 追加の Floating IP ネットワークの作成

Floating IP ネットワークは、以下の条件を満たす限りは、br-ex だけでなく、どのブリッジにも使用することができます。
  • ネットワーク環境ファイルで、NeutronExternalNetworkBridge"''" に設定されていること。
  • デプロイ中に追加のブリッジをマッピングしていること。たとえば、br-floating という新規ブリッジを floating という物理ネットワークにマッピングするには、以下のコマンドを実行します。
    $ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml --neutron-bridge-mappings datacenter:br-ex,floating:br-floating
オーバークラウドの作成後に Floating IP ネットワークを作成します。
$ neutron net-create ext-net --router:external --provider:physical_network floating --provider:network_type vlan --provider:segmentation_id 105
$ neutron subnet-create --name ext-subnet --enable_dhcp=False --allocation-pool start=10.1.2.51,end=10.1.2.250 --gateway 10.1.2.1 ext-net 10.1.2.0/24

8.4. オーバークラウドのプロバイダーネットワークの作成

プロバイダーネットワークは、デプロイしたオーバークラウドの外部に存在する datacenter ネットワークに物理的に接続されたネットワークです。これは、既存のインフラストラクチャーネットワークや、Floating IP の代わりにルーティングによって直接インスタンスに外部アクセスを提供するネットワークを使用することができます。
プロバイダーネットワークを作成する際には、ブリッジマッピングを使用する物理ネットワークに関連付けます。これは、Floating IP ネットワークの作成と同様です。コンピュートノードは、仮想マシンの仮想ネットワークインターフェースをアタッチされているネットワークインターフェースに直接接続するため、プロバイダーネットワークはコントローラーとコンピュートの両ノードに追加します。
たとえば、使用するプロバイダーネットワークが br-ex ブリッジ上の VLAN の場合には、以下のコマンドを使用してプロバイダーネットワークを VLAN 201 上に追加します。
$ neutron net-create --provider:physical_network datacentre --provider:network_type vlan --provider:segmentation_id 201 --shared provider_network
このコマンドにより、共有ネットワークが作成されます。また、「--shared」と指定する代わりにテナントを指定することも可能です。そのネットワークは、指定されたテナントに対してのみ提供されます。プロバイダーネットワークを外部としてマークした場合には、そのネットワークでポートを作成できるのはオペレーターのみとなります。
Neutron が DHCP サービスをテナントのインスタンスに提供するように設定するには、プロバイダーネットワークにサブネットを追加します。
$ neutron subnet-create --name provider-subnet --enable_dhcp=True --allocation-pool start=10.9.101.50,end=10.9.101.100 --gateway 10.9.101.254 provider_network 10.9.101.0/24

8.5. オーバークラウドの検証

オーバークラウドは、Tempest を使用して一連の統合テストを実行します。以下の手順では、Tempest を使用してお使いのオーバークラウドを検証する方法を説明します。アンダークラウドからこのテストを実行する場合は、アンダークラウドのホストがオーバークラウドの内部 API ネットワークにアクセスできるようにします。たとえば、 172.16.0.201/24 のアドレスを使用して内部 API ネットワーク (ID: 201) にアクセスするにはアンダークラウドホストに一時 VLAN を追加します。
$ source ~/stackrc
$ sudo ovs-vsctl add-port br-ctlplane vlan201 tag=201 -- set interface vlan201 type=internal
$ sudo ip l set dev vlan201 up; sudo ip addr add 172.16.0.201/24 dev vlan201
Tempest を実行する前に、heat_stack_owner ロールがオーバークラウドに存在することを確認してください。
$ source ~/overcloudrc
$ openstack role list
+----------------------------------+------------------+
| ID                               | Name             |
+----------------------------------+------------------+
| 6226a517204846d1a26d15aae1af208f | swiftoperator    |
| 7c7eb03955e545dd86bbfeb73692738b | heat_stack_owner |
+----------------------------------+------------------+
このロールが存在しない場合は、作成します。
$ keystone role-create --name heat_stack_owner
stack ユーザーのホームディレクトリーに tempest ディレクトリーを設定して、Tempest スイートをローカルにインストールします。
$ mkdir ~/tempest
$ cd ~/tempest
$ /usr/share/openstack-tempest-liberty/tools/configure-tempest-directory
上記のコマンドにより、Tempest ツールセットのローカルバージョンが作成されます。
オーバークラウドの作成プロセスが完了した後には、director により ~/tempest-deployer-input.conf というファイルが作成されます。このファイルは、オーバークラウドに関連する Tempest の設定オプションを提供します。このファイルを使用して Tempest を設定するには、以下のコマンドを実行します。
$ tools/config_tempest.py --deployer-input ~/tempest-deployer-input.conf --debug --create identity.uri $OS_AUTH_URL identity.admin_password $OS_PASSWORD --network-id d474fe1f-222d-4e32-9242-cd1fefe9c14b
$OS_AUTH_URL および $OS_PASSWORD の環境変数は、以前にソースとして使用した overcloudrc ファイルの値セットを使用します。--network-id「オーバークラウドの外部ネットワークの作成」で作成した外部ネットワークの UUID です。

重要

設定スクリプトにより、Tempest テスト用に Cirros イメージをダウンロードします。director にはインターネットアクセスがあり、インターネットへのアクセスのあるプロキシーが使用されるようにしてください。http_proxy の環境変数を設定して、コマンドラインの操作にプロキシーを使用します。
以下のコマンドを使用して、Tempest テストの全スイートを実行します。
$ tools/run-tests.sh

注記

完全な Tempest テストスイートには、数時間かかる場合があります。代わりに、'.*smoke' オプションを使用してテストの一部を実行します。
$ tools/run-tests.sh '.*smoke'
各テストはオーバークラウドに対して実行され、次の出力で各テストとその結果が表示されます。同じディレクトリーで生成された tempest.log ファイルで、各テストの詳しい情報を確認することができます。たとえば、出力では以下のように失敗したテストについて表示する場合があります。
      {2} tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair [18.305114s] ... FAILED
これは、詳細情報が含まれるログのエントリーと一致します。コロンで区切られたテストの名前空間の最後の 2 つに関するログを検索します。この例では、ログで ServersTestJSON:test_create_specify_keypair を検索します。
$ grep "ServersTestJSON:test_create_specify_keypair" tempest.log -A 4
2016-03-17 14:49:31.123 10999 INFO tempest_lib.common.rest_client [req-a7a29a52-0a52-4232-9b57-c4f953280e2c ] Request (ServersTestJSON:test_create_specify_keypair): 500 POST http://192.168.201.69:8774/v2/2f8bef15b284456ba58d7b149935cbc8/os-keypairs 4.331s
2016-03-17 14:49:31.123 10999 DEBUG tempest_lib.common.rest_client [req-a7a29a52-0a52-4232-9b57-c4f953280e2c ] Request - Headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': '<omitted>'}
        Body: {"keypair": {"name": "tempest-key-722237471"}}
    Response - Headers: {'status': '500', 'content-length': '128', 'x-compute-request-id': 'req-a7a29a52-0a52-4232-9b57-c4f953280e2c', 'connection': 'close', 'date': 'Thu, 17 Mar 2016 04:49:31 GMT', 'content-type': 'application/json; charset=UTF-8'}
        Body: {"computeFault": {"message": "The server has either erred or is incapable of performing the requested operation.", "code": 500}} _log_request_full /usr/lib/python2.7/site-packages/tempest_lib/common/rest_client.py:414

注記

-A 4 オプションを指定すると次の 4 行が表示されます。この 4 行には、通常要求ヘッダーとボディー、応答ヘッダーとボディーが含まれます。
検証が完了したら、オーバークラウドの内部 API への一時接続を削除します。この例では、以下のコマンドを使用して、以前にアンダークラウドで作成した VLAN を削除します。
$ source ~/stackrc
$ sudo ovs-vsctl del-port vlan201

8.6. コントローラーノードのフェンシング

フェンシングとは、クラスターとそのリソースを保護するためにノードを分離するプロセスのことです。フェンシングがないと、問題のあるノードが原因でクラスター内のデータが破損する可能性があります。
director は、Pacemaker を使用して、高可用性のコントローラーノードクラスターを提供します。Pacemaker は、STONITH (Shoot-The-Other-Node-In-The-Head) というプロセスを使用して、障害のあるノードをフェンシングするサポートをします。デフォルトでは、STONITH はお使いのクラスター上では無効化されているため、Pacemaker がクラスター内の各ノードの電源管理を制御できるように手動で設定する必要があります。

注記

director 上の stack ユーザーから、heat-admin ユーザーとして各ノードにログインします。オーバークラウドを作成すると自動的に stack ユーザーの SSH キーが各ノードの heat-admin にコピーされます。
pcs status を使用して、クラスターが実行していることを確認します。
  $ sudo pcs status
  Cluster name: openstackHA
  Last updated: Wed Jun 24 12:40:27 2015
  Last change: Wed Jun 24 11:36:18 2015
  Stack: corosync
  Current DC: lb-c1a2 (2) - partition with quorum
  Version: 1.1.12-a14efad
  3 Nodes configured
  141 Resources configured
pcs property show で、STONITH が無効化されていることを確認します。
  $ sudo pcs property show
  Cluster Properties:
  cluster-infrastructure: corosync
  cluster-name: openstackHA
  dc-version: 1.1.12-a14efad
  have-watchdog: false
  stonith-enabled: false
コントローラーノードには、director がサポートするさまざまな電源管理デバイス用のフェンシングエージェントのセットが実装されています。これには、以下が含まれます。

表8.1 フェンスエージェント

デバイス
タイプ
fence_ipmilan
Intelligent Platform Management Interface (IPMI)
fence_idracfence_drac5
Dell Remote Access Controller (DRAC)
fence_ilo
Integrated Lights-Out (iLO)
fence_ucs
Cisco UCS: 詳しい情報は 「Configuring Cisco Unified Computing System (UCS) Fencing on an OpenStack High Availability Environment」 の記事を参照してください。
fence_xvmfence_virt
Libvirt と SSH
本項ではこれ以降、IPMI エージェント (fence_ipmilan) を例として使用します。
Pacemaker がサポートする IPMI オプションの完全一覧を表示します。
$ sudo pcs stonith describe fence_ipmilan
各ノードには、電源管理を制御する IPMI デバイスの設定が必要です。これには、各ノードの Pacemaker に stonith デバイスを追加する必要があります。クラスターに以下のコマンドを実行します。
コントローラーノード 1 の場合:
$ sudo pcs stonith create my-ipmilan-for-controller01 fence_ipmilan pcmk_host_list=overcloud-controller-0 ipaddr=192.0.2.205 login=admin passwd=p@55w0rd! lanplus=1 cipher=1 op monitor interval=60s
$ sudo pcs constraint location my-ipmilan-for-controller01 avoids overcloud-controller-0
コントローラーノード 2 の場合:
$ sudo pcs stonith create my-ipmilan-for-controller02 fence_ipmilan pcmk_host_list=overcloud-controller-1 ipaddr=192.0.2.206 login=admin passwd=p@55w0rd! lanplus=1 cipher=1 op monitor interval=60s
$ sudo pcs constraint location my-ipmilan-for-controller02 avoids overcloud-controller-1
コントローラーノード 3 の場合:
$ sudo pcs stonith create my-ipmilan-for-controller03 fence_ipmilan pcmk_host_list=overcloud-controller-2 ipaddr=192.0.2.206 login=admin passwd=p@55w0rd! lanplus=1 cipher=1 op monitor interval=60s
$ sudo pcs constraint location my-ipmilan-for-controller03 avoids overcloud-controller-2

注記

各サンプルの 2 番目のコマンドは、ノードが自らをフェンシングしないようにします。
以下のコマンドを実行して、すべての STONITH リソースを表示します。
$ sudo pcs stonith show
以下のコマンドを実行して、特定の STONITH リソースを表示します。
$ sudo pcs stonith show [stonith-name]
最後に、stonith プロパティーを true に設定して、フェンシングを有効にします。
$ sudo pcs property set stonith-enabled=true
プロパティーを確認します。
$ sudo pcs property show

8.7. オーバークラウド環境の変更

オーバークラウドを変更して、別機能を追加したり、操作の方法を変更したりする場合があります。オーバークラウドを変更するには、カスタムの環境ファイルと Heat テンプレートに変更を加えて、最初に作成したオーバークラウドから openstack overcloud deploy コマンドをもう 1 度実行します。たとえば、「7章オーバークラウドの作成」を使用してオーバークラウドを作成した場合には、以下のコマンドを再度実行します。
$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/storage-environment.yaml --control-scale 3 --compute-scale 3 --ceph-storage-scale 3 --control-flavor control --compute-flavor compute --ceph-storage-flavor ceph-storage --ntp-server pool.ntp.org --neutron-network-type vxlan --neutron-tunnel-types vxlan
director は Heat 内の overcloud スタックを確認してから、環境ファイルと Heat テンプレートのあるスタックで各アイテムを更新します。オーバークラウドは再度作成されずに、既存のオーバークラウドに変更が加えられます。
新規環境ファイルを追加する場合には、-e オプションを指定して openstack overcloud deploy コマンドを実行しファイルを追加します。
$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/storage-environment.yaml -e ~/templates/new-environment.yaml --control-scale 3 --compute-scale 3 --ceph-storage-scale 3 --control-flavor control --compute-flavor compute --ceph-storage-flavor ceph-storage --ntp-server pool.ntp.org --neutron-network-type vxlan --neutron-tunnel-types vxlan
これにより、環境ファイルからの新規パラメーターやリソースがスタックに追加されます。

重要

director が後ほど上書きしてしまう可能性がありますので、オーバークラウドの設定に手動で変更を加えないように推奨しています。

8.8. オーバークラウドへの仮想マシンのインポート

既存の OpenStack 環境があり、仮想マシンを Red Hat OpenStack Platform 環境に移行する予定がある場合には、以下の手順を使用します。
実行中のサーバーのスナップショットを作成して新規イメージを作成し、そのイメージをダウンロードします。
$ nova image-create instance_name image_name
$ glance image-download image_name --file exported_vm.qcow2
エクスポートしたイメージをオーバークラウドにアップロードして、新規インスタンスを起動します。
$ glance image-create --name imported_image --file exported_vm.qcow2 --disk-format qcow2 --container-format bare
$ nova boot --poll --key-name default --flavor m1.demo --image imported_image --nic net-id=net_id imported

重要

各仮想マシンのディスクは、既存の OpenStack 環境から新規の Red Hat OpenStack Platform にコピーする必要があります。QCOW を使用したスナップショットでは、元の階層化システムが失われます。

8.9. オーバークラウドのコンピュートノードからの仮想マシンの移行

オーバークラウドのコンピュートノードでメンテナンスを行う場合があります。ダウンタイムを防ぐには、以下の手順に従ってそのコンピュートノード上の仮想マシンを同じクラウド内の別のコンピュートノードに移行します。

手順8.1 コンピュートノードの SSH キーの設定

ホストの各 nova ユーザーが移行プロセス中にアクセスできるように、全コンピュートノードには共有 SSH キーが必要です。以下の手順を使用して、各コンピュートノードで SSH キーペアを設定します。
  1. SSH キーを生成します。
    $ ssh-keygen -t rsa -f nova_id_rsa
    
  2. 各コンピュートノード上の nova ユーザーのホームディレクトリーに、SSH キーをコピーします。
  3. nova ユーザーとして各コンピュートノードにログインして、以下のスクリプトを実行し、キーを設定します。
    NOVA_SSH=/var/lib/nova/.ssh
    mkdir ${NOVA_SSH}
    
    cp nova_id_rsa ${NOVA_SSH}/id_rsa
    chmod 600 ${NOVA_SSH}/id_rsa
    cp nova_id_rsa.pub ${NOVA_SSH}/id_rsa.pub
    cp nova_id_rsa.pub ${NOVA_SSH}/authorized_keys
    
    chown -R nova.nova ${NOVA_SSH}
    
    # enable login for nova user on compute hosts:
    usermod -s /bin/bash nova
    
    # add ssh keys of overcloud nodes into known hosts:
    ssh-keyscan -t rsa `os-apply-config --key hosts --type raw --key-default '' | awk '{print $1}'` >> /etc/ssh/ssh_known_hosts
    

手順8.2 コンピュートノードからのインスタンスの移行

  1. director で、overcloudrc を読み込み、現在の nova サービスの一覧を取得します。
    $ source ~/stack/overcloudrc
    $ nova service-list
    
  2. 移行予定のノードで nova-compute サービスを無効にします。
    $ nova service-disable [hostname] nova-compute
    
    これにより、新規インスタンスはそのノード上でスケジュールされないようになります。
  3. ノードからインスタンスを移行するプロセスを開始します。
    $ nova host-servers-migrate [hostname]
    
  4. 移行プロセスの現況は、以下のコマンドで取得できます。
    $ nova migration-list
    
  5. 各インスタンスの移行が完了したら、nova の状態は VERIFY_RESIZE に変わります。ここで、移行を正常に完了するか、環境をロールバックするかを確定する機会が提供されます。移行を確定するには、以下のコマンドを使用してください。
    $ nova resize-confirm [server-name]
    
これにより、ホストからすべてのインスタンスが移行されます。インスタンスのダウンタイムなしにホスト上のメンテナンスを実行できるようになります。ホストを有効な状態に戻すには、以下のコマンドを実行します。
$ nova service-enable [hostname] nova-compute

8.10. オーバークラウドが削除されてないように保護

heat stack-delete overcloud コマンドで誤って削除されないように、Heat には特定のアクションを制限するポリシーセットが含まれます。/etc/heat/policy.json を開いて、以下のパラメーターを検索します。
"stacks:delete": "rule:deny_stack_user"
このパラメーターの設定を以下のように変更します。
"stacks:delete": "rule:deny_everybody"
ファイルを保存します。
これにより heat クライアントでオーバークラウドが削除されないようにします。オーバークラウドを削除できるように設定するには、ポリシーを元の値に戻します。

8.11. オーバークラウドの削除

オーバークラウドはすべて、必要に応じて削除することができます。

手順8.3 オーバークラウドの削除

  1. 既存のオーバークラウドを削除します。
    $ heat stack-delete overcloud
    
  2. オーバークラウドが削除されていることを確認します。
    $ heat stack-list
    
    削除には、数分かかります。
削除が完了したら、デプロイメントシナリオの標準ステップに従って、オーバークラウドを再度作成します。

第9章 オーバークラウドのスケーリング

オーバークラウドの作成後に、ノードを追加または削除する必要がある場合があります。たとえば、オーバークラウドのコンピュートノードを追加する場合などです。このような状況では、オーバークラウドの更新が必要です。
以下の表を使用して、各ノード種別のスケーリングに対するサポートを判断してください。

表9.1 各ノード種別のスケーリングサポート

ノード種別
スケールアップ
スケールダウン
備考
コントローラー
コンピュート
Ceph Storage ノード
オーバークラウドを最初に作成する際に Ceph Storage ノードを 1 つ以上設定する必要があります。
Cinder Storage ノード
Swift Storage ノード

9.1. コンピュートノードまたは Ceph Storage ノードの追加

director のノードプールにさらにノードを追加するには、登録する新規ノードの詳細を記載した新しい JSON ファイル (例: newnodes.json) を作成します。
{
  "nodes":[
      {
          "mac":[
              "dd:dd:dd:dd:dd:dd"
          ],
          "cpu":"4",
          "memory":"6144",
          "disk":"40",
          "arch":"x86_64",
          "pm_type":"pxe_ipmitool",
          "pm_user":"admin",
          "pm_password":"p@55w0rd!",
          "pm_addr":"192.0.2.207"
      },
      {
          "mac":[
              "ee:ee:ee:ee:ee:ee"
          ],
          "cpu":"4",
          "memory":"6144",
          "disk":"40",
          "arch":"x86_64",
          "pm_type":"pxe_ipmitool",
          "pm_user":"admin",
          "pm_password":"p@55w0rd!",
          "pm_addr":"192.0.2.208"
      },
  ]
}
これらのパラメーターについての説明は、「オーバークラウドへのノードの登録」を参照してください。
以下のコマンドを実行して、これらのノードを登録します。
$ openstack baremetal import --json newnodes.json
新規ノードを追加した後には、それらのイントロスペクションプロセスを起動します。各新規ノードに以下のコマンドを使用します。
$ ironic node-list
$ ironic node-set-maintenance [NODE UUID] true
$ openstack baremetal introspection start [NODE UUID]
$ ironic node-set-maintenance [NODE UUID] false
このコマンドは、ノードのハードウェアプロパティーの検出とベンチマークを実行します。
イントロスペクションプロセスの完了後には、各新規ノードを任意のロールにタグ付けしてスケーリングします。たとえば、コンピュートノードの場合には、以下のコマンドを使用します。
$ ironic node-update [NODE UUID] add properties/capabilities='profile:compute,boot_option:local'
または、Automated Health Check (AHC) ツールを使用して、新規ノードを必要なロールに自動的にタグ付けすることもできます。詳しくは、「付録C プロファイルの自動タグ付け」を参照してください。
デプロイメント中に使用するブートイメージを設定します。bm-deploy-kernel および bm-deploy-ramdisk イメージの UUID を確認します。
$ glance image-list
+--------------------------------------+------------------------+
| ID                                   | Name                   |
+--------------------------------------+------------------------+
| 09b40e3d-0382-4925-a356-3a4b4f36b514 | bm-deploy-kernel       |
| 765a46af-4417-4592-91e5-a300ead3faf6 | bm-deploy-ramdisk      |
| ef793cd0-e65c-456a-a675-63cd57610bd5 | overcloud-full         |
| 9a51a6cb-4670-40de-b64b-b70f4dd44152 | overcloud-full-initrd  |
| 4f7e33f4-d617-47c1-b36f-cbe90f132e5d | overcloud-full-vmlinuz |
+--------------------------------------+------------------------+
新規ノードの deploy_kernel および deploy_ramdisk 設定にこれらの UUID を設定します。
$ ironic node-update [NODE UUID] add driver_info/deploy_kernel='09b40e3d-0382-4925-a356-3a4b4f36b514'
$ ironic node-update [NODE UUID] add driver_info/deploy_ramdisk='765a46af-4417-4592-91e5-a300ead3faf6'
オーバークラウドをスケーリングするには、ロールに必要なノード数を指定して openstack overcloud deploy を再実行する必要があります。たとえば、コンピュートノード 5 台にスケーリングするには、以下のコマンドを実行します。
$ openstack overcloud deploy --templates --compute-scale 5 [OTHER_OPTIONS]
上記のコマンドにより、オーバークラウドのスタック全体が更新されます。このコマンドが更新するのは、スタックのみである点に注意してください。オーバークラウドの削除や、スタックの置き換えは行われません。

重要

コンピュート以外のノードに対する同様のスケジューリングパラメーターなど、最初に作成したオーバークラウドからの環境ファイルおよびオプションをすべて追加するようにしてください。

9.2. コンピュートノードの削除

オーバークラウドからコンピュートノードを削除する必要がある状況が出てくる可能性があります。たとえば、問題のあるコンピュートノードを置き換える必要がある場合などです。

重要

オーバークラウドからコンピュートノードを削除する前に、ワークロードをそのノードから別のコンピュートノードに移行してください。詳しくは、「オーバークラウドのコンピュートノードからの仮想マシンの移行」を参照してください。
次に、オーバークラウド上でノードの Compute サービスを無効化します。これにより、ノードで新規インスタンスがスケジューリングされないようになります。
$ source ~/stack/overcloudrc
$ nova service-list
$ nova service-disable [hostname] nova-compute
$ source ~/stack/stackrc
オーバークラウドノードを削除するには、ローカルのテンプレートファイルを使用して overcloud スタックへの更新が必要です。最初に、オーバークラウドスタックの UUID を特定します。
$ heat stack-list
削除するノードの UUID を特定します。
$ nova list
以下のコマンドを実行してスタックからノードを削除し、それに応じてプランを更新します。
$ openstack overcloud node delete --stack [STACK_UUID] --templates -e [ENVIRONMENT_FILE] [NODE1_UUID] [NODE2_UUID] [NODE3_UUID]

重要

オーバークラウドの作成時に追加の環境ファイルを渡した場合には、オーバークラウドに、不要な変更が手動で加えられないように、ここで -e または --environment-file オプションを使用して環境ファイルを再度指定します。
最後に、ノードの Compute サービスを nova からすべて削除します。
$ source ~/stack/overcloudrc
$ nova service-delete [service-id]
$ source ~/stack/stackrc
オーバークラウドから自由にノードを削除して、別の目的でそのノードを再プロビジョニングすることができます。

9.3. コンピュートノードの置き換え

コンピュートノードに障害が発生した場合に、機能しているノードに置き換えることができます。コンピュートノードを置き換えるには、以下の手順を使用します。
  1. 既存のコンピュートノードからワークロードを移行して、ノードをシャットダウンします。この手順は「オーバークラウドのコンピュートノードからの仮想マシンの移行」を参照してください。
  2. オーバークラウドからコンピュートノードを削除します。この手順は「コンピュートノードの削除」を参照してください。
  3. 新しいコンピュートノードでオーバークラウドをスケーリングアウトします。この手順は「9章オーバークラウドのスケーリング」を参照してください。
このプロセスでは、インスタンスの可用性に影響を与えることなく、ノードを置き換えることができるようにします。

9.4. コントローラーノードの置き換え

重要

以下の手順は現在確認中で、この状態のままでは使用しないでください。この問題に関する詳しい情報は BZ#1326507 を参照してください。
特定の状況では、高可用性クラスター内のコントローラーノードに障害が発生することがあり、その場合は、そのコントローラーノードをクラスターから削除して新しいコントローラーノードに置き換える必要があります。このステップには、クラスター内の他のノードとの接続を確認する作業も含まれます。
本項では、コントローラーノードの置き換えの手順について説明します。このプロセスでは openstack overcloud deploy コマンドを実行して、コントローラーノードを置き換えるための要求でオーバークラウドを更新します。このプロセスは、自動的には完了しない点に注意してください。オーバークラウドスタックの更新処理中のどの時点かで、openstack overcloud deploy コマンドによりエラーが報告されて、オーバークラウドスタックの更新が停止します。この時点で、プロセスに手動での介入が必要となります。この後に openstack overcloud deploy はプロセスを続行することができます。
まず最初に、削除するノードのインデックスを特定します。ノードのインデックスは、nova list の出力に表示されるインスタンス名のサフィックスです。
[stack@director ~]$ nova list
+--------------------------------------+------------------------+
| ID                                   | Name                   |
+--------------------------------------+------------------------+
| 861408be-4027-4f53-87a6-cd3cf206ba7a | overcloud-compute-0    |
| 0966e9ae-f553-447a-9929-c4232432f718 | overcloud-compute-1    |
| 9c08fa65-b38c-4b2e-bd47-33870bff06c7 | overcloud-compute-2    |
| a7f0f5e1-e7ce-4513-ad2b-81146bc8c5af | overcloud-controller-0 |
| cfefaf60-8311-4bc3-9416-6a824a40a9ae | overcloud-controller-1 |
| 97a055d4-aefd-481c-82b7-4a5f384036d2 | overcloud-controller-2 |
+--------------------------------------+------------------------+
この例では、overcloud-controller-1 ノードを削除して、overcloud-controller-3 に置き換えます。初めにノードをメンテナンスモードに切り替えて、director がエラーの発生したノードを再プロビジョニングしないようにします。nova list で表示されるインスタンスの ID を、ironic node-list で表示されるノード ID と相関させます。
[stack@director ~]$ ironic node-list
+--------------------------------------+------+--------------------------------------+
| UUID                                 | Name | Instance UUID                        |
+--------------------------------------+------+--------------------------------------+
| 36404147-7c8a-41e6-8c72-a6e90afc7584 | None | 7bee57cf-4a58-4eaf-b851-2a8bf6620e48 |
| 91eb9ac5-7d52-453c-a017-c0e3d823efd0 | None | None                                 |
| 75b25e9a-948d-424a-9b3b-f0ef70a6eacf | None | None                                 |
| 038727da-6a5c-425f-bd45-fda2f4bd145b | None | 763bfec2-9354-466a-ae65-2401c13e07e5 |
| dc2292e6-4056-46e0-8848-d6e96df1f55d | None | 2017b481-706f-44e1-852a-2ee857c303c4 |
| c7eadcea-e377-4392-9fc3-cf2b02b7ec29 | None | 5f73c7d7-4826-49a5-b6be-8bfd558f3b41 |
| da3a8d19-8a59-4e9d-923a-6a336fe10284 | None | cfefaf60-8311-4bc3-9416-6a824a40a9ae |
| 807cb6ce-6b94-4cd1-9969-5c47560c2eee | None | c07c13e6-a845-4791-9628-260110829c3a |
+--------------------------------------+------+--------------------------------------+
ノードをメンテナンスモードに切り替えます。
[stack@director ~]$ ironic node-set-maintenance da3a8d19-8a59-4e9d-923a-6a336fe10284 true
新規ノードを control プロファイルでタグ付けします。
[stack@director ~]$ ironic node-update 75b25e9a-948d-424a-9b3b-f0ef70a6eacf add properties/capabilities='profile:control,boot_option:local'
削除するノードインデックスを定義する YAML ファイルを作成します (~/templates/remove-node.yaml)。
parameters:
ControllerRemovalPolicies:
    [{'resource_list': ['1']}]

重要

ノードをインデックス 0 に置き換える場合には、置き換えを開始する前に Heat テンプレートを編集してブートストラップノードインデックスを変更します。Heat テンプレートコレクションの root ディレクトリーの overcloud-without-mergepy.yaml ファイルを開き、以下の行を変更します。
bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
上記の行を以下のように変更します。
bootstrap_nodeid: {get_attr: [Controller, resource.1.hostname]}
bootstrap_nodeid_ip: {get_attr: [Controller, resource.1.ip_address]}
ノードインデックスを特定した後には、オーバークラウドを再デプロイして、remove-node.yaml 環境ファイルを追加します。
[stack@director ~]$ openstack overcloud deploy --templates --control-scale 3 -e ~/remove-node.yaml

重要

オーバークラウドの作成時に追加の環境ファイルを渡した場合には、オーバークラウドに、不要な変更が手動で加えられないように、ここで -e または --environment-file オプションを使用して環境ファイルを再度渡します。
ただし、remove-node.yaml が必要なのは、この場合には 1 回のみである点に注意してください。
director は古いノードを削除して、新しいノードを作成してから、オーバークラウドスタックを更新します。以下のコマンドを使用すると、オーバークラウドスタックのステータスをチェックすることができます。
[stack@director ~]$ heat stack-list --show-nested
設定の後処理中には、オーバークラウドスタックの更新が UPDATE_FAILED エラーで停止します。これは、一部の Puppet モジュールがノードの置き換えをサポートしてないためです。処理のこの時点で手動による介入が必要です。以下に記載する設定ステップに従ってください。
  1. 残りのコントローラーノードの中の 1 つに heat-admin としてログインします。director の stack ユーザーには、heat-admin ユーザーにアクセスするための SSH キーがあります。
  2. エラーが発生したノードをクラスターから削除します。
    [heat-admin@overcloud-controller-0 ~]$ sudo crm_node -R overcloud-controller-1 --force
    
  3. エラーが発生したノードを RabbitMQ クラスターから削除します。
    [heat-admin@overcloud-controller-0 ~]$ sudo rabbitmqctl forget_cluster_node rabbit@overcloud-controller-1
    
  4. エラーが発生したノードを MongoDB から削除します。残りのノードのいずれかで、最初に MongoDB に接続します。
    [heat-admin@overcloud-controller-0 ~]$ mongo --host 192.168.0.23
    MongoDB shell version: 2.6.9
    connecting to: 192.168.0.23:27017/test
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
    http://docs.mongodb.org/
    Questions? Try the support group
    http://groups.google.com/group/mongodb-user
    tripleo:SECONDARY>
    
    MongoDB クラスターのステータスを確認します。
    tripleo:SECONDARY> rs.status()
    
    エラーが発生したノードを削除し、コマンドを終了します。
    tripleo:SECONDARY> rs.remove('192.168.0.23:27017')
    tripleo:SECONDARY> exit
    
  5. Galera クラスター内のノードの一覧を更新します。
    [heat-admin@overcloud-controller-0 ~]$ sudo pcs resource update galera wsrep_cluster_address=gcomm://overcloud-controller-0,overcloud-controller-3,overcloud-controller-2
    
  6. 各コントローラーノードにログインして、エラーの発生したノードを /etc/corosync/corosync.conf から削除して Corosync を再起動します。たとえば、コントローラーノード 0 の設定からエラーの発生したノードを削除するには、以下の手順を実行します。
    [heat-admin@overcloud-controller-0 ~]$ sudo vi /etc/corosync/corosync.conf
    
    エラーの発生したノード (node 1) が含まれているセクションを削除します。
    node {
    ring0_addr: overcloud-controller-1
    nodeid: 2
    }
    
    Corosync を再起動します。
    [heat-admin@overcloud-controller-0 ~]$ sudo systemctl restart corosync
    
    各ノードでこの手順を完了します。
  7. 新規ノードで Pacemaker と Corosync を起動します。
    [heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster node add overcloud-controller-3
    [heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster start overcloud-controller-3
    
  8. 新規ノード上で Keystone サービスを有効にします。残りのノードから director ホストに /etc/keystone をコピーします。
    [heat-admin@overcloud-controller-0 ~]$ sudo -i
    [root@overcloud-controller-0 ~]$ scp -r /etc/keystone stack@192.168.0.1:~/.
    
    次に、新規コントローラーノードにログインします。新規コントローラーノードから /etc/keystone ディレクトリーを削除して、director ホストから keystone ファイルをコピーします。
    [heat-admin@overcloud-controller-3 ~]$ sudo -i
    [root@overcloud-controller-3 ~]$ rm -rf /etc/keystone
    [root@overcloud-controller-3 ~]$ scp -r stack@192.168.0.1:~/keystone /etc/.
    [root@overcloud-controller-3 ~]$ chown -R keystone: /etc/keystone
    [root@overcloud-controller-3 ~]$ chown root /etc/keystone/logging.conf /etc/keystone/default_catalog.templates
    
    /etc/keystone/keystone.conf を編集して admin_bind_host および public_bind_host のパラメーターを新規コントローラーノードの IP アドレスに設定します。
    Pacemaker で Keystone サービスを有効化し、再起動します。
    [heat-admin@overcloud-controller-3 ~]$ sudo pcs resource enable openstack-keystone-clone overcloud-controller-3
    [heat-admin@overcloud-controller-3 ~]$ sudo pcs resource cleanup openstack-keystone-clone overcloud-controller-3
    
手動の設定が完了しました。オーバークラウドのコマンドを再度実行して、スタックの更新を継続します。
[stack@director ~]$ openstack overcloud deploy --templates --control-scale 3 -e [ENVIRONMENT_FILE]

重要

オーバークラウドの作成時に追加の環境ファイルを渡した場合には、オーバークラウドに、不要な変更が手動で加えられないように、ここで -e または --environment-file オプションを使用して環境ファイルを再度渡します。
ただし、remove-node.yaml は必要ない点に注意してください。
オーバークラウドスタックの更新が再度失敗した場合には、Keystone サービスの問題が原因となっている可能性があります。新規ノードにログインして、Keystone サービスをもう一度再起動してください。
[heat-admin@overcloud-controller-3 ~]$ sudo pcs resource enable openstack-keystone-clone overcloud-controller-3
[heat-admin@overcloud-controller-3 ~]$ sudo pcs resource cleanup openstack-keystone-clone overcloud-controller-3
オーバークラウドのスタックの更新が完了したら、最終設定が必要です。コントローラーノードの 1 つにログインして、Pacemaker を使用して以下のサービスを更新します。
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup neutron-server-clone
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-nova-api-clone
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-nova-consoleauth-clone
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-heat-engine-clone
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-cinder-api-clone
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup openstack-glance-registry-clone
[heat-admin@overcloud-controller-0 ~]$ sudo pcs resource cleanup httpd-clone
最終のステータスチェックを実行して、サービスが正しく実行されていることを確認します。
[heat-admin@overcloud-controller-0 ~]$ sudo pcs status
エラーの発生したコントローラーノードが新規ノードに置き換えられました。

注記

エラーが発生したノードが依然として pcs status の出力に表示される場合には、以下のコマンドで削除します。
[heat-admin@overcloud-controller-0 ~]$ sudo crm_node -R overcloud-controller-1 --force

9.5. Object Storage ノードの置き換え

Object Storage クラスターのノードを置き換えるには、以下を行う必要があります。
  • 新規 Object Storage ノードでオーバークラウドを更新して、director によりリングファイルが作成されないようにします。
  • swift-ring-builder を使用して手動でクラスターにノードを追加するか、クラスターからノードを削除します。
以下の手順では、クラスターの整合性を保ちながらノードを置き換える方法を説明します。この例では、ノードが 2 つある Object Storage クラスターを使用します。目的は、別のノードを追加して、問題のあるノードを置き換えることです。
まず、以下の内容が含まれる ~/templates/swift-ring-prevent.yaml という名前の環境ファイルを作成します。
parameter_defaults:
SwiftRingBuild: false
RingBuild: false
ObjectStorageCount: 3
SwiftRingBuild および RingBuild パラメーターにより、オーバークラウドが自動的に Object Storage とコントローラーノードそれぞれのリングファイルを構築するかどうかが定義されます。ObjectStorageCount は、環境内で Object Storage ノードをいくつ指定するかを定義します。今回の例では、2 つから 3 つにスケーリングします。
openstack overcloud deploy の一部として、オーバークラウドの残りの環境ファイルと合わせて、swift-ring-prevent.yaml ファイルも追加します。
$ openstack overcloud deploy --templates [ENVIRONMENT_FILES] -e swift-ring-prevent.yaml

注記

このファイルのパラメーターが以前の環境ファイルのパラメーターよりも優先されるように、このファイルを環境ファイルの一覧の最後に追加します。
再デプロイメントが完了したら、オーバークラウドには追加の Object Storage が含まれるようになりますが、ノードのストレージディレクトリーは作成されておらず、ノードのオブジェクトストアのリングファイルもまだ構築されていません。そのため、手動でストレージのディレクトリーを作成して、リングファイルを構築する必要があります。
新規ノードにログインしてストレージのディレクトリーを作成します。
$ sudo mkdir -p /srv/node/d1
$ sudo chown -R swift:swift /srv/node/d1

注記

このディレクトリーで、外部のストレージデバイスをマウントすることもできます。
ノードに既存のリングファイルをコピーします。heat-admin ユーザーとして、コントローラーノードにログインしてから、スーパーユーザーに切り替えます。たとえば、IP アドレスが 192.168.201.24 のコントローラーノードの場合は以下のようになります。
$ ssh heat-admin@192.168.201.24
$ sudo -i
コントローラーノードからの /etc/swift/*.builder ファイルを新しい Object Storage ノードの /etc/swift/ ディレクトリーにコピーします。必要に応じて、ファイルを director ホストに移動します。
[root@overcloud-controller-0 ~]# scp /etc/swift/*.builder stack@192.1.2.1:~/.
次に、新規ノードにファイルを転送します。
[stack@director ~]$ scp ~/*.builder heat-admin@192.1.2.24:~/.
新しい Object Storage ノードに heat-admin ユーザーとしてログインして、スーパーユーザーに切り替えます。たとえば、IP アドレスが 192.168.201.29 の Object Storage ノードの場合は以下のようになります。
$ ssh heat-admin@192.168.201.29
$ sudo -i
これらのファイルを /etc/swift ディレクトリーにコピーします。
# cp /home/heat-admin/*.builder /etc/swift/.
新規の Object Storage ノードをアカウント、コンテナー、オブジェクトリングに追加します。新規ノードに以下のコマンドを実行します。
# swift-ring-builder /etc/swift/account.builder add zX-IP:6002/d1 weight
# swift-ring-builder /etc/swift/container.builder add zX-IP:6001/d1 weight
# swift-ring-builder /etc/swift/object.builder add zX-IP:6000/d1 weight
これらのコマンドでは、以下の値を置き換えてください。
zX
X は、指定のゾーンに適した整数に置き換えます (例: ゾーン 1 には z1)。
IP
アカウント、コンテナー、オブジェクトサービスがリッスンするのに使用する IP。これは、特に、/etc/swift/object-server.conf/etc/swift/account-server.conf/etc/swift/container-server.confDEFAULT セクションの bind_ip など、各ストレージノードの IP アドレスと同じでなければなりません。
重み
他のデバイスと比較したデバイスの相対的な重み付けを入力します。通常、これは 100 となっています。

注記

リングファイル上で swift-ring-builder を使用して、リングファイルにある現在のノードの既存値を確認します。
# swift-ring-builder /etc/swift/account.builder
アカウント、コンテナー、オブジェクトリングから置き換えるノードを削除します。各ノードに対して、以下のコマンドを実行します。
# swift-ring-builder /etc/swift/account.builder remove IP
# swift-ring-builder /etc/swift/container.builder remove IP
# swift-ring-builder /etc/swift/object.builder remove IP
IP はノードの IP アドレスに置き換えます。
すべてのノードをまたいでパーティションの再配分を行います。
# swift-ring-builder /etc/swift/account.builder rebalance
# swift-ring-builder /etc/swift/container.builder rebalance
# swift-ring-builder /etc/swift/object.builder rebalance
/etc/swift/ の内容すべての所有者を root ユーザーと swift グループに変更します。
      # chown -R root:swift /etc/swift
openstack-swift-proxy サービスを再起動します。
# systemctl restart openstack-swift-proxy.service
この時点で、リングファイル (*.ring.gz および *.builder) は、新しいノード上で更新されているはずです。
/etc/swift/account.builder
/etc/swift/account.ring.gz
/etc/swift/container.builder
/etc/swift/container.ring.gz
/etc/swift/object.builder
/etc/swift/object.ring.gz
これらのファイルは、コントローラーノードと既存の Object Storage ノード上の /etc/swift/ にコピーします (削除するノードは除く)。必要に応じて、ファイルを director ホストに移動します。
[root@overcloud-objectstorage-2 swift]# scp *.builder stack@192.1.2.1:~/
[root@overcloud-objectstorage-2 swift]# scp *.ring.gz stack@192.1.2.1:~/
次に各ノードで /etc/swift/ にこのファイルをコピーします。
各ノードで、/etc/swift/ の内容すべての所有者を root ユーザーと swift グループに変更します。
# chown -R root:swift /etc/swift
新規ノードが追加され、リングファイルの一部になります。リングから以前のノードを削除する前に、他のノードから新規ノードの初期のデータを複製する必要があります。
リングから以前のノードを削除するには、ObjectStorageCount の数を減らして以前のリングを省略します。今回は 3 から 2 に減らします。
parameter_defaults:
SwiftRingBuild: false
RingBuild: false
ObjectStorageCount: 2
新規環境ファイル (remove-object-node.yaml) を作成して、以前の Object Storage ノードを特定し、削除します。今回の場合は overcloud-objectstorage-1 を削除します。
parameter_defaults:
ObjectStorageRemovalPolicies:
  [{'resource_list': ['1']}]
デプロイメントのコマンドで両環境ファイルを指定します。
$ openstack overcloud deploy --templates -e swift-ring-prevent.yaml -e remove-object-node.yaml ...
director は、オーバークラウドから Object Storage ノードを削除して、オーバークラウド上の残りのノードを更新し、ノードの削除に対応します。

9.6. Ceph Storage ノードの置き換え

director では、director で作成したクラスター内の Ceph Storage ノードを置き換えることができます。手順については、『オーバークラウド向けの Red Hat Ceph Storage』を参照してください。

第10章 環境のアップグレード

本章では、環境のアップグレードの方法を見て行きます。ここでは、アンダークラウドとオーバークラウド両方のアップグレードプロセスを説明します。このアップグレードプロセスでは、次のメジャーバージョンに移行する手段を提供します。今回は、Red Hat OpenStack Platform 7 から Red Hat OpenStack Platform 8 へのアップグレードです。
いずれの場合の手順でも、以下のワークフローを実行していきます。
  1. Red Hat OpenStack Platform director パッケージの更新
  2. Red Hat OpenStack Platform director でのオーバークラウドイメージの更新
  3. Red Hat OpenStack Platform director を使用したオーバークラウドスタックとパッケージの更新

重要

バージョンのアップグレードを行う前に 「アップグレード前の重要な注記」 の情報を一読するようにしてください。

10.1. アップグレード前の重要な注記

以下の注記を一読してから、環境をアップグレードするようにしてください。
  • アップグレードは、Red Hat OpenStack Platform director の新機能で、ライブの実稼働環境で実行する前に、その環境固有の設定で全面的にテストする必要があります。Red Hat では、director を使用する場合の標準のオプションとして提供されているユースケースの大半とそれらの組み合わせを検証済みですが、可能な組み合わせの数が多いため、それらを完全に網羅することはできません。さらに、標準デプロイメントの設定が変更された場合には、手動または設定後のフックを使用して、実稼働用でない環境でアップグレード機能をテストすることが極めて重要です。そのため、以下を実行することを推奨します。
    • アンダークラウドノードのバックアップを実行してから、アップグレードの手順のステップを開始します。バックアップの手順は、『Red Hat OpenStack Platform のバックアップと復元』 ガイドを参照してください。
    • 実稼働環境で手順を実行する前に、すべての変更が加えられたテスト環境でアップグレードの手順を実行します。
    • このアップグレードの実行に関して何らかの懸念がある場合は、作業を開始する前に、Red Hat までご連絡いただき、アップグレードプロセスについてのアドバイスおよびサポートを依頼してください。
  • 本項で説明するアップグレードプロセスは、director を使ったカスタマイズにのみ対応しています。director 以外を使用してオーバークラウドの機能をカスタマイズした場合は、オーバークラウドをアップグレードして、アップグレードの完了後にその機能を再度有効化してください。つまり、カスタマイズした機能は、アップグレードがすべて完了するまで利用できないということになります。
  • Red Hat OpenStack Platform director 8 は、Red Hat OpenStack Platform 7 の特定のオーバークラウドバージョンを管理できます。詳しい情報は、以下のサポートの表を参照してください。

    表10.1 Red Hat OpenStack Platform director 8 のサポート表

    バージョン
    オーバークラウドの更新
    オーバークラウドのデプロイ
    オーバークラウドのスケーリング
    Red Hat OpenStack Platform 7
    7.0.4 以降
    7.0.4 以降
    7.0.4 以降
    Red Hat OpenStack Platform 8
    すべてのバージョン
    すべてのバージョン
    すべてのバージョン
  • アンダークラウドとオーバークラウドをそれぞれ、最低でも 7.3 と 7.0.4 に更新してから、アンダークラウドを 8 にアップグレードする必要があります。director 8 では、7.0.4 より前のバージョンのオーバークラウドを管理するサポートはありません。
  • バージョン 8 のアンダークラウドを使用してバージョン 7 のオーバークラウドを管理する場合は、/usr/share/openstack-tripleo-heat-templates/kilo/ の Heat テンプレートコレクションを使用してください。以下に例を示します。
    $ openstack overcloud deploy -templates /usr/share/openstack-tripleo-heat-templates/kilo/ [OTHER_OPTIONS]
    また、RabbitMQ パスワードを /home/stack/tripleo-overcloud-passwords ファイルでデフォルト設定されているバージョン 7 のパスワードに設定します。
    OVERCLOUD_RABBITMQ_PASSWORD=guest
  • Satellite の登録に環境ファイルを使用している場合 (「オーバークラウドの登録」を参照)、環境ファイルの以下のパラメーターを更新するようにしてください。
    • rhel_reg_repos: 新しい Red Hat OpenStack Platform 8 のリポジトリーなど、お使いのオーバークラウド向けに有効化するリポジトリー
    • rhel_reg_activation_key: Red Hat OpenStack Platform 8 リポジトリー用の新規アクティベーションキー
    • rhel_reg_sat_repo: katello-agent など、Red Hat Satellite 6 の管理ツールが含まれるリポジトリーを定義する新たなパラメーター。Red Hat Satellite 6 に登録する場合はこのパラメーターを追加するようにしてください。

10.2. director パッケージの更新

重要

以下の手順のステップを試す前に 「アップグレード前の重要な注記」 の情報を一読するようにしてください。

重要

このプロセスを実行中のトラブルシューティングのステップに関しては「アップグレードのトラブルシューティング」を参照してください。
director パッケージを最新のメジャーバージョンに更新するには、OpenStack Platform のリポジトリーを以前のバージョンから新しいバージョンに変更してください。たとえば、以下のとおりです。
$ sudo subscription-manager repos --disable=rhel-7-server-openstack-7.0-rpms --disable=rhel-7-server-openstack-7.0-director-rpms
$ sudo subscription-manager repos --enable=rhel-7-server-openstack-8-rpms --enable=rhel-7-server-openstack-8-director-rpms
このコマンドにより、yum が最新のリポジトリーを使用するように設定されます。yum を使用して director を更新してください。
$ sudo yum upgrade
yum update が完了する前に失敗してしまう OpenStack サービスもあります。これは予想される動作です。アンダークラウドのアップグレードのコマンドで、これらのサービスの設定が修正されます。
アンダークラウドに SSL/TLS を使用する場合、SSL 証明書をサーバーのトラストストアに追加してください。
# sudo cp server-cert.pem /etc/pki/ca-trust/source/anchors/
# sudo update-ca-trust extract
director は openstack underlcoud upgrade コマンドを使用して、アンダークラウドの環境をアップグレードします。以下のようにアップグレードコマンドを実行します。
$ openstack undercloud upgrade
これにより、director の設定が更新され、バージョンの変更後に指定されていない設定内容が追加されます。このコマンドを実行しても、オーバークラウドのスタックデータや環境内の既存のノードにあるデータなど、保存されたデータは削除されません。
更新が完了したら、director の OpenStack サービスを確認してください。
$ sudo systemctl list-units openstack-*

注記

openstack-keystone は、機能しないサービスとして表示される場合があります。これは、このサービスは、WSGI アプリケーションとして httpd サービスで実行されているためです。openstack-keystone サービスは、director パッケージを更新して、openstack undercloud upgrade を実行した後に安全に無効化することができます。
オーバークラウドとそのノードの存在を確認して、更新を完了します。
$ source ~/stackrc
$ openstack server list
$ ironic node-list
$ heat stack-list
オーバークラウドを Red Hat OpenStack Platform 8 にアップグレードした後には以下の点に注意してください。
  • SSL を使用したアンダークラウドは、アップグレードの際に VIP へのアクセスがなくなる可能性があります。その場合は、アンダークラウドの keepalived サービスを再起動してください。
    $ systemctl restart keepalived
    
  • アンダークラウドの admin ユーザーは、Red Hat OpenStack Platform 8 に含まれていない追加のロール ( _member_) が必要な場合があります。このロールは、オーバークラウドの通信の際に重要です。このロールを作成して、admin テナントの admin ユーザーに追加してください。
    $ keystone role-create --name _member_
    $ keystone user-role-add --user admin --role _member_ --tenant admin
    

10.3. オーバークラウドイメージの更新

重要

以下の手順のステップを試す前に 「アップグレード前の重要な注記」 の情報を一読するようにしてください。
以下の手順では、ノードの検出とオーバークラウドのデプロイメントに向け最新のイメージが確保されるようにします。rhosp-director-imagesrhosp-director-images-ipa パッケージからこれらの新規イメージを取得します。
$ sudo yum install rhosp-director-images rhosp-director-images-ipa
stack ユーザーホームの images ディレクトリーから既存のイメージ (/home/stack/images) を削除して、新しいイメージアーカイブをコピーします。
$ rm -rf ~/images/*
$ cp /usr/share/rhosp-director-images/overcloud-full-latest-8.0.tar ~/images/.
$ cp /usr/share/rhosp-director-images/ironic-python-agent-latest-8.0.tar ~/images/.
アーカイブを展開します。
$ cd ~/images
$ for tarfile in *.tar; do tar -xf $tarfile; done
最新のイメージを director にインポートして、ノードがこれらの新規イメージを使用するように設定します。
$ openstack overcloud image upload --update-existing --image-path ~/images/.
$ openstack baremetal configure boot
新規イメージの存在をチェックして、イメージの更新を最終確認します。
$ openstack image list
$ ls -l /httpboot
director は、最新のイメージを使用してアップグレードされました。

10.4. オーバークラウドのアップグレード

重要

以下の手順のステップを試す前に 「アップグレード前の重要な注記」 の情報を一読するようにしてください。

重要

このプロセスを実行中のトラブルシューティングのステップに関しては「アップグレードのトラブルシューティング」を参照してください。
本項には、オーバークラウドのアップグレードに必要な手順を記載します。各セクションを順番に従って進み、お使いの環境に関連するセクションのみを適用します。
このプロセスでは、ステージごとに分けた手法を使用してアップグレードを行うには openstack overcloud deploy コマンドを複数回実行する必要があります。コマンドを実行する度に、既存の環境ファイルに、別のアップグレードの環境ファイルが追加されます。これらの新しいアップグレード環境ファイルには、以下のようなファイルがあります。
  • major-upgrade-pacemaker-init.yaml: アップグレードの初期設定を行います。これには、オーバークラウドの各ノードにある Red Hat OpenStack Platform のリポジトリーの更新や、特定のノードへの特別なアップグレードスクリプトの提供などが含まれます。
  • major-upgrade-pacemaker.yaml: コントローラーノードをアップグレードします。
  • major-upgrade-pacemaker-converge.yaml: オーバークラウドのアップグレードを最終確認します。
これらのデプロイメントのコマンドの間に、さまざまなタイプのノードで upgrade-non-controller.sh スクリプトを実行します。このスクリプトにより、1 つのノードでパッケージが更新されます。
以下の手順を使用して、オーバークラウドをアップグレードしてください。
  1. アンダークラウドから openstack overcloud deploy を実行して、major-upgrade-pacemaker-init.yaml の環境ファイルを追加します。ネットワークの分離やストレージなどお使いの環境に適したカスタムの環境ファイルも含めるようにしてください。

    重要

    Red Hat OpenStack Platform 7 のカスタムの NIC テンプレートを使用している場合は、NIC テンプレートの parameters セクションに ManagementSubnetIp パラメーターを追加してください。
    parameters:
      ManagementIpSubnet: # Only populated when including environments/network-management.yaml
        default: ''
        description: IP address/subnet on the management network
        type: string
    
    以下は、openstack overcloud deploy コマンドで、ファイルも追加した例です。
    $ openstack overcloud deploy --templates \
      -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml  \
      -e network_env.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker-init.yaml
    新しい環境ファイルの設定でオーバークラウドが更新されるまで待機します。
  2. director には、コントローラー以外のノードを個別にアップグレードするスクリプトが含まれます。まず、各 Swift ノードをアップグレードします。
    $ nova list
    $ upgrade-non-controller.sh --upgrade [swift-uuid]
    
  3. コントローラーノードをアップグレードします。この際に、高可用性ツールを実行するコントローラーノードへの完全アップグレードを提供する別の環境ファイル (major-upgrade-pacemaker.yaml) が追加されます。この環境ファイルを使用して openstack overcloud deploy をもう 1 度実行します。また、ネットワークの分離やストレージなどお使いの環境に適したカスタムの環境ファイルも含めるようにしてください。
    $ openstack overcloud deploy --templates \
      -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \
      -e network_env.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker.yaml
    新しい環境ファイルの設定でオーバークラウドが更新されるまで待機します。

    重要

    このステップは、コントローラーのアップグレードの際に Neutron サーバーおよび L3 エージェントを無効化します。これは、Floating IP アドレスがこのステップでは利用できないということを意味します。

    重要

    このステップでオーバークラウドのスタックが機能しなくなった場合は、コントローラーノードの 1 つにログインして、sudo pcs cluster start を実行してから director でもう 1 度 openstack overcloud deploy を実行します。
  4. 各コンピュートノードをアップグレードします。コンピュートノードをアップグレードする際には upgrade-non-controller.sh スクリプトも使用しますが、ダウンタイムを回避するには、コンピュートノードが新しい仮想マシンを起動したり、既存の仮想マシンを別のコンピュートノードに以降したりしないようにすることを推奨します。このプロセスに関する情報は「オーバークラウドのコンピュートノードからの仮想マシンの移行」を参照してください。移行後には、アップグレードのコマンドを実行します。
    $ nova list
    $ upgrade-non-controller.sh --upgrade [compute-uuid]
    
    アップグレードを完了した後には、以下のコマンドでコンピュートノードをもう 1 度有効化します。
    $ nova list
    $ nova service-enable [hostname] nova-compute
    
  5. 各 Ceph Storage ノードをアップグレードします。
    $ nova list
    $ upgrade-non-controller.sh --upgrade [ceph-uuid]
    
  6. 最終的なアップグレードを実行します。これには、別の環境ファイル (major-upgrade-pacemaker-converge.yaml) を使用し、このファイルを使用するには、openstack overcloud deploy コマンドを使用します。また、ネットワークの分離やストレージなどお使いの環境に適したカスタムの環境ファイルも含めるようにしてください。以下に例を示します。
    $ openstack overcloud deploy --templates \
      -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \
      -e network_env.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker-converge.yaml
    新しい環境ファイルの設定でオーバークラウドが更新されるまで待機します。
これで、オーバークラウドのアップグレード手順が完了しました。
オーバークラウドを Red Hat OpenStack Platform 8 にアップグレードした後には以下の点に注意してください。
  • コンピュートノードが neutron-openvswitch-agent の問題をレポートする可能性があります。これが発生した場合には、各コンピュートノードにログインして、このサービスを再起動します。以下のようなコマンドを実行します。
    $ sudo systemctl restart neutron-openvswitch-agent
    
  • 更新プロセスを実行しても、オーバークラウド内のノードは自動的には再起動しません。必要な場合には、更新コマンドが完了した後に手動で再起動を実行してください。クラスターベースのノード (Ceph Storage ノードやコントローラーノード) を個別に再起動して、ノードがクラスターに再度参加するまで待機します。Ceph Storage ノードの場合は、ceph health で確認して、クラスターのステータスが HEALTH OK であることを確認します。コントローラーノードの場合は、pcs resource で確認して、各ノードですべてのリソースが実行されていることを確認してください。
  • 状況によっては、コントローラーノードの再起動後に IPv6 環境で Corosync の起動に失敗する可能性があります。これは、コントローラーノードが静的な IPv6 アドレスを設定する前に Corosync が起動してしまうことが原因です。このような場合は、コントローラーノードで Corosync を手動で再起動してください。
    $ sudo systemctl restart corosync
    
  • コントローラーノードにフェンシングを設定している場合には、更新プロセスによってその設定が無効になる場合があります。 更新プロセスの完了時には、コントローラーノードの 1 つで以下のコマンドを実行してフェンシングを再度有効にします。
    $ sudo pcs property set stonith-enabled=true
    
  • 次回、オーバークラウドのスタックを更新またはスケーリングする場合には (openstack overcloud deploy コマンドの実行)、オーバークラウドでのパッケージの更新をトリガーする ID をリセットする必要があります。空の UpdateIdentifier パラメーターを環境ファイルに追加して、openstack overcloud deploy コマンドの実行時にこれを指定します。以下は、このような環境ファイルのサンプルです。
    parameter_defaults:
      UpdateIdentifier:
    

第11章 director の問題のトラブルシューティング

director プロセスの特定の段階で、エラーが発生する可能性があります。本項では、一般的な問題の診断に関する情報を提供します。
director のコンポーネントの共通ログを確認してください。
  • /var/log ディレクトリーには、多数の OpenStack Platform の共通コンポーネントのログや、標準の Red Hat Enterprise Linux アプリケーションのログが含まれています。
  • journald サービスは、さまざまなコンポーネントのログを提供します。Ironic は openstack-ironic-apiopenstack-ironic-conductor の 2 つのユニットを使用する点に注意してください。同様に、ironic-inspectoropenstack-ironic-inspectoropenstack-ironic-inspector-dnsmasq の 2 つのユニットを使用します。該当するコンポーネントごとに両ユニットを使用します。以下に例を示します。
    $ sudo journalctl -u openstack-ironic-inspector -u openstack-ironic-inspector-dnsmasq
    
  • ironic-inspector は、/var/log/ironic-inspector/ramdisk/ に ramdisk ログを gz 圧縮の tar ファイルとして保存します。ファイル名には、日付、時間、ノードの IPMI アドレスが含まれます。イントロスペクションの問題を診断するには、これらのログを使用します。

11.1. ノード登録のトラブルシューティング

ノード登録における問題は通常、ノードの情報が間違っていることが原因で発生します。このような場合には、ironic を使用して、登録したノードデータの問題を修正します。以下にいくつか例を示します。

手順11.1 誤った MAC アドレスの修正

  1. 割り当てられたポートの UUID を確認します。
    $ ironic node-port-list [NODE UUID]
    
  2. MAC アドレスを更新します。
    $ ironic port-update [PORT UUID] replace address=[NEW MAC]
    

手順11.2 誤った IPMI アドレスの修正

  • 以下のコマンドを実行します。
    $ ironic node-update [NODE UUID] replace driver_info/ipmi_address=[NEW IPMI ADDRESS]
    

11.2. ハードウェアイントロスペクションのトラブルシューティング

検出およびイントロスペクションのプロセスは最後まで実行する必要があります。ただし、Ironic の Discovery Daemon (ironic-inspector) は、検出する ramdisk が応答しない場合にはデフォルトの 1 時間が経過するとタイムアウトします。検出 ramdisk のバグが原因とされる場合もありますが、通常は特に BIOS の起動設定などの環境の誤設定が原因で発生します。
以下には、環境設定が間違っている場合の一般的なシナリオと、診断/解決方法に関するアドバイスを示します。

ノードのイントロスペクション開始におけるエラー

一般的には、イントロスペクションプロセスは、Ironic サービス全体に対するコマンドとして機能する baremetal introspection を使用します。ただし、ironic-inspector で直接イントロスペクションを実行している場合には、AVAILABLE の状態のノードの検出に失敗する可能性があります。このコマンドは、デプロイメント用であり、検出用ではないためです。検出前に、ノードの状態を MANAGEABLE に変更します。
$ ironic node-set-provision-state [NODE UUID] manage
検出が完了したら、状態を AVAILABLE に戻してからプロビジョニングを行います。
$ ironic node-set-provision-state [NODE UUID] provide

検出プロセスの停止

現在 ironic-inspector は直接検出プロセスを停止することができません。回避策として、プロセスがタイムアウトするまで待つことを推奨します。必要であれば、/etc/ironic-inspector/inspector.conftimeout 設定を別のタイムアウト時間 (分) に変更します。
最悪の場合には以下のプロセスを使用して全ノードの検出を停止することができます。

手順11.3 検出プロセスの停止

  1. 各ノードの電源状態を OFF に変更します。
    $ ironic node-set-power-state [NODE UUID] off
    
  2. ironic-inspector キャッシュを削除して、再起動します。
    $ rm /var/lib/ironic-inspector/inspector.sqlite
    $ sudo systemctl restart openstack-ironic-inspector
    

11.3. オーバークラウドの作成のトラブルシューティング

デプロイメントが失敗する可能性のあるレイヤーは 3 つあります。
  • Orchestration (Heat および Nova サービス)
  • Bare Metal Provisioning (Ironic サービス)
  • デプロイメント後の設定 (Puppet)
オーバークラウドのデプロイメントがこれらのレベルで失敗した場合には、OpenStack クライアントおよびサービスログファイルを使用して、失敗したデプロイメントの診断を行います。

11.3.1. オーケストレーション

多くの場合は、オーバークラウドの作成に失敗した後に、Heat により失敗したオーバークラウドスタックが表示されます。
$ heat stack-list

+-----------------------+------------+--------------------+----------------------+
| id                    | stack_name | stack_status       | creation_time        |
+-----------------------+------------+--------------------+----------------------+
| 7e88af95-535c-4a55... | overcloud  | CREATE_FAILED      | 2015-04-06T17:57:16Z |
+-----------------------+------------+--------------------+----------------------+
スタック一覧が空の場合には、初期の Heat 設定に問題があることが分かります。Heat テンプレートと設定オプションをチェックし、さらに openstack overcloud deploy を実行後のエラーメッセージを確認してください。

11.3.2. Bare Metal Provisioning

ironic をチェックして、全登録ノードと現在の状態を表示します。
$ ironic node-list

+----------+------+---------------+-------------+-----------------+-------------+
| UUID     | Name | Instance UUID | Power State | Provision State | Maintenance |
+----------+------+---------------+-------------+-----------------+-------------+
| f1e261...| None | None          | power off   | available       | False       |
| f0b8c1...| None | None          | power off   | available       | False       |
+----------+------+---------------+-------------+-----------------+-------------+
プロビジョニングプロセスでよく発生する問題を以下に示します。
  • 結果の表の Provision State および Maintenance の列を確認します。以下をチェックしてください。
    • 空の表または、必要なノード数よりも少ない
    • Maintenance が True に設定されている
    • Provision Statemanageable に設定されている
    これにより、登録または検出プロセスに問題があることが分かります。たとえば、Maintenance が True に自動的に設定された場合は通常、ノードの電源管理の認証情報が間違っています。
  • Provision Stateavailable の場合には、ベアメタルのデプロイメントが開始される前に問題が発生します。
  • Provision Stateactive で、Power Statepower on の場合には、ベアメタルのデプロイメントは正常に完了しますが、問題は、デプロイメント後の設定ステップで発生することになります。
  • ノードの Provision Statewait call-back の場合には、このノードではまだ Bare Metal Provisioning プロセスが完了していません。このステータスが変更されるまで待機してください。または、問題のあるノードの仮想コンソールに接続して、出力を確認します。
  • Provision Stateerror または deploy failed の場合には、このノードの Bare Metal Provisioning は失敗しています。ベアメタルノードの詳細を確認してください。
    $ ironic node-show [NODE UUID]
    
    エラーの説明が含まれる last_error フィールドがないか確認します。エラーメッセージは曖昧なため、ログを使用して解明します。
    $ sudo journalctl -u openstack-ironic-conductor -u openstack-ironic-api
    
  • wait timeout error が表示されており、Power Statepower on の場合には、問題のあるノードの仮想コンソールに接続して、出力を確認します。

11.3.3. デプロイメント後の設定

設定ステージでは多くのことが発生する可能性があります。たとえば、設定に問題があるために、特定の Puppet モジュールの完了に失敗する可能性があります。本項では、これらの問題を診断するプロセスを説明します。

手順11.4 デプロイメント後の設定の問題の診断

  1. オーバークラウドスタックからのリソースをすべて表示して、どのスタックに問題があるのかを確認します。
    $ heat resource-list overcloud
    
    このコマンドでは、全リソースとその状態の表が表示されるため、CREATE_FAILED の状態のリソースを探します。
  2. 問題のあるリソースを表示します。
    $ heat resource-show overcloud [FAILED RESOURCE]
    
    resource_status_reason のフィールドの情報で診断に役立つ可能性のあるものを確認します。
  3. nova コマンドを使用して、オーバークラウドノードの IP アドレスを表示します。
    $ nova list
    
    デプロイされたノードの 1 つに heat-admin ユーザーとしてログインします。たとえば、スタックのリソース一覧から、コントローラーノード上にエラーが発生していることが判明した場合には、コントローラーノードにログインします。heat-admin ユーザーには、sudo アクセスが設定されています。
    $ ssh heat-admin@192.0.2.14
    
  4. os-collect-config ログを確認して、考えられる失敗の原因をチェックします。
    $ sudo journalctl -u os-collect-config
    
  5. 場合によっては、Nova によるノードへのデプロイメントが完全に失敗する可能性があります。このような場合にはオーバークラウドのロール種別の 1 つの OS::Heat::ResourceGroup が失敗していることが示されるため、nova を使用して問題を確認します。
    $ nova list
    $ nova show [SERVER ID]
    
    最もよく表示されるエラーは、No valid host was found のエラーメッセージです。このエラーのトラブルシューティングについては、「"No Valid Host Found" エラーのトラブルシューティング」を参照してください。その他の場合は、以下のログファイルを参照してトラブルシューティングを実施してください。
    • /var/log/nova/*
    • /var/log/heat/*
    • /var/log/ironic/*
  6. システムのハードウェアおよび設定に関する情報を収集する SOS ツールセットを使用します。この情報は、診断目的とデバッグに使用します。SOS は通常、技術者や開発者のサポートに使用され、アンダークラウドでもオーバークラウドでも便利です。以下のコマンドで sos パッケージをインストールします。
    $ sudo yum install sos
    
    レポートを生成します。
    $ sudo sosreport --all-logs
    

11.4. アップグレードのトラブルシューティング

10章環境のアップグレード の手順では、アンダークラウドとオーバークラウドの両方のアップグレード方法を説明します。このセクションでは、アンダークラウドとオーバークラウドの問題のトラブルシューティングに関するアドバイスを提供します。

11.4.1. アンダークラウドのアップグレード

アンダークラウドのアップグレードコマンド (openstack undercloud upgrade) が失敗した場合には、以下のアドバイスを使用して、アップグレードのプロセスを妨げている問題を特定してください。
  • openstack undercloud upgrade コマンドは、実行中に進捗ログを出力します。アップグレードのプロセス中にエラーが発生した場合には、エラーの発生時にこのコマンドは停止します。この情報を使用して、アップグレードの進捗を止める問題を特定してください。
  • openstack undercloud upgrade コマンドは、Puppet を実行してアンダークラウドサービスを設定します。これにより、以下のディレクトリーで便利な Puppet のレポートが生成されます。
    • /var/lib/puppet/state/last_run_report.yaml: 最後の Puppet レポートは、アンダークラウド向けに生成されます。このファイルは、問題のある Puppet のアクションの原因を表示します。
    • /var/lib/puppet/state/last_run_summary.yaml: last_run_report.yaml ファイルのサマリー
    • /var/lib/puppet/reports: アンダークラウドの全 Puppet レポート
    この情報を使用して、アップグレードプロセスを妨げている問題を特定します。
  • 機能しないサービスがないかを確認します。
    $ sudo systemctl -t service
    
    機能しないサービスがある場合は、適切なログを確認します。たとえば、openstack-ironic-api が機能しない場合は、以下のコマンドを使用してこのサービスのログを確認します。
    $ sudo journalctl -xe -u openstack-ironic-api
    $ sudo tail -n 50 /var/log/ironic/ironic-api.log
    
アンダークラウドのアップグレードを妨げていた問題を修正した後に、アップグレードのコマンドをもう 1 度実行します。
$ openstack undercloud upgrade
アップグレードのコマンドをもう 1 度開始して、アンダークラウドを設定します。

11.4.2. オーバークラウドのアップグレード

オーバークラウドのアップグレードプロセス (「オーバークラウドのアップグレード」 を参照) に障害が発生した場合には、以下のアドバイスを使用してアップグレードプロセスを妨げている問題を特定します。
  • Heat スタックの一覧を確認して、UPDATE_FAILED のステータスがあるスタックを特定します。以下のコマンドで、そのようなスタックを特定します。
    $ heat stack-list --show-nested | awk -F "|" '{ print $3,$4 }' | grep "UPDATE_FAILED" | column -t
    
    エラーの発生したスタックとそのスタックのテンプレートを表示して、スタックが失敗した原因を究明します。
    $ heat stack-show overcloud-Controller-qyoy54dyhrll-1-gtwy5bgta3np
    $ heat template-show overcloud-Controller-qyoy54dyhrll-1-gtwy5bgta3np
    
  • 「デプロイメント後の設定」 のアドバイスを使用して、特に障害のある Puppet が実行されている場合など、オーバークラウドの設定後の問題を特定します。
  • 全コントローラーノード上で Pacemaker が正しく実行されていることを確認します。必要な場合は、コントローラーノードにログインして、コントローラークラスターを再起動します。
    $ sudo pcs cluster start
    
    Pacemaker の問題診断に関する情報は、「コントローラーサービスのエラー」を参照してください。
オーバークラウドのアップグレードを妨げていた問題を修正した後に、openstack overcloud deploy コマンドで、試行に失敗したアップグレードのステップを再度実行します。以下は、major-upgrade-pacemaker-init.yaml が含まれるアップグレードプロセスで openstack overcloud deploy コマンドを最初に実行したときの例です。
$ openstack overcloud deploy --templates \
  -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml  \
  -e network_env.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker-init.yaml
openstack overcloud deploy は、オーバークラウドのスタックの更新を再試行します。

11.5. プロビジョニングネットワークでの IP アドレスの競合に対するトラブルシューティング

宛先のホストに、すでに使用中の IP アドレスが割り当てられている場合には、検出およびデプロイメントのタスクは失敗します。この問題を回避するには、プロビジョニングネットワークのポートスキャンを実行して、検出の IP アドレス範囲とホストの IP アドレス範囲が解放されているかどうかを確認することができます。
アンダークラウドホストで以下のステップを実行します。

手順11.5 アクティブな IP アドレスの特定

  1. nmap をインストールします。
    # yum install nmap
    
  2. nmap を使用して、アクティブなアドレスの IP アドレス範囲をスキャンします。この例では、192.0.2.0/24 の範囲をスキャンします。この値は、プロビジョニングネットワークの IP サブネットに置き換えてください (CIDR 表記のビットマスク)。
    # nmap -sn 192.0.2.0/24
    
  3. nmap スキャンの出力を確認します。
    たとえば、アンダークラウドおよびサブネット上に存在するその他のホストの IP アドレスを確認する必要があります。アクティブな IP アドレスが undercloud.conf の IP アドレス範囲と競合している場合には、オーバークラウドノードのイントロスペクションまたはデプロイを実行する前に、IP アドレスの範囲を変更するか、IP アドレスを解放するかのいずれかを行う必要があります。
    # nmap -sn 192.0.2.0/24
    
    Starting Nmap 6.40 ( http://nmap.org ) at 2015-10-02 15:14 EDT
    Nmap scan report for 192.0.2.1
    Host is up (0.00057s latency).
    Nmap scan report for 192.0.2.2
    Host is up (0.00048s latency).
    Nmap scan report for 192.0.2.3
    Host is up (0.00045s latency).
    Nmap scan report for 192.0.2.5
    Host is up (0.00040s latency).
    Nmap scan report for 192.0.2.9
    Host is up (0.00019s latency).
    Nmap done: 256 IP addresses (5 hosts up) scanned in 2.45 seconds
    

11.6. "No Valid Host Found" エラーのトラブルシューティング

/var/log/nova/nova-conductor.log に、以下のエラーが含まれる場合があります。
NoValidHost: No valid host was found. There are not enough hosts available.
これは、Nova Scheduler が新規インスタンスを起動するのに適したベアメタルノードを検出できなかったことを意味し、そうなると通常は、Nova が検出を想定しているリソースと、Ironic が Nova に通知するリソースが一致しなくなります。その場合には、以下の点をチェックしてください。
  1. イントロスペクションが正常に完了することを確認してください。または、各ノードに必要な Ironic ノードのプロパティーが含まれていることをチェックしてください。各ノードに以下のコマンドを実行します。
    $ ironic node-show [NODE UUID]
    
    properties JSON フィールドの cpuscpu_archmemory_mblocal_gb キーに有効な値が指定されていることを確認してください。
  2. 使用する Nova フレーバーが、必要なノード数において、上記の Ironic ノードプロパティーを超えていないかどうかを確認します。
    $ nova flavor-show [FLAVOR NAME]
    
  3. ironic node-list の通りに available の状態のノードが十分に存在することを確認します。ノードの状態が manageable の場合は通常、イントロスペクションに失敗しています。
  4. また、ノードがメンテナンスモードではないことを確認します。ironic node-list を使用してチェックしてください。通常、自動でメンテナンスモードに切り替わるノードは、電源の認証情報が間違っています。認証情報を確認して、メンテナンスモードをオフにします。
    $ ironic node-set-maintenance [NODE UUID] off
    
  5. Automated Health Check (AHC) ツールを使用して、自動でノードのタグ付けを行う場合には、各フレーバー/フレーバーに対応するノードが十分に存在することを確認します。properties フィールドの capabilities キーに ironic node-show がないか確認します。たとえば、コンピュートロールのタグを付けられたノードには、profile:compute が含まれているはずです。
  6. イントロスペクションの後に Ironic から Nova にノードの情報が反映されるには若干時間がかかります。これは通常、director のツールが原因です。ただし、一部のステップを手動で実行した場合には、短時間ですが、Nova でノードが利用できなくなる場合があります。以下のコマンドを使用して、システム内の合計リソースをチェックします。
    $ nova hypervisor-stats
    

11.7. オーバークラウド作成後のトラブルシューティング

オーバークラウドを作成した後には、将来そのオーバークラウドで特定の操作を行うようにすることができます。たとえば、利用可能なノードをスケーリングしたり、障害の発生したノードを置き換えたりすることができます。このような操作を行うと、特定の問題が発生する場合があります。本項には、オーバークラウド作成後の操作が失敗した場合の診断とトラブルシューティングに関するアドバイスを記載します。

11.7.1. オーバークラウドスタックの変更

director を使用して overcloud スタックを変更する際に問題が発生する場合があります。スタックの変更例には、以下のような操作が含まれます。
  • ノードのスケーリング
  • ノードの削除
  • ノードの置き換え
スタックの変更は、スタックの作成と似ており、director は要求されたノード数が利用可能かどうかをチェックして追加のノードをプロビジョニングしたり、既存のノードを削除してから、Puppet の設定を適用します。overcloud スタックを変更する場合に従うべきガイドラインを以下に記載します。
第一段階として、「オーバークラウドの作成のトラブルシューティング」に記載したアドバイスに従います。これらの手順と同じステップを、overcloud Heat スタック更新の問題の診断に役立てることができます。特に、以下のコマンドを使用して問題のあるリソースを特定します。
heat stack-list --show-nested
全スタックを一覧表示します。--show-nested はすべての子スタックとそれぞれの親スタックを表示します。このコマンドは、スタックでエラーが発生した時点を特定するのに役立ちます。
heat resource-list overcloud
overcloud スタック内の全リソースとそれらの状態を一覧表示します。このコマンドは、スタック内でどのリソースが原因でエラーが発生しているかを特定するのに役立ちます。このリソースのエラーの原因となっている Heat テンプレートコレクションと Puppet モジュール内のパラメーターと設定を特定することができます。
heat event-list overcloud
overcloud スタックに関連するすべてのイベントを時系列で一覧表示します。これには、スタック内の全リソースのイベント開始/完了時間とエラーが含まれます。この情報は、リソースの障害点を特定するのに役立ちます。
以下のセクションには、特定の種別のノード上の問題診断に関するアドバイスを記載します。

11.7.2. コントローラーサービスのエラー

オーバークラウドコントローラーノードには、 Red Hat OpenStack Platform のサービスの大部分が含まれます。同様に、高可用性のクラスターで複数のコントローラーノードを使用することができます。ノード上の特定のサービスに障害が発生すると、高可用性のクラスターは一定レベルのフェイルオーバーを提供します。ただし、オーバークラウドをフル稼働させるには、障害のあるサービスの診断が必要となります。
コントローラーノードは、Pacemaker を使用して高可用性クラスター内のリソースとサービスを管理します。Pacemaker Configuration System (pcs) コマンドは、Pacemaker クラスターを管理するツールです。クラスター内のコントローラーノードでこのコマンドを実行して、設定およびモニタリングの機能を実行します。高可用性クラスター上のオーバークラウドサービスのトラブルシューティングに役立つコマンドを以下にいくつか記載します。
pcs status
有効なリソース、エラーが発生したリソース、オンラインのノードなどを含む、クラスター全体のステータス概要を提供します。
pcs resource show
リソースの一覧をそれぞれのノードで表示します。
pcs resource disable [resource]
特定のリソースを停止します。
pcs resource enable [resource]
特定のリソースを起動します。
pcs cluster standby [node]
ノードをスタンバイモードに切り替えます。そのノードはクラスターで利用できなくなります。このコマンドは、クラスターに影響を及ぼさずに特定のノードメンテナンスを実行するのに役立ちます。
pcs cluster unstandby [node]
ノードをスタンバイモードから解除します。ノードはクラスター内で再度利用可能となります。
これらの Pacemaker コマンドを使用して障害のあるコンポーネントおよびノードを特定します。コンポーネントを特定した後には、/var/log/ でそれぞれのコンポーネントのログファイルを確認します。

11.7.3. Compute サービスのエラー

Compute ノードは、Compute サービスを使用して、ハイパーバイザーベースの操作を実行します。これは、このサービスを中心にコンピュートノードのメインの診断が行われていることを意味します。以下に例を示します。
  • 以下の systemd 機能を使用してサービスのステータスを確認します。
    $ sudo systemctl status openstack-nova-compute.service
    
    同様に、以下のコマンドを使用して、サービスの systemd ジャーナルを確認します。
    $ sudo journalctl -u openstack-nova-compute.service
    
  • コンピュートノードのプライマリーログファイルは /var/log/nova/nova-compute.log です。コンピュートノードの通信で問題が発生した場合には、このログファイルは診断を開始するのに適した場所です。
  • コンピュートノードでメンテナンスを実行する場合には、既存のインスタンスをホストから稼働中のコンピュートノードに移行し、ノードを無効にします。ノードの移行についての詳しい情報は、「オーバークラウドのコンピュートノードからの仮想マシンの移行」 を参照してください。

11.7.4. Ceph Storage サービスのエラー

Red Hat Ceph Storage クラスターで発生した問題については、『Red Hat Ceph Storage Configuration Guide』の「Part X. Logging and Debugging」を参照してください。本項では、全 Ceph Storage サービスのログ診断についての情報を記載します。

11.8. アンダークラウドの調整

このセクションでのアドバイスは、アンダークラウドのパフォーマンスを向上に役立たせることが目的です。必要に応じて、推奨事項を実行してください。
  • OpenStack 認証サービス (keystone) は、トークンベースのシステムを使用して、他の OpenStack サービスにアクセスします。一定の期間が経過すると、データベースは未使用のトークンを多数累積します。 データベース内のトークンテーブルをフラッシュする cron ジョブを作成することを推奨します。たとえば、毎日午前 4 時にトークンテーブルをフラッシュするには、以下のように設定します。
    0 04 * * * /bin/keystone-manage token_flush
    
  • Heat は、openstack overcloud deploy を実行するたびにデータベースの raw_template テーブルにある全一時ファイルのコピーを保存します。raw_template テーブルは、過去のテンプレートをすべて保持し、サイズが増加します。raw_templates テーブルにある未使用のテンプレートを削除するには、以下のように、日次の cron ジョブを作成して、未使用のまま 1 日以上データベースに存在するテンプレートを消去してください。
    0 04 * * * /bin/heat-manage purge_deleted -g days 1
    
  • openstack-heat-engine および openstack-heat-api サービスは、一度に過剰なリソースを消費する可能性があります。そのような場合は /etc/heat/heat.confmax_resources_per_stack=-1 を設定して、Heat サービスを再起動します。
    $ sudo systemctl restart openstack-heat-engine openstack-heat-api
    
  • directorには、同時にノードをプロビジョニングするリソースが十分にない場合があります。同時に提供できるノード数はデフォルトで 10 個となっています。同時にプロビジョニングするノード数を減らすには、/etc/nova/nova.confmax_concurrent_builds パラメーターを 10 未満に設定して Nova サービスを再起動します。
    $ sudo systemctl restart openstack-nova-api openstack-nova-scheduler
    
  • /etc/my.cnf.d/server.cnf ファイルを編集します。調整が推奨される値は、以下のとおりです。
    max_connections
    データベースに同時接続できる数。推奨の値は 4096 です。
    innodb_additional_mem_pool_size
    データベースがデータのディクショナリーの情報や他の内部データ構造を保存するのに使用するメモリープールサイズ (バイト単位)。デフォルトは通常 8 M ですが、アンダークラウドの理想の値は 20 M です。
    innodb_buffer_pool_size
    データベースがテーブルやインデックスデータをキャッシュするメモリー領域つまり、バッファープールのサイズ (バイト単位)。通常デフォルトは 128 M で、アンダークラウドの理想の値は 1000 M です。
    innodb_flush_log_at_trx_commit
    コミット操作の厳密な ACID 準拠と、コミット関連の I/O 操作を再編成してバッチで実行することによって実現可能なパフォーマンス向上の間のバランスを制御します。1 に設定します。
    innodb_lock_wait_timeout
    行のロックがされるまで、データベースのトランザクションが待機するのを中断するまでの期間 (秒単位)。
    innodb_max_purge_lag
    この変数は、解析操作が遅れている場合に INSERT、UPDATE、DELETE 操作を遅延させる方法を制御します。10000 に設定します。
    innodb_thread_concurrency
    同時に実行するオペレーティングシステムのスレッド数の上限。理想的には、各 CPU およびディスクリソースに対して少なくとも 2 つのスレッドを提供します。たとえば、クワッドコア CPU と単一のディスクを使用する場合は、スレッドを 10 個使用します。
  • オーバークラウドを作成する際には、Heat に十分なワーカーが配置されているようにします。通常、アンダークラウドに CPU がいくつあるかにより左右されます。ワーカーの数を手動で設定するには、/etc/heat/heat.conf ファイルを編集して num_engine_workers パラメーターを必要なワーカー数 (理想は 4) に設定し、Heat エンジンを再起動します。
    $ sudo systemctl restart openstack-heat-engine
    

11.9. アンダークラウドとオーバークラウドの重要なログ

以下のログを使用して、トラブルシューティングの際にアンダークラウドとオーバークラウドの情報を割り出します。

表11.1 アンダークラウドとオーバークラウドの重要なログ

情報
アンダークラウドまたはオーバークラウド
ログの場所
一般的な director サービス
アンダークラウド
/var/log/nova/*
/var/log/heat/*
/var/log/ironic/*
イントロスペクション
アンダークラウド
/var/log/ironic/*
/var/log/ironic-inspector/*
プロビジョニング
アンダークラウド
/var/log/ironic/*
cloud-init ログ
オーバークラウド
/var/log/cloud-init.log
オーバークラウドの設定 (最後に実行した Puppet のサマリー)
オーバークラウド
/var/lib/puppet/state/last_run_summary.yaml
オーバークラウドの設定 (最後に実行した Puppet からのレポート)
オーバークラウド
/var/lib/puppet/state/last_run_report.yaml
オーバークラウドの設定 (全 Puppet レポート)
オーバークラウド
/var/lib/puppet/reports/overcloud-*/*
一般のオーバークラウドサービス
オーバークラウド
/var/log/ceilometer/*
/var/log/ceph/*
/var/log/cinder/*
/var/log/glance/*
/var/log/heat/*
/var/log/horizon/*
/var/log/httpd/*
/var/log/keystone/*
/var/log/libvirt/*
/var/log/neutron/*
/var/log/nova/*
/var/log/openvswitch/*
/var/log/rabbitmq/*
/var/log/redis/*
/var/log/swift/*
高可用性ログ
オーバークラウド
/var/log/pacemaker.log

付録A SSL/TLS 証明書の設定

「director の設定」または「オーバークラウドの SSL/TLS の有効化」で説明したプロセスのオプションとして、アンダークラウドまたはオーバークラウドのいずれかでの通信に SSL/TLS を使用するように設定できます。ただし、自己署名した SSL 証明書を使用する場合には、証明書には特定の設定を使用する必要があります。
カスタマイズするデフォルトの OpenSSL 設定ファイルをコピーします。
[stack@host1 ~]$ cp /etc/pki/tls/openssl.cnf .
カスタムの openssl.cnf ファイルを編集して、director に使用する SSL パラメーターを設定します。変更するパラメーターの種別には以下のような例が含まれます。
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = AU
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Queensland
localityName = Locality Name (eg, city)
localityName_default = Brisbane
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Red Hat
commonName = Common Name
commonName_default = 192.168.0.1
commonName_max = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.0.1
DNS.1 = instack.localdomain
DNS.2 = vip.localdomain

重要

commonName_default をパブリック API の IP アドレスに設定するか、完全修飾ドメイン名を使用している場合は完全修飾ドメイン名に設定します。
  • アンダークラウドでは、undercloud.confundercloud_public_vip パラメーターを使用します。この IP アドレスの完全修飾ドメイン名を使用する場合は、そのドメイン名を使用してください。
  • オーバークラウドでは、パブリック API の IP アドレスを使用します。これは、ネットワーク分離環境ファイルにある ExternalAllocationPools パラメーターの最初のアドレスです。この IP アドレスに完全修飾ドメイン名を使用する場合には、そのドメイン名を使用します。
alt_names セクションの IP エントリーとして、同じパブリック API の IP アドレスを追加します。DNS も使用する場合は、同じセクションに DNS エントリーとしてそのサーバーのホスト名を追加します。openssl.cnf の詳しい情報は man openssl.cnf を実行してください。
以下のコマンドを実行してキーペアを生成します。
$ openssl genrsa -out server-key.pem 2048
$ openssl req -new -x509 -key server-key.pem -out server-cert.pem -days 3650 -config ~/openssl.cnf
このキーペアを使用して、アンダークラウドまたはオーバークラウドのいずれかの SSL/TTL 証明書を作成します。

アンダークラウドの場合:

以下のコマンドを実行して証明書を作成します。
$ cat server-cert.pem server-key.pem > undercloud.pem

重要

openssl req コマンドは、Common Name などの証明書に関する情報をいくつか尋ねます。Common Name は、パブリック API の IP アドレスに設定するようにしてください。openssl.cnf ファイルは、この IP アドレスをデフォルト値として使用する必要があります。
これにより、undercloud_service_certificate オプションに使用する undercloud.pem が作成されます。このファイルは、HAProxy ツールが読み取ることができるように、特別な SELinux コンテキストが必要です。以下の例をガイドとして利用してください。
$ sudo mkdir /etc/pki/instack-certs
$ sudo cp ~/undercloud.pem /etc/pki/instack-certs/.
$ sudo semanage fcontext -a -t etc_t "/etc/pki/instack-certs(/.*)?"
$ sudo restorecon -R /etc/pki/instack-certs
アンダークラウドの信頼済みの認証局 (CA) 一覧に証明書を追加します。
$ sudo cp server-cert.pem /etc/pki/ca-trust/source/anchors/
$ sudo update-ca-trust extract

オーバークラウドの場合:

「オーバークラウドの SSL/TLS の有効化」enable-tls.yaml ファイルと合わせてこの証明書を使用します。

付録B 電源管理ドライバー

IPMI は、director が電源管理制御に使用する主要な手法ですが、director は他の電源管理タイプもサポートします。この付録では、サポートされる電源管理機能の一覧を提供します。「オーバークラウドへのノードの登録」には、以下の電源管理設定を使用します。

B.1. Dell Remote Access Controller (DRAC)

DRAC は、電源管理やサーバー監視などの帯域外 (OOB) リモート管理機能を提供するインターフェースです。
pm_type
このオプションを pxe_drac に設定します。
pm_user, pm_password
DRAC のユーザー名およびパスワード
pm_addr
DRAC ホストの IP アドレス

B.2. Integrated Lights-Out (iLO)

Hewlett-Packard の iLO は、電源管理やサーバー監視などの帯域外 (OOB) リモート管理機能を提供するインターフェースです。
pm_type
このオプションを pxe_ilo に設定します。
pm_user, pm_password
iLO のユーザー名およびパスワード
pm_addr
iLO インターフェースの IP アドレス

補注

  • /etc/ironic/ironic.conf ファイルを編集して、enabled_drivers オプションに pxe_ilo を追加し、このドライバーを有効化します。
  • また director では、iLO 向けに追加のユーティリティーセットが必要です。python-proliantutils パッケージをインストールして openstack-ironic-conductor サービスを再起動します。
    $ sudo yum install python-proliantutils
    $ sudo systemctl restart openstack-ironic-conductor.service
    
  • HP ノードは、正常にイントロスペクションするには 2015 年のファームウェアバージョンが必要です。ファームウェアバージョン 1.85 (2015 年 5 月 13 日) を使用したノードで、director は正常にテストされています。

B.3. iBoot

Dataprobe の iBoot は、システムのリモート電源管理機能を提供する電源ユニットです。
pm_type
このオプションを pxe_iboot に設定します。
pm_user, pm_password
iBoot のユーザー名およびパスワード
pm_addr
iBoot インターフェースの IP アドレス
pm_relay_id (オプション)
ホストの iBoot リレー ID。デフォルトは 1 です。
pm_port (オプション)
iBoot ポート。デフォルトは 9100 です。

補注

  • /etc/ironic/ironic.conf ファイルを編集して、enabled_drivers オプションに pxe_iboot を追加し、このドライバーを有効化します。

B.4. Cisco Unified Computing System (UCS)

Cisco の UCS は、コンピュート、ネットワーク、ストレージのアクセス、仮想化リソースを統合するデータセンタープラットフォームです。このドライバーは、UCS に接続されたベアメタルシステムの電源管理を重視しています。
pm_type
このオプションを pxe_ucs に設定します。
pm_user, pm_password
UCS のユーザー名およびパスワード
pm_addr
UCS インターフェースの IP アドレス
pm_service_profile
使用する UCS サービスプロファイル。通常 org-root/ls-[service_profile_name] の形式を取ります。たとえば、以下のとおりです。
"pm_service_profile": "org-root/ls-Nova-1"

補注

  • /etc/ironic/ironic.conf ファイルを編集して、enabled_drivers オプションに pxe_ucs を追加し、このドライバーを有効化します。
  • director には、UCS 用に追加のユーティリティーセットも必要です。python-UcsSdk パッケージをインストールして、openstack-ironic-conductor サービスを再起動します。
    $ sudo yum install python-UcsSdk
    $ sudo systemctl restart openstack-ironic-conductor.service
    

B.5. Fujitsu Integrated Remote Management Controller (iRMC)

Fujitsu の iRMC は、LAN 接続と拡張された機能を統合した Baseboard Management Controller (BMC) です。このドライバーは、iRMC に接続されたベアメタルシステムの電源管理にフォーカスしています。

重要

iRMC S4 以降のバージョンが必要です。
pm_type
このオプションを pxe_irmc に設定します。
pm_user, pm_password
iRMC インターフェースのユーザー名とパスワード
pm_addr
iRMC インターフェースの IP アドレス
pm_port (オプション)
iRMC の操作に使用するポート。デフォルトは 443 です。
pm_auth_method (オプション)
iRMC 操作の認証方法。basic または digest を使用します。デフォルトは basic です。
pm_client_timeout (オプション)
iRMC 操作のタイムアウト (秒単位)。デフォルトは 60 秒です。
pm_sensor_method (オプション)
センサーデータの取得方法。ipmitool または scci です。デフォルトは ipmitool です。

補注

  • /etc/ironic/ironic.conf ファイルを編集して、enabled_drivers オプションに pxe_irmc を追加し、このドライバーを有効化します。
  • センサーの方法として SCCI を有効にした場合には、director には、追加のユーティリティーセットも必要です。python-scciclient パッケージをインストールして、openstack-ironic-conductor サービスを再起動します。
    $ yum install python-scciclient
    $ sudo systemctl restart openstack-ironic-conductor.service
    

B.6. SSH および Virsh

director は、libvirt を実行中のホストに SSH 経由でアクセスして、仮想マシンをノードとして使用することができます。director は、virsh を使用してこれらのノードの電源管理の制御を行います。

重要

このオプションは、テストおよび評価の目的でのみ利用いただけます。Red Hat OpenStack Platform のエンタープライズ環境には推奨していません。
pm_type
このオプションを pxe_ssh に設定します。
pm_user, pm_password
SSH ユーザー名および秘密鍵の内容。秘密鍵は一行に記載する必要があり、改行はエスケープ文字 (\n) に置き換えます。以下に例を示します。
-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA .... kk+WXt9Y=\n-----END RSA PRIVATE KEY-----
SSH 公開鍵を libvirt サーバーの authorized_keys コレクションに追加します。
pm_addr
virsh ホストの IP アドレス

補注

  • libvirt をホストするサーバーでは、公開鍵と SSH のキーペアを pm_password 属性に設定する必要があります。
  • 選択した pm_user には libvirt 環境への完全なアクセス権が指定されているようにします。

B.7. フェイク PXE ドライバー

このドライバーは、電源管理なしにベアメタルデバイスを使用する方法を提供します。これは、director が登録されたベアメタルデバイスを制御しないので、イントロスペクションとデプロイの特定の時点に手動で電源をコントロールする必要があることを意味します。

重要

このオプションは、テストおよび評価の目的でのみ利用いただけます。Red Hat OpenStack Platform のエンタープライズ環境には推奨していません。
pm_type
このオプションを fake_pxe に設定します。

補注

  • このドライバーは、電源管理を制御しないので、認証情報は使用しません。
  • /etc/ironic/ironic.conf ファイルを編集して、enabled_drivers オプションに fake_pxe を追加し、このドライバーを有効化します。
  • ノードでイントロスペクションを実行する際には、openstack baremetal introspection bulk start コマンドの実行後に手動で電源をオンにします。
  • オーバークラウドのデプロイ実行時には、ironic node-list コマンドでノードのステータスを確認します。ノードのステータスが deploying から deploy wait-callback に変わるまで待ってから、手動でノードの電源をオンにします。

付録C プロファイルの自動タグ付け

イントロスペクションプロセスでは、ベンチマークテストを実行します。director は、これらのテストからのデータを保存します。このデータを使用してレポートセットを生成して、パフォーマンスの低いノードや不安定なノードを特定して、オーバークラウドで使用されないように分離します。さらに、カスタマイズ可能なポリシーをベースに特定のプロファイルにノードを自動的にタグ付けします。本項では、これらのレポートを生成する方法と、特定のロールにノードを自動でタグ付けするポリシーを作成する方法について考察します。
適用するイントロスペクションルールが含まれる rules.json などの JSON ファイルを作成します。以下に例を示します。
    [
        {
            "description": "Fail introspection for unexpected nodes",
            "conditions": [
                {"op": "lt", "field": "memory_mb", "value": 4096}
            ],
            "actions": [
                {"action": "fail", "message": "Memory too low, expected at least 4 GiB"}
            ]
        },
        {
            "description": "Assign profile for object storage",
            "conditions": [
                {"op": "ge", "field": "local_gb", "value": 1024}
            ],
            "actions": [
                {"action": "set-capability", "name": "profile", "value": "swift-storage"}
            ]
        },
        {
            "description": "Assign possible profiles for compute and controller",
            "conditions": [
                {"op": "lt", "field": "local_gb", "value": 1024},
                {"op": "ge", "field": "local_gb", "value": 40}
            ],
            "actions": [
                {"action": "set-capability", "name": "compute_profile", "value": "1"},
                {"action": "set-capability", "name": "control_profile", "value": "1"},
                {"action": "set-capability", "name": "profile", "value": null}
            ]
        }
    ]
この例には 3 つのルールが含まれます。
  • メモリーが 4096 MiB 未満の場合にイントロスペクションが失敗する。このようなルールを適用して、クラウドに含まれないようにノードを除外することができます。
  • ハードドライブのサイズが 1 TiB 上のノードの場合は swift-storage プロファイルが無条件で割り当てられる。
  • ノードのハードドライブが 1 TiB 未満であるが 40 GiB よりも大きい場合はコンピュートノードかコントロールノードかのいずれかです。openstack overcloud profiles match が後ほど最終的に判断を下せるように 2 つのケーパビリティー (compute_profile および control_profile) を割り当てます。これを機能させるには、既存のプロファイルのケイパビリティーを削除してください。削除しない場合は優先順位が設定されています。
他のノードは変更されません。

注記

イントロスペクションルールを使用して profile 機能を割り当てる場合は常に、既存の値よりこの割り当てた値が優先されます。ただし、既存のプロファイル機能があるノードについては、[PROFILE]_profile 機能は無視されます。
以下のコマンドで、このファイルを director にインポートします。
$ openstack baremetal introspection rule import /path/to/rules.json
次にイントロスペクションプロセスを実行します。
$ openstack baremetal introspection bulk start
イントロスペクションが完了したら、ノードとノードに割り当てられたプロファイルを確認します。
$ openstack overcloud profiles list
イントロスペクションルールで間違いがあった場合には、すべてを削除できます。
$ openstack baremetal introspection rule purge

付録D ネットワークインターフェースのパラメーター

以下の表では、ネットワークインターフェース種別に対する Heat テンプレートのパラメーターを定義します。

表D.1 インターフェースオプション

オプション
デフォルト
説明
名前
インターフェース名
use_dhcp
False
DHCP を使用して IP アドレスを取得します。
use_dhcpv6
False
DHCP を使用して v6 IP アドレスを取得します。
addresses
インターフェースに割り当てられる IP アドレスのシーケンス
routes
インターフェースに割り当てられるルートのシーケンス
mtu
1500
接続の最大伝送単位 (MTU: Maximum Transmission Unit)
primary
False
プライマリーインターフェースとしてインターフェースを定義します。
defroute
True
このインターフェースをデフォルトルートとして使用します。
persist_mapping
False
システム名の代わりにデバイスのエイリアス設定を記述します。
dhclient_args
なし
DHCP クライアントに渡す引数
dns_servers
なし
インターフェースに使用する DNS サーバーの一覧

表D.2 VLAN オプション

オプション
デフォルト
説明
vlan_id
VLAN ID
device
VLAN をアタッチする VLAN の親デバイス。たとえば、このパラメーターを使用して、ボンディングされたインターフェースデバイスに VLAN をアタッチします。
use_dhcp
False
DHCP を使用して IP アドレスを取得します。
use_dhcpv6
False
DHCP を使用して v6 IP アドレスを取得します。
addresses
VLAN を割り当てる IP アドレスのシーケンス
routes
VLAN を割り当てるルートのシーケンス
mtu
1500
接続の最大伝送単位 (MTU: Maximum Transmission Unit)
primary
False
プライマリーインターフェースとして VLAN を定義します。
defroute
True
このインターフェースをデフォルトルートとして使用します。
persist_mapping
False
システム名の代わりにデバイスのエイリアス設定を記述します。
dhclient_args
なし
DHCP クライアントに渡す引数
dns_servers
なし
VLAN に使用する DNS サーバーの一覧

表D.3 OVS ボンディングオプション

オプション
デフォルト
説明
名前
ボンディング名
use_dhcp
False
DHCP を使用して IP アドレスを取得します。
use_dhcpv6
False
DHCP を使用して v6 IP アドレスを取得します。
addresses
ボンディングに割り当てられる IP アドレスのシーケンス
routes
ボンディングに割り当てられるルートのシーケンス
mtu
1500
接続の最大伝送単位 (MTU: Maximum Transmission Unit)
primary
False
プライマリーインターフェースとしてインターフェースを定義します。
members
ボンディングで使用するインターフェースオブジェクトのシーケンス
ovs_options
ボンディング作成時に OVS に渡すオプションセット
ovs_extra
ボンディングのネットワーク設定ファイルで OVS_EXTRA パラメーターとして設定するオプションセット
defroute
True
このインターフェースをデフォルトルートとして使用します。
persist_mapping
False
システム名の代わりにデバイスのエイリアス設定を記述します。
dhclient_args
なし
DHCP クライアントに渡す引数
dns_servers
なし
ボンディングに使用する DNS サーバーの一覧

表D.4 OVS ブリッジオプション

オプション
デフォルト
説明
名前
ブリッジ名
use_dhcp
False
DHCP を使用して IP アドレスを取得します。
use_dhcpv6
False
DHCP を使用して v6 IP アドレスを取得します。
addresses
ブリッジに割り当てられる IP アドレスのシーケンス
routes
ブリッジに割り当てられるルートのシーケンス
mtu
1500
接続の最大伝送単位 (MTU: Maximum Transmission Unit)
members
ブリッジで使用するインターフェース、VLAN、ボンディングオブジェクトのシーケンス
ovs_options
ブリッジ作成時に OVS に渡すオプションセット
ovs_extra
ブリッジのネットワーク設定ファイルで OVS_EXTRA パラメーターとして設定するオプションセット
defroute
True
このインターフェースをデフォルトルートとして使用します。
persist_mapping
False
システム名の代わりにデバイスのエイリアス設定を記述します。
dhclient_args
なし
DHCP クライアントに渡す引数
dns_servers
なし
ブリッジに使用する DNS サーバーの一覧

表D.5 Linux ボンディングオプション

オプション
デフォルト
説明
名前
ボンディング名
use_dhcp
False
DHCP を使用して IP アドレスを取得します。
use_dhcpv6
False
DHCP を使用して v6 IP アドレスを取得します。
addresses
ボンディングに割り当てられる IP アドレスのシーケンス
routes
ボンディングに割り当てられるルートのシーケンス
mtu
1500
接続の最大伝送単位 (MTU: Maximum Transmission Unit)
primary
False
プライマリーインターフェースとしてインターフェースを定義します。
members
ボンディングで使用するインターフェースオブジェクトのシーケンス
bonding_options
ボンディング作成時のオプションセット
defroute
True
このインターフェースをデフォルトルートとして使用します。
persist_mapping
False
システム名の代わりにデバイスのエイリアス設定を記述します。
dhclient_args
なし
DHCP クライアントに渡す引数
dns_servers
なし
ボンディングに使用する DNS サーバーの一覧

表D.6 Linux Bridge オプション

オプション
デフォルト
説明
名前
ブリッジ名
use_dhcp
False
DHCP を使用して IP アドレスを取得します。
use_dhcpv6
False
DHCP を使用して v6 IP アドレスを取得します。
addresses
ブリッジに割り当てられる IP アドレスのシーケンス
routes
ブリッジに割り当てられるルートのシーケンス
mtu
1500
接続の最大伝送単位 (MTU: Maximum Transmission Unit)
members
ブリッジで使用するインターフェース、VLAN、ボンディングオブジェクトのシーケンス
defroute
True
このインターフェースをデフォルトルートとして使用します。
persist_mapping
False
システム名の代わりにデバイスのエイリアス設定を記述します。
dhclient_args
なし
DHCP クライアントに渡す引数
dns_servers
なし
ブリッジに使用する DNS サーバーの一覧

付録E ネットワークインターフェースのテンプレート例

本付録では、ネットワークインターフェース設定を示す Heat テンプレート例をいくつか紹介します。

E.1. インターフェースの設定

インターフェースは個別に変更を加える必要がある場合があります。以下の例では、DHCP アドレスでインフラストラクチャーネットワークへ接続するための 2 つ目の NIC、ボンディング用の 3 つ目/4 つ目の NIC を使用するのに必要となる変更を紹介します。
network_config:
  # Add a DHCP infrastructure network to nic2
  -
    type: interface
    name: nic2
    use_dhcp: true
  -
    type: ovs_bridge
    name: br-bond
    members:
      -
        type: ovs_bond
        name: bond1
        ovs_options: {get_param: BondInterfaceOvsOptions}
        members:
          # Modify bond NICs to use nic3 and nic4
          -
            type: interface
            name: nic3
            primary: true
          -
            type: interface
            name: nic4
ネットワークインターフェースのテンプレートは、実際のインターフェース名 ("eth0"、"eth1"、"enp0s25") または番号付きのインターフェース ("nic1"、"nic2"、"nic3") のいずれかを使用します。名前付きのインターフェース (eth0eno2 など) ではなく、番号付きのインターフェース (nic1nic2 など) を使用した場合には、ロール内のホストのネットワークインターフェースは、まったく同じである必要はありません。たとえば、あるホストに em1em2 のインターフェースが指定されており、別のホストには eno1eno2 が指定されていても、両ホストの NIC は、 nic1 および nic2 として参照することができます。
番号付きのインターフェースの順番は、名前付きのネットワークインターフェースのタイプの順番と同じです。
  • eth0eth1 などの ethX。これらは、通常オンボードのインターフェースです。
  • eno0eno1 などの enoX。これらは、通常オンボードのインターフェースです。
  • enp3s0enp3s1ens3 などの英数字順の enX インターフェース。これらは通常アドオンのインターフェースです。
番号付きの NIC スキームは、ライブのインターフェース (例: スイッチに接続されているケーブル) のみ考慮します。4 つのインターフェースを持つホストと、6 つのインターフェースを持つホストがある場合に、各ホストで nic1 から nic4 を使用してケーブル 4 本のみを結線します。

E.2. ルートおよびデフォルトルートの設定

ホストにデフォルトのルートセットを指定するには 2 つの方法があります。インターフェースが DHCP を使用しており、DHCP がゲートウェイアドレスを提供している場合には、システムは対象のゲートウェイに対してデフォルトルートを使用します。それ以外の場合には、静的な IP を使用するインターフェースにデフォルトのルートを設定することができます。
Linux カーネルは複数のデフォルトゲートウェイをサポートしますが、最も低いメトリックが指定されたゲートウェイのみを使用します。複数の DHCP インターフェースがある場合には、どのデフォルトゲートウェイが使用されるかが推測できなくなります。このような場合には、デフォルトルートを使用しないインターフェースに defroute=no を設定することを推奨します。
たとえば、DHCP インターフェース (nic3) をデフォルトのルートに指定する場合には、以下の YAML を使用して別の DHCP インターフェース (nic2) 上のデフォルトのルートを無効にします。
# No default route on this DHCP interface
- type: interface
  name: nic2
  use_dhcp: true
  defroute: false
# Instead use this DHCP interface as the default route
- type: interface
  name: nic3
  use_dhcp: true

注記

defroute パラメーターは DHCP で取得したルートのみに適用されます。
静的な IP が指定されたインターフェースに静的なルートを設定するには、サブネットにルートを指定します。たとえば、内部 API ネットワーク上のゲートウェイ 172.17.0.1 を経由するサブネット 10.1.2.0/24 にルートを設定します。
    - type: vlan
      device: bond1
      vlan_id: {get_param: InternalApiNetworkVlanID}
      addresses:
      - ip_netmask: {get_param: InternalApiIpSubnet}
      routes:
      - ip_netmask: 10.1.2.0/24
        next_hop: 172.17.0.1

E.3. Floating IP のためのネイティブ VLAN の使用

Neutron は、Neutron の外部のブリッジマッピングにデフォルトの空の文字列を使用します。これにより、物理インタフェースは br-ex の代わりに br-int を使用して直接マッピングされます。このモデルにより、VLAN または複数の物理接続のいずれかを使用した複数の Floating IP ネットワークが可能となります。
ネットワーク分離環境ファイルの parameter_defaults セクションで NeutronExternalNetworkBridge パラメーターを使用します。
  parameter_defaults:
    # Set to "br-ex" when using floating IPs on the native VLAN
    NeutronExternalNetworkBridge: "''"
ブリッジのネイティブ VLAN 上で Floating IP ネットワークを 1 つのみを使用すると、オプションで Neutron の外部ブリッジを設定できることになります。これにより、パケットが通過するブリッジは 2 つではなく 1 つとなり、Floating IP ネットワーク上でトラフィックを渡す際の CPU の使用率がやや低くなる可能性があります。
次のセクションには、ネイティブ VLAN に外部ネットワークを指定する NIC 設定への変更が含まれます。外部ネットワークが br-ex にマッピングされている場合には、外部ネットワークを Horizon Dashboard およびパブリック API 以外に Floating IP にも使用することができます。

E.4. トランキングされたインターフェースでのネイティブ VLAN の使用

トランキングされたインターフェースまたはボンディングに、ネイティブ VLAN を使用したネットワークがある場合には、IP アドレスはブリッジに直接割り当てられ、VLAN インターフェースはありません。
たとえば、外部ネットワークがネイティブ VLAN に存在する場合には、ボンディングの設定は以下のようになります。
network_config:
  - type: ovs_bridge
    name: {get_input: bridge_name}
    dns_servers: {get_param: DnsServers}
    addresses:
      - ip_netmask: {get_param: ExternalIpSubnet}
    routes:
      - ip_netmask: 0.0.0.0/0
        next_hop: {get_param: ExternalInterfaceDefaultRoute}
    members:
      - type: ovs_bond
        name: bond1
        ovs_options: {get_param: BondInterfaceOvsOptions}
        members:
          - type: interface
            name: nic3
            primary: true
          - type: interface
            name: nic4

注記

アドレス (またはルート) のステートメントをブリッジに移動する場合には、ブリッジから対応の VLAN インターフェースを削除します。該当する全ロールに変更を加えます。外部ネットワークはコントローラーのみに存在するため、変更する必要があるのはコントローラーのテンプレートだけです。反対に、ストレージネットワークは全ロールにアタッチされているため、ストレージネットワークがデフォルトの VLAN の場合には、全ロールを変更する必要があります。

E.5. ジャンボフレームの設定

最大伝送単位 (MTU) の設定は、単一の Ethernet フレームで転送されるデータの最大量を決定します。各フレームはヘッダー形式でデータを追加するため、より大きい値を指定すると、オーバーヘッドが少なくなります。デフォルト値が 1500 で、1500 より高い値を使用する場合には、ジャンボフレームをサポートするスイッチポートの設定が必要になります。大半のスイッチは、9000 以上の MTU 値をサポートしていますが、多くはデフォルトで 1500 に指定されています。
VLAN の MTU は、物理インターフェースの MTU を超えることができません。ボンディングまたはインターフェースで MTU 値を含めるようにしてください。
ジャンボフレームは、ストレージ、ストレージ管理、内部 API、テナントネットワークのすべてにメリットをもたらします。テストでは、VXLAN トンネルと合わせてジャンボフレームを使用した場合に、テナントネットワークのスループットは 300% 以上になりました。

注記

プロビジョニングインターフェース、外部インターフェース、Floating IP インターフェースの MTU はデフォルトの 1500 のままにしておくことを推奨します。変更すると、接続性の問題が発生する可能性があります。これは、ルーターが通常レイヤー 3 の境界を超えてジャンボフレームでのデータ転送ができないのが理由です。
- type: ovs_bond
  name: bond1
  mtu: 9000
  ovs_options: {get_param: BondInterfaceOvsOptions}
  members:
    - type: interface
      name: nic3
      mtu: 9000
      primary: true
    - type: interface
      name: nic4
      mtu: 9000

# The external interface should stay at default
- type: vlan
  device: bond1
  vlan_id: {get_param: ExternalNetworkVlanID}
  addresses:
    - ip_netmask: {get_param: ExternalIpSubnet}
  routes:
    - ip_netmask: 0.0.0.0/0
      next_hop: {get_param: ExternalInterfaceDefaultRoute}

# MTU 9000 for Internal API, Storage, and Storage Management
- type: vlan
  device: bond1
  mtu: 9000
  vlan_id: {get_param: InternalApiNetworkVlanID}
  addresses:
  - ip_netmask: {get_param: InternalApiIpSubnet}

付録F ネットワーク環境のオプション

表F.1 ネットワーク環境のオプション

パラメーター
説明
InternalApiNetCidr
内部 API ネットワークのネットワークおよびサブネット
172.17.0.0/24
StorageNetCidr
ストレージネットワークのネットワークおよびサブネット
StorageMgmtNetCidr
ストレージ管理ネットワークのネットワークのおよびサブネット
TenantNetCidr
テナントネットワークのネットワークおよびサブネット
ExternalNetCidr
外部ネットワークのネットワークおよびサブネット
InternalApiAllocationPools
内部 API ネットワークの割り当てプール (タプル形式)
[{'start': '172.17.0.10', 'end': '172.17.0.200'}]
StorageAllocationPools
ストレージネットワークの割り当てプール (タプル形式)
StorageMgmtAllocationPools
ストレージ管理ネットワークの割り当てプール (タプル形式)
TenantAllocationPools
テナントネットワークの割り当てプール (タプル形式)
ExternalAllocationPools
外部ネットワークの割り当てプール (タプル形式)
InternalApiNetworkVlanID
内部 API ネットワークの VLAN ID
200
StorageNetworkVlanID
ストレージネットワークの VLAN ID
StorageMgmtNetworkVlanID
ストレージ管理ネットワークの VLAN ID
TenantNetworkVlanID
テナントネットワークの VLAN ID
ExternalNetworkVlanID
外部ネットワークの VLAN ID
ExternalInterfaceDefaultRoute
外部ネットワークのゲートウェイ IP アドレス
10.1.2.1
ControlPlaneDefaultRoute
プロビジョニングネットワーク用のゲートウェイルーター (またはアンダークラウドの IP アドレス)
ControlPlaneDefaultRoute: 192.0.2.254
ControlPlaneSubnetCidr
プロビジョニングネットワーク用のネットワークとサブネット
ControlPlaneSubnetCidr: 192.0.2.0/24
EC2MetadataIp
EC2 メタデータサーバーの IP アドレス。通常はアンダークラウドの IP アドレスです。
EC2MetadataIp: 192.0.2.1
DnsServers
オーバークラウドノード用の DNS サーバーを定義します。最大で 2 つまで指定することができます。
DnsServers: ["8.8.8.8","8.8.4.4"]
NeutronExternalNetworkBridge
外部ネットワークに使用するブリッジを定義します。ブリッジ br-ex 上のネイティブ VLAN で Floating IP を使用する場合は "br-ex" と設定します。
NeutronExternalNetworkBridge: "br-ex"
BondInterfaceOvsOptions
ボンディングインターフェースのオプション
bond_mode=balance-tcp"

付録G ボンディングオプション

オーバークラウドは、ボンディングインターフェースのオプションを複数提供する Open vSwtich (OVS) を介してネットワークを提供します。「ネットワーク環境ファイルの作成」の項では、ネットワークの環境ファイルで以下のオプションを使用して、ボンディングインターフェースを設定します。
  BondInterfaceOvsOptions:
    "bond_mode=balance-tcp"
以下の表には、これらのオプションについての説明と、ハードウェアに応じた代替手段を記載しています。

重要

LACP は OVS ベースのボンディングでは使用しないでください。この構成は問題があるため、サポートされていません。この機能の代わりとして、bond_mode=balance-slb を使用することを検討してください。また、Linux ボンディングでは、お使いのネットワークインターフェーステンプレートで LACP を使用することができます。
      - type: linux_bond
        name: bond1
        members:
        - type: interface
          name: nic2
        - type: interface
          name: nic3
        bonding_options: "bond_mode=balance-tcp lacp=active other-config:lacp-fallback-ab=true"

表G.1 ボンディングオプション

bond_mode=balance-tcp
このモードは、レイヤー 2 とレイヤー 4 のデータを考慮して、ロードバランシングを実行します。たとえば、宛先の MAC アドレス、IP アドレス、および TCP ポート、また balance-tcp には、スイッチ上で LACP が設定されている必要があります。このモードは、Linux ボンディングドライバーで使用されるモード 4 のボンディングと同様です。LACP はリンクの障害を検出するための高度な耐障害性と、ボンディングについての追加の診断情報を提供するので、可能な場合には、balance-tcp を使用することを推奨します。
LACP に balance-tcp を設定するのは、推奨オプションですが、物理スイッチとLACP をネゴシエーションできない場合には active-backup にフォールバックします。
bond_mode=balance-slb
送信元の MAC アドレスと出力の VLAN に基づいてフローのバランスを取り、トラフィックパターンの変化に応じて定期的にリバランスを行います。balance-slb とのボンディングにより、リモートスイッチについての知識や協力なしに限定された形態のロードバランシングが可能となります。SLB は送信元 MAC アドレスと VLAN の各ペアをリンクに割り当て、そのリンクを介して、対象の MAC アドレスとLAN からのパケットをすべて伝送します。このモードはトラフィックパターンの変化に応じて定期的にリバランスを行う、送信元 MAC アドレスと VLAN の番号に基づいた、簡単なハッシュアルゴリズムを使用します。これは、Linux ボンディングドライバーで使用されているモード 2 のボンディングと同様で、スイッチはボンディングで設定されているが、LACP (動的なボンディングではなく静的なボンディング) を使用するように設定されていない場合に使用されます。
bond_mode=active-backup
このモードは、アクティブな接続が失敗した場合にスタンバイの NIC がネットワーク操作を再開するアクティブ/スタンバイ構成のフェイルオーバーを提供します。物理スイッチに提示される MAC アドレスは 1 つのみです。このモードには、特別なスイッチのサポートや設定は必要なく、リンクが別のスイッチに接続された際に機能します。このモードは、ロードバランシングは提供しません。
lacp=[active|passive|off]
Link Aggregation Control Protocol (LACP) の動作を制御します。LACP をサポートしているのは特定のスイッチのみです。お使いのスイッチが LACP に対応していない場合には bond_mode=balance-slb または bond_mode=active-backup を使用してください。
LACP は OVS ベースのボンディングでは使用しないでください。この構成は問題があるため、サポートされていません。この機能の代わりとして、bond_mode=balance-slb を使用することを検討してください。また、LACP は Linux ボンディングで使用することも可能です。
other-config:lacp-fallback-ab=true
フォールバックとして bond_mode=active-backup に切り替わるように LACP の動作を設定します。
other_config:lacp-time=[fast|slow]
LACP のハートビートを 1 秒 (高速) または 30 秒 (低速) に設定します。デフォルトは低速です。
other_config:bond-detect-mode=[miimon|carrier]
リンク検出に miimon ハートビート (miimon) またはモニターキャリア (carrier) を設定します。デフォルトは carrier です。
other_config:bond-miimon-interval=100
miimon を使用する場合には、ハートビートの間隔をミリ秒単位で設定します。
other_config:bond_updelay=1000
フラッピングを防ぐためにアクティブ化してリンクが Up の状態である必要のある時間 (ミリ秒単位)
other_config:bond-rebalance-interval=10000
ボンディングメンバー間のリバランシングフローの間隔 (ミリ秒単位)。無効にするにはゼロに設定します。

重要

Linux のボンディングをプロバイダーネットワークと併用してパケットのドロップやパフォーマンス上の問題が発生した場合には、スタンバイインターフェースで Large Receive Offload (LRO) を無効にすることを検討してください。
Linux ボンディングを OVS ボンディングに追加するのは避けてください。ポートフラッピングが発生したり、接続が切れたりする可能性があります。これは、スタンバイインターフェースを介したパケットループが原因です。

付録H 改訂履歴

改訂履歴
改訂 8.0-0.1Sun Apr 24 2016Red Hat Localization Services
翻訳ファイルを XML ソースバージョン 8.0-0 と同期
改訂 8.0-0Tue Nov 24 2015Dan Macpherson
OpenStack Platform 8 ベータ版リリース