Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第3章 director インストールの準備

3.1. アンダークラウドの準備

director のインストールには、以下の項目が必要です。

  • コマンドを実行するための非 root ユーザー
  • イメージとテンプレートを管理するためのディレクトリー
  • 解決可能なホスト名
  • Red Hat サブスクリプション
  • イメージの準備および director のインストールを行うためのコマンドラインツール

手順

  1. アンダークラウドに root ユーザーとしてログインします。
  2. stack ユーザーを作成します。

    [root@director ~]# useradd stack
  3. そのユーザーのパスワードを設定します。

    [root@director ~]# passwd stack
  4. sudo を使用する場合にパスワードを要求されないようにします。

    [root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@director ~]# chmod 0440 /etc/sudoers.d/stack
  5. 新規作成した stack ユーザーに切り替えます。

    [root@director ~]# su - stack
    [stack@director ~]$
  6. director はシステムのイメージと Heat テンプレートを使用して、オーバークラウド環境を構築します。これらのファイルを整理するには、イメージとテンプレート用にディレクトリーを作成するように推奨します。

    [stack@director ~]$ mkdir ~/images
    [stack@director ~]$ mkdir ~/templates
  7. アンダークラウドのベースおよび完全なホスト名を確認します。

    [stack@director ~]$ hostname
    [stack@director ~]$ hostname -f
  8. 上記のコマンドのいずれかで正しいホスト名が出力されなかったり、エラーが表示される場合には、hostnamectl でホスト名を設定します。

    [stack@director ~]$ sudo hostnamectl set-hostname manager.example.com
    [stack@director ~]$ sudo hostnamectl set-hostname --transient manager.example.com
  9. director では、/etc/hosts にシステムのホスト名とベース名も入力する必要があります。/etc/hosts の IP アドレスは、アンダークラウドのパブリック API に使用する予定のアドレスと一致する必要があります。たとえば、システムの名前が manager.example.com で、IP アドレスに 10.0.0.1 を使用する場合には、/etc/hosts に以下のように入力する必要があります。

    10.0.0.1  manager.example.com manager
  10. Red Hat コンテンツ配信ネットワークまたは Red Hat Satellite のどちらかにシステムを登録します。たとえば、プロンプトが表示されたら、カスタマーポータルのユーザー名とパスワードを使用してコンテンツ配信ネットワークに登録します。

    [stack@director ~]$ sudo subscription-manager register
  11. Red Hat OpenStack Platform director のエンタイトルメントプール ID を検索します。以下に例を示します。

    [stack@director ~]$ sudo subscription-manager list --available --all --matches="Red Hat OpenStack"
    Subscription Name:   Name of SKU
    Provides:            Red Hat Single Sign-On
                         Red Hat Enterprise Linux Workstation
                         Red Hat CloudForms
                         Red Hat OpenStack
                         Red Hat Software Collections (for RHEL Workstation)
                         Red Hat Virtualization
    SKU:                 SKU-Number
    Contract:            Contract-Number
    Pool ID:             Valid-Pool-Number-123456
    Provides Management: Yes
    Available:           1
    Suggested:           1
    Service Level:       Support-level
    Service Type:        Service-Type
    Subscription Type:   Sub-type
    Ends:                End-date
    System Type:         Physical
  12. Pool ID の値を特定して、Red Hat OpenStack Platform 14 のエンタイトルメントをアタッチします。

    [stack@director ~]$ sudo subscription-manager attach --pool=Valid-Pool-Number-123456
  13. デフォルトのリポジトリーをすべて無効にしてから、必要な Red Hat Enterprise Linux リポジトリーを有効にします。

    [stack@director ~]$ sudo subscription-manager repos --disable=*
    [stack@director ~]$ sudo subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms --enable=rhel-ha-for-rhel-7-server-rpms --enable=rhel-7-server-openstack-14-rpms

    これらのリポジトリーには、director のインストールに必要なパッケージが含まれます。

  14. システムで更新を実行して、ベースシステムパッケージを最新の状態にします。

    [stack@director ~]$ sudo yum update -y
    [stack@director ~]$ sudo reboot
  15. director のインストールと設定を行うためのコマンドラインツールをインストールします。

    [stack@director ~]$ sudo yum install -y python-tripleoclient
  16. Ceph Storage ノードを使ってオーバークラウドを作成する場合は、さらに ceph-ansible パッケージをインストールします。

    [stack@director ~]$ sudo yum install -y ceph-ansible

3.2. コンテナーイメージの準備

アンダークラウドの設定には、イメージの取得先およびその保存方法を定義するための初期レジストリーの設定が必要です。以下のプロセスで、コンテナーイメージを準備するための環境ファイルを生成およびカスタマイズする方法を説明します。

手順

  1. アンダークラウドホストに stack ユーザーとしてログインします。
  2. デフォルトのコンテナーイメージ準備ファイルを生成します。

    $ openstack tripleo container image prepare default \
      --local-push-destination \
      --output-env-file containers-prepare-parameter.yaml

    上記のコマンドでは、以下の追加オプションを使用しています。

    • --local-push-destination: コンテナーイメージの保管場所として、アンダークラウド上のレジストリーを設定します。つまり、director は必要なイメージを Red Hat Container Catalog からプルし、それをアンダークラウド上のレジストリーにプッシュします。アンダークラウドのインストール時に、director はこのレジストリーをコンテナーイメージのソースとして使用します。Red Hat Container Catalog から直接プルする場合には、このオプションを省略します。
    • --output-env-file: 環境ファイルの名前です。このファイルには、アンダークラウド用コンテナーイメージを準備するためのパラメーターが含まれます。ここでは、ファイル名を containers-prepare-parameter.yaml としています。

      注記

      オーバークラウドをデプロイする場合にも、コンテナーイメージのソースを定義するのに containers-prepare-parameter.yaml ファイルを使用することができます。

  3. containers-prepare-parameter.yaml を編集し、必要に応じて変更を加えます。

3.3. コンテナーイメージ準備のパラメーター

コンテナー準備用のこのデフォルトファイル (containers-prepare-parameter.yaml) には、ContainerImagePrepare Heat パラメーターが含まれます。このパラメーターで、イメージのセットを準備するためのさまざまな設定を定義します。

parameter_defaults:
  ContainerImagePrepare:
  - (strategy one)
  - (strategy two)
  - (strategy three)
  ...

それぞれの設定では、サブパラメーターのセットにより使用するイメージやイメージの使用方法を定義することができます。ContainerImagePrepare の各設定で使用するサブパラメーターの一覧を、以下の表に示します。

パラメーター説明

modify_append_tag

目的のイメージのタグに追加する文字列

excludes

除外フィルターに使用するイメージ名に含まれる文字列のリスト

includes

イメージ名に含まれる文字列のリスト。少なくとも 1 つのイメージ名が一致している必要があります。includes パラメーターを指定すると、excludes の設定はすべて無視されます。

modify_role

イメージのアップロード中 (ただし目的のレジストリーにプッシュする前) に実行する Ansible ロール名の文字列

modify_vars

modify_role に渡す変数のディクショナリー

modify_only_with_labels

変更するイメージを絞り込むのに使用するイメージラベルのディクショナリー。イメージが定義したラベルと一致する場合には、director はそのイメージを変更プロセスに含めます。

push_destination

アップロードプロセス中にイメージをプッシュするレジストリーの名前空間。このパラメーターで名前空間を指定すると、すべてのイメージパラメーターでもこの名前空間が使用されます。true に設定すると、push_destination はアンダークラウドレジストリーの名前空間に設定されます。

pull_source

元のコンテナーイメージをプルするソースレジストリー

set

初期イメージの取得場所を定義する、キー:値 定義のディクショナリー

tag_from_label

得られたイメージをタグ付けするラベルパターンを定義します。通常は、\{version}-\{release} に設定します。

set パラメーターには、複数の キー:値 定義を設定することができます。それらのキーの一覧を、以下の表に示します。

キー説明

ceph_image

Ceph Storage コンテナーイメージの名前

ceph_namespace

Ceph Storage コンテナーイメージの名前空間

ceph_tag

Ceph Storage コンテナーイメージのタグ

name_prefix

各 OpenStack サービスイメージの接頭辞

name_suffix

各 OpenStack サービスイメージの接尾辞

namespace

各 OpenStack サービスイメージの名前空間

neutron_driver

使用する OpenStack Networking (neutron) コンテナーを定義するのに使用するドライバー。標準の neutron-server コンテナーに設定するには、null 値を使用します。OVN ベースのコンテナーを使用するには、ovn に設定します。OpenDaylight ベースのコンテナーを使用するには、odl に設定します。

tag

プルするイメージを識別するタグ

注記

set セクションには、openshift_ で始まるさまざまなパラメーターを含めることができます。これらのパラメーターは、「OpenShift on OpenStack」を用いるさまざまなシナリオに使用されます。

3.4. イメージ準備エントリーの階層化

ContainerImagePrepare の値は YAML リストです。したがって、複数のエントリーを指定することができます。以下の例で、2 つのエントリーを指定するケースを説明します。この場合、director はすべてのイメージの最新バージョンを使用しますが、nova-api イメージについてのみ、14.0-44 とタグ付けされたバージョンを使用します。

ContainerImagePrepare:
- tag_from_label: "{version}-{release}"
  push_destination: true
  excludes:
  - nova-api
  set:
    namespace: registry.access.redhat.com/rhosp14
    name_prefix: openstack-
    name_suffix: ''
    tag: latest
- push_destination: true
  includes:
  - nova-api
  set:
    namespace: registry.access.redhat.com/rhosp14
    tag: 14.0-44

includes および excludes のエントリーで、それぞれのエントリーでのイメージ絞り込み方法をコントロールします。includes 設定と一致するイメージが、excludes と一致するイメージに優先します。一致するとみなされるためには、イメージ名に設定値が含まれていなければなりません。

3.5. 準備プロセスにおけるイメージの変更

準備プロセス中にイメージを変更して必要な修正を加え、直ちにこれらの変更を反映してデプロイすることが可能です。イメージを変更するユースケースを以下に示します。

  • デプロイメント前にテスト中の修正でイメージが変更される、継続的インテグレーションのパイプラインの一部として。
  • ローカルの変更をテストおよび開発のためにデプロイしなければならない、開発ワークフローの一部として。
  • 変更をデプロイしなければならないが、イメージビルドパイプラインでは利用することができない場合 (プロプライエタリーのアドオン、緊急の修正)。

変更が必要な各イメージで Ansible ロールを呼び出して、変更を行います。ロールはソースイメージを取得して必要な変更を行った後に、その結果をタグ付けします。続いて prepare コマンドでイメージをプッシュし、変更したイメージを参照するように heat パラメーターを設定することができます。

Ansible ロール tripleo-modify-image は要求されたロールインターフェースに従い、変更のユースケースに必要な処理を行います。変更は、ContainerImagePrepare パラメーターの modify 固有のキーでコントロールします。

  • modify_role では、変更する各イメージについて呼び出す Ansible ロールを指定します。
  • modify_append_tag は、ソースイメージタグの最後に文字列を追加するのに使用します。これにより、そのイメージが変更されていることが明確になります。すでに push_destination レジストリーに変更されたイメージが含まれている場合には、このパラメーターを使用して変更を省略することもできます。したがって、イメージを変更する場合には、必ず modify_append_tag を変更することを推奨します。
  • modify_vars は、ロールに渡す Ansible 変数のディクショナリーです。

ロール tripleo-modify-image が処理する別のユースケースを選択するには、tasks_from 変数をそのロールで必要なファイルに設定します。

イメージを変更する ContainerImagePrepare エントリーを開発およびテストする場合には、イメージが想定どおりに変更されていることを確認するために、prepare コマンド単体で実行することを推奨します。

sudo openstack tripleo container image prepare \
  -e ~/containers-prepare-parameter.yaml

3.6. コンテナーイメージの既存パッケージの更新

以下のエントリーにより、イメージのパッケージが全て更新されます。ただし、アンダークラウドホストの yum リポジトリー設定が使用されます。

ContainerImagePrepare:
- push_destination: true
  ...
  modify_role: tripleo-modify-image
  modify_append_tag: "-updated"
  modify_vars:
    tasks_from: yum_update.yml
    compare_host_packages: true
    yum_repos_dir_path: /etc/yum.repos.d
  ...

3.7. コンテナーイメージへの追加 RPM ファイルのインストール

RPM ファイルのディレクトリーをインストールすることができます。この機能は、ホットフィックス、ローカルパッケージビルド、またはパッケージリポジトリーからは入手できないパッケージのインストールに役立ちます。たとえば、以下のエントリーにより、centos-binary-nova-compute イメージだけにホットフィックスパッケージがインストールされます。

ContainerImagePrepare:
- push_destination: true
  ...
  includes:
  - nova-compute
  modify_role: tripleo-modify-image
  modify_append_tag: "-hotfix"
  modify_vars:
    tasks_from: rpm_install.yml
    rpms_path: /home/stack/nova-hotfix-pkgs
  ...

3.8. カスタム Dockerfile を使用したコンテナーイメージの変更

柔軟性を高めるために、Dockerfile を含むディレクトリーを指定して必要な変更を加えることが可能です。ロールが呼び出されると、Dockerfile.modified ファイルが生成され、これにより FROM ディレクティブが変更され新たな LABEL ディレクティブが追加されます。以下の例では、centos-binary-nova-compute イメージでカスタム Dockerfile が実行されます。

ContainerImagePrepare:
- push_destination: true
  ...
  includes:
  - nova-compute
  modify_role: tripleo-modify-image
  modify_append_tag: "-hotfix"
  modify_vars:
    tasks_from: modify_image.yml
    modify_dir_path: /home/stack/nova-custom
  ...

/home/stack/nova-custom/Dockerfile の例を以下に示します。USER root ディレクティブを実行した後は、元のイメージのデフォルトユーザーに戻す必要があります。

FROM docker.io/tripleomaster/centos-binary-nova-compute:latest

USER root

COPY customize.sh /tmp/
RUN /tmp/customize.sh

USER "nova"

3.9. コンテナーイメージ管理用 Satellite サーバーの準備

Red Hat Satellite 6 には、レジストリーの同期機能が備わっています。これにより、複数のイメージを Satellite サーバーにプルし、アプリケーションライフサイクルの一環として管理することができます。また、他のコンテナー対応システムも Satellite をレジストリーとして使うことができます。コンテナーイメージ管理の詳細は、『Red Hat Satellite 6 コンテンツ管理ガイド』「コンテナーイメージの管理」を参照してください。

以下の手順は、Red Hat Satellite 6 の hammer コマンドラインツールを使用した例を示しています。組織には、例として ACME という名称を使用しています。この組織は、実際に使用する Satellite 6 の組織に置き換えてください。

手順

  1. デフォルトのオーバークラウドおよびアンダークラウド用に利用可能な全コンテナーイメージの一覧を作成します。

    $ openstack overcloud container image prepare \
      -r /usr/share/openstack-tripleo-heat-templates/roles_data.yaml \
      --output-images-file /home/stack/satellite_images_overcloud
    $ openstack overcloud container image prepare \
      -r /usr/share/openstack-tripleo-heat-templates/roles_data_undercloud.yaml \
      --output-images-file /home/stack/satellite_images_undercloud
  2. これで、コンテナーイメージ情報が含まれる 2 つのファイルが作成されます。このファイルを使用して、コンテナーイメージを Satellite 6 サーバーに同期します。
  3. ファイルから YAML 固有の情報を削除して、個別のイメージ一覧のみが記載されたフラットファイルにマージします。この操作は、以下のコマンドで実行します。

    $ awk -F ':' '{if (NR!=1) {gsub("[[:space:]]", ""); print $2}}' ~/satellite_images_overcloud | sed "s/registry.access.redhat.com\///g" > ~/satellite_images_overcloud_names
    $ awk -F ':' '{if (NR!=1) {gsub("[[:space:]]", ""); print $2}}' ~/satellite_images_undercloud | sed "s/registry.access.redhat.com\///g" > ~/satellite_images_undercloud_names
    $ cat ~/satellite_images_overcloud_names ~/satellite_images_undercloud_names | sort | uniq > ~/satellite_images_names

    これにより、Satellite サーバーにプルするイメージのリストが提供されます。

  4. satellite_images_names ファイルを、Satellite 6 の hammer ツールが含まれるシステムにコピーします。あるいは、『Hammer CLI ガイド』に記載の手順に従って、hammer ツールをアンダークラウドにインストールします。
  5. 以下の hammer コマンドを実行して、実際の Satellite 組織に新規製品 (OSP14 Containers) を作成します。

    $ hammer product create \
      --organization "ACME" \
      --name "OSP14 Containers"

    このカスタム製品に、イメージを保管します。

  6. 製品にベースコンテナーイメージを追加します。

    $ hammer repository create \
      --organization "ACME" \
      --product "OSP14 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name rhosp14/openstack-base \
      --name base
  7. satellite_images ファイルからオーバークラウドのコンテナーイメージを追加します。

    $ while read IMAGE; do \
      IMAGENAME=$(echo $IMAGE | cut -d"/" -f2 | sed "s/openstack-//g" | sed "s/:.*//g") ; \
      hammer repository create \
      --organization "ACME" \
      --product "OSP14 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name $IMAGE \
      --name $IMAGENAME ; done < satellite_images_names
  8. コンテナーイメージを同期します。

    $ hammer product synchronize \
      --organization "ACME" \
      --name "OSP14 Containers"

    Satellite サーバーが同期を完了するまで待ちます。

    注記

    設定によっては、hammer から Satellite サーバーのユーザー名およびパスワードが要求される場合があります。設定ファイルを使って自動的にログインするように hammer を設定することができます。詳細は、『Hammer CLI ガイド』「認証」セクションを参照してください。

  9. お使いの Satellite 6 サーバーでコンテンツビューが使われている場合には、新たなバージョンのコンテンツビューを作成してイメージを反映し、アプリケーションライフサイクルの環境に従ってプロモートします。この作業は、アプリケーションライフサイクルの構成状況に大きく依存します。たとえば、ライフサイクルで production という名称の環境を使用していて、その環境でコンテナーイメージを利用可能にする場合には、コンテナーイメージを含むコンテンツビューを作成し、そのコンテンツビューを production 環境にプロモートします。詳細は、『Red Hat Satellite コンテンツ管理ガイド』の「コンテンツビューによるコンテナーイメージの管理」を参照してください。
  10. base イメージに利用可能なタグを確認します。

    $ hammer docker tag list --repository "base" \
      --organization "ACME" \
      --environment "production" \
      --content-view "myosp14" \
      --product "OSP14 Containers"

    このコマンドにより、特定環境のコンテンツビューでの OpenStack Platform コンテナーイメージのタグが表示されます。

  11. アンダークラウドに戻り、Satellite サーバーをソースとして使用して、イメージ準備用のデフォルト環境ファイルを生成します。環境ファイルを生成するコマンドの例を以下に示します。

    (undercloud) $ openstack tripleo container image prepare default \
      --output-env-file containers-prepare-parameter.yaml
    • --output-env-file: 環境ファイルの名前です。このファイルには、アンダークラウド用コンテナーイメージを準備するためのパラメーターが含まれます。ここでは、ファイル名を containers-prepare-parameter.yaml としています。
  12. containers-prepare-parameter.yaml ファイルを編集して以下のパラメーターを変更します。

    • namespace: Satellite サーバー上のレジストリーの URL およびポート。Red Hat Satellite のデフォルトのレジストリーポートは 5000 です。
    • name_prefix: プレフィックスは Satellite 6 の命名規則に基づきます。これは、コンテンツビューを使用するかどうかによって異なります。

      • コンテンツビューを使用する場合、構成は [org]-[environment]-[content view]-[product]- となります (例: acme-production-myosp14-osp14_containers-)。
      • コンテンツビューを使用しない場合、構成は [org]-[product]- となります (例: acme-osp14_containers-)。
    • ceph_namespaceceph_imageceph_tag: Ceph Storage を使用する場合には、Ceph Storage のコンテナーイメージの場所を定義する追加のパラメーターを指定します。ceph_image に Satellite 固有のプレフィックスが追加された点に注意してください。このプレフィックスは、name_prefix オプションと同じ値です。

Satellite 固有のパラメーターが含まれる環境ファイルの例を以下に示します。

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: true
    set:
      ceph_image: acme-production-myosp14-osp14_containers-rhceph-3-rhel7
      ceph_namespace: satellite.example.com:5000
      ceph_tag: latest
      name_prefix: acme-production-myosp14-osp14_containers-
      name_suffix: ''
      namespace: satellite.example.com:5000
      neutron_driver: null
      tag: latest
      ...
    tag_from_label: '{version}-{release}'

アンダークラウドおよびオーバークラウドの両方を作成する際に、この環境ファイルを使用します。