Red Hat Training

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

第5章 コンテナーレジストリー情報の設定

コンテナー化されたオーバークラウドには、必要なコンテナーイメージを含むレジストリーへのアクセスが必要です。本章では、Red Hat OpenStack Platform 向けのコンテナーイメージを使用するためのレジストリーおよびオーバークラウドの設定の準備方法について説明します。

本ガイドでは、レジストリーを使用するためのユースケースをいくつか記載しています。これらのユースケースの 1 つを試す前には、イメージを準備するコマンドの使用方法をよく理解しておくことを推奨します。詳しくは、「container image prepare コマンドの使用方法」を参照してください。

レジストリーの方法の選択

Red Hat OpenStack Platform は以下のレジストリータイプをサポートしています。

リモートレジストリー
オーバークラウドは、registry.access.redhat.com から直接コンテナーイメージをプルします。これは、初期設定を生成するための最も簡単な方法ですが、それぞれのオーバークラウドノードが Red Hat Container Catalog から各イメージを直接プルするので、ネットワークの輻輳が生じてデプロイメントが遅くなる可能性があります。また、Red Hat Container Catalog にアクセスするためのインターネットアクセスが 全オーバークラウドノードに必要です。
ローカルレジストリー
アンダークラウドにローカルレジストリーを作成し、registry.access.redhat.com からプルしたイメージを同期します。オーバークラウドは、アンダークラウドからコンテナーイメージをプルします。この方法では、内部にレジストリーを保管することが可能なので、デプロイメントを迅速化してネットワークの輻輳を軽減することができます。ただし、アンダークラウドは基本的なレジストリーとしてのみ機能し、コンテナーイメージのライフサイクル管理は限定されます。
Satellite サーバー
Red Hat Satellite 6 サーバーを介して、コンテナーイメージの全アプリケーションライフサイクルを管理し、イメージを公開します。オーバークラウドは、Satellite サーバーからイメージをプルします。この方法は、Red Hat OpenStack Platform コンテナーを保管、管理、デプロイするためのエンタープライズ級のソリューションを提供します。

上記のリストから方法を選択し、レジストリー情報の設定を続けます。

5.1. container image prepare コマンドの使用方法

本項では、openstack overcloud container image prepare コマンドの使用方法について説明します。これには、このコマンドのさまざまなオプションについての概念的な情報も含まれます。このコマンドを使用する適切なユースケースとエンドツーエンドの手順は、レジストリーの方法の選択に記載しています。

オーバークラウド用のコンテナーイメージ環境ファイルの生成

openstack overcloud container image prepare コマンドの主要な用途の 1 つに、オーバークラウドが使用するイメージの一覧が記載されたファイルの作成があります。このファイルは、 openstack overcloud deploy などのオーバークラウドのデプロイのコマンドで追加します。openstack overcloud container image prepare コマンドは、この機能に以下のオプションを使用します。

--output-env-file
作成される環境ファイルの名前を定義します。

以下のスニペットは、このファイルの内容の例を示しています。

parameter_defaults:
  DockerAodhApiImage: registry.access.redhat.com/rhosp12/openstack-aodh-api:latest
  DockerAodhConfigImage: registry.access.redhat.com/rhosp12/openstack-aodh-api:latest
...

インポート方法に対応したコンテナーイメージ一覧の生成

OpenStack Platform コンテナーイメージを異なるレジストリーソースにインポートする必要がある場合には、イメージの一覧を生成することができます。この一覧の構文は主に、アンダークラウド上のコンテナーレジストリーにコンテナーをインポートするのに使用されますが、Red Hat Satellite 6 などの別の方法に適した形式の一覧に変更することができます。

openstack overcloud container image prepare コマンドでは、この機能に以下のオプションを使用します。

--output-images-file
作成されるインポート一覧のファイル名を定義します。

このファイルの内容の例を以下に示します。

container_images:
- imagename: registry.access.redhat.com/rhosp12/openstack-aodh-api:latest
- imagename: registry.access.redhat.com/rhosp12/openstack-aodh-evaluator:latest
...

コンテナーイメージの名前空間の設定

--output-env-file--output-images-file のオプションには、作成されるイメージの場所を生成するための名前空間が必要です。openstack overcloud container image prepare コマンドでは、以下のオプションを使用して、プルするコンテナーイメージの場所を設定します。

--namespace
コンテナーイメージ用の名前空間を定義します。これには通常、ホスト名または IP アドレスにディレクトリーを付けて指定します。
--prefix
イメージ名の前に追加するプレフィックスを定義します。

その結果、director は以下のような形式のイメージ名を生成します。

  • [NAMESPACE]/[PREFIX][IMAGE NAME]

コンテナーイメージタグの設定

openstack overcloud container image prepare コマンドは、デフォルトでは各コンテナーイメージに latest タグを使用しますが、以下のオプションを使用して、イメージのバージョンに特定のタグを選択することが可能です。

--tag
全イメージ用のタグを設定します。すべての OpenStack Platform コンテナーイメージで、同じタグを使用してバージョンの同期性を提供します。

openstack overcloud container image tag discover コマンドを使用して、イメージ用の最新バージョンタグを確認することもできます。以下に例を示します。

$ sudo openstack overcloud container image tag discover \
  --image registry.access.redhat.com/rhosp12/openstack-base:latest \
  --tag-from-label version-release

このコマンドは、openstack-base イメージの version-release ラベルをベースにして、そのイメージに利用可能なタグをチェックし、最新バージョンのタグを出力します。

重要

タグ検出のコマンドは sudo アクセスで実行する必要があります。このコマンドは、sudo 権限を必要とする docker をサブプロセスとして使用します。

5.2. その他のサービス用のコンテナーイメージの追加

director はコアの OpenStack Platform サービス [1]一部の追加の機能は、追加のコンテナーイメージが必要なサービスを使用します。これらのサービスは、環境ファイルで有効化します。openstack overcloud container image prepare コマンドは、以下のオプションを使用して環境ファイルとそれらの対応するコンテナーイメージを追加します。

-e
追加のコンテナーイメージを有効化するための環境ファイルを指定します。
注記

デプロイメントに環境ファイルを追加する方法については、「オーバークラウド作成時の環境ファイルの追加」を参照してください。

以下の表は、コンテナーイメージを使用する追加のサービスのサンプル一覧とそれらの対応する環境ファイルがある /usr/share/openstack-tripleo-heat-templates ディレクトリー内の場所をまとめています。

サービス環境ファイル

Ceph Storage

environments/ceph-ansible/ceph-ansible.yaml

Collectd

environments/services-docker/collectd.yaml

Congress

environments/services-docker/congress.yaml

Fluentd

environments/services-docker/fluentd-client.yaml

OpenStack Bare Metal (ironic)

environments/services-docker/ironic.yaml

OpenStack Data Processing (sahara)

environments/services-docker/sahara.yaml

OpenStack EC2-API

environments/services-docker/ec2-api.yaml

Sensu

environments/services-docker/sensu-client.yaml

以下の項には、追加するサービスの例を記載します。

Ceph Storage

Red Hat Ceph Storage クラスターをオーバークラウドでデプロイする場合には、/usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml 環境ファイルを追加する必要があります。このファイルは、オーバークラウドで、コンテナー化されたコンポーザブルサービスを有効化します。director は、これらのサービスが有効化されていることを確認した上で、それらのイメージを準備する必要があります。

この環境ファイルに加えて、Ceph Storage コンテナーの場所を定義する必要があります。これは、OpenStack Platform サービスの場所とは異なります。--set オプションを使用して以下のパラメーターを Ceph Storage 固有に設定してください。

--set ceph_namespace
Ceph Storage コンテナーイメージ用の名前空間を定義します。これは、--namespace オプションと同様に機能します。
--set ceph_image
Ceph Storage コンテナーイメージの名前を定義します。通常これは、rhceph-2-rhel7 です。
--set ceph_tag
Ceph Storage コンテナーイメージに使用するタグを定義します。これは、--tag オプションと同じように機能します。

以下のスニペットは、コンテナーイメージファイル内に Ceph Storage が含まれている例です。

$ openstack overcloud container image prepare \
  ...
  -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \
  --set ceph_namespace=registry.access.redhat.com/rhceph \
  --set ceph_image=rhceph-2-rhel7 \
  --set ceph_tag=<CEPH_TAG>
  ...

OpenStack Bare Metal (ironic)

オーバークラウドで OpenStack Bare Metal (ironic) をデプロイする場合には、/usr/share/openstack-tripleo-heat-templates/environments/services-docker/ironic.yaml 環境ファイルを追加して、director がイメージを準備できるようにする必要があります。以下のスニペットは、この環境ファイルの追加方法の例を示しています。

$ openstack overcloud container image prepare \
  ...
  -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/ironic.yaml \
  ...

OpenStack Data Processing (sahara)

オーバークラウドで OpenStack Data Processing (sahara) をデプロイする場合には、/usr/share/openstack-tripleo-heat-templates/environments/services-docker/sahara.yaml 環境ファイルを追加して、director がイメージを準備できるようにする必要があります。以下のスニペットは、この環境ファイルの追加方法の例を示しています。

$ openstack overcloud container image prepare \
  ...
  -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/sahara.yaml \
  ...

5.3. リモートレジストリーを使用するためのオーバークラウド設定

Red Hat では、オーバークラウドのコンテナーイメージを registry.access.redhat.com でホストしています。リモートレジストリーからイメージをプルする方法では、レジストリーはすでに設定済みで、必要なのはプルするイメージの URL と名前空間だけなので、最も簡単です。ただし、オーバークラウドの作成中には、オーバークラウドノードがリモートリポジトリーからすべてのイメージをプルするので、外部接続で輻輳が生じる場合があります。これが問題となる場合には、以下のいずれかの手段を取ることができます。

イメージを直接 registry.access.redhat.com からオーバークラウドデプロイメントにプルするには、イメージパラメーターを指定するための環境ファイルが必要となります。以下のコマンドにより、この環境ファイルが自動的に作成されます。

  1. 最新のイメージのタグを確認します。

    $ source ~/stackrc
    (undercloud) $ sudo openstack overcloud container image tag discover \
      --image registry.access.redhat.com/rhosp12/openstack-base:latest \
      --tag-from-label version-release

    このコマンドの出力を、以下の <TAG> の値に使います。

  2. 環境ファイルを作成します。

    (undercloud) $ openstack overcloud container image prepare \
      --namespace=registry.access.redhat.com/rhosp12 \
      --prefix=openstack- \
      --tag=<TAG> \
      --output-env-file=/home/stack/templates/overcloud_images.yaml

    任意のサービス用の環境ファイルを指定するには、-e オプションを使用します。「container image prepare コマンドの使用方法」「その他のサービス用のコンテナーイメージの追加」を参照してください。

    Ceph Storage を使用する場合には、「container image prepare コマンドの使用方法」の「Ceph Storage」に記載した追加のパラメーターを含めてください。

  3. これで、イメージの場所が記載された overcloud_images.yaml 環境ファイルがアンダークラウド上に作成されます。このファイルをデプロイメントで指定します。

レジストリーの設定を使用する準備が整いました。「6章CLI ツールを使用した基本的なオーバークラウドの設定」に記載の手順に進んでください。

5.4. ローカルレジストリーとしてアンダークラウドを使用するためのオーバークラウドの設定

アンダークラウド上でローカルレジストリーを設定して、オーバークラウドのコンテナーイメージを保管することができます。この方法は、以下の操作を伴います。

  • director が、registry.access.redhat.com から各イメージをプルします。
  • director がオーバークラウドを作成します。
  • オーバークラウドの作成中に、ノードが適切なイメージをアンダークラウドからプルします。

これにより、コンテナーイメージのネットワークトラフィックは、 内部ネットワーク内に留まるので、外部ネットワークとの接続で輻輳が発生せず、デプロイメントプロセスを迅速化することができます。

イメージを registry.access.redhat.com からローカルレジストリーにプルするには、以下の手順を実行します。

  1. 最新のイメージのタグを確認します。

    $ source ~/stackrc
    (undercloud) $ sudo openstack overcloud container image tag discover \
      --image registry.access.redhat.com/rhosp12/openstack-base:latest \
      --tag-from-label version-release

    このコマンドの出力を、以下の <TAG> の値に使います。

  2. ローカルレジストリーにイメージをプルするためのテンプレートを作成します。

    (undercloud) $ openstack overcloud container image prepare \
      --namespace=registry.access.redhat.com/rhosp12 \
      --prefix=openstack- \
      --tag=<TAG> \
      --output-images-file /home/stack/local_registry_images.yaml

    任意のサービス用の環境ファイルを指定するには、-e オプションを使用します。「container image prepare コマンドの使用方法」「その他のサービス用のコンテナーイメージの追加」を参照してください。

    Ceph Storage を使用する場合には、「container image prepare コマンドの使用方法」の「Ceph Storage」に記載した追加のパラメーターを含めてください。

    注記

    このステップの openstack overcloud container image prepare コマンドは、registry.access.redhat.com 上のレジストリーをターゲットにして、アンダークラウドにインポートするイメージのリストを生成します。ここでは、後半のステップで使用する openstack overcloud container image prepare コマンドとは異なる値を指定します。

  3. これで、コンテナーイメージの情報が含まれた local_registry_images.yaml という名前のファイルが作成されます。local_registry_images.yaml ファイルを使ってイメージをプルします。

    (undercloud) $ sudo openstack overcloud container image upload \
      --config-file  /home/stack/local_registry_images.yaml \
      --verbose

    ネットワークおよびアンダークラウドディスクの速度によっては、必要なイメージをプルするのに時間がかかる場合があります。

    注記

    コンテナーイメージは、およそ 10 GB のディスク領域を使用します。

  4. ローカルイメージの名前空間を特定します。名前空間は、以下のパターンを使用します。

    <REGISTRY IP ADDRESS>:8787/rhosp12

    undercloud.conf ファイルの local_ip パラメーターであらかじめ設定した、アンダークラウドの IP アドレスを使用します。または、以下のコマンドを使用して完全な名前空間を取得します。

    (undercloud) $ docker images | grep -v redhat.com | grep -o '^.*rhosp12' | sort -u
  5. アンダークラウド上のローカルレジストリーで使用するためのテンプレートを作成します。以下に例を示します。

    (undercloud) $ openstack overcloud container image prepare \
      --namespace=192.168.24.1:8787/rhosp12 \
      --prefix=openstack- \
      --tag=<TAG> \
      --output-env-file=/home/stack/templates/overcloud_images.yaml

    任意のサービス用の環境ファイルを指定するには、-e オプションを使用します。「container image prepare コマンドの使用方法」「その他のサービス用のコンテナーイメージの追加」を参照してください。

    Ceph Storage を使用する場合には、「container image prepare コマンドの使用方法」の「Ceph Storage」に記載した追加のパラメーターを含めてください。

    注記

    このステップの openstack overcloud container image prepare コマンドは、アンダークラウド上のレジストリーをターゲットにして、オーバークラウドで使用するイメージのリストを生成します。ここでは、前のステップで使用した openstack overcloud container image prepare コマンドとは異なる値を指定します。

  6. これで、アンダークラウド上のイメージの場所が記載された overcloud_images.yaml 環境ファイルが作成されます。このファイルをデプロイメントで指定します。

レジストリーの設定を使用する準備が整いました。「6章CLI ツールを使用した基本的なオーバークラウドの設定」に記載の手順に進んでください。

5.5. Satellite サーバーをイメージレジストリーとする設定

警告

Red Hat Satellite 6 では、名前が 30 文字を超えるコンテナーイメージは同期されないという既知の問題があります。この問題は、Satellite 6.2 の次のマイナーリリースで修正される予定です。この問題のホットフィックスは、現在提供されています (詳しくは、BZ#1424689 を参照してください)。

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

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

イメージを registry.access.redhat.com からローカルレジストリーにプルするには、以下の手順を実行します。

  1. イメージをローカルレジストリーにプルするためのテンプレートを作成します。

    $ source ~/stackrc
    (undercloud) $ openstack overcloud container image prepare \
      --namespace=rhosp12 \
      --prefix=openstack- \
      --output-images-file /home/stack/satellite_images \

    任意のサービス用の環境ファイルを指定するには、-e オプションを使用します。「container image prepare コマンドの使用方法」「その他のサービス用のコンテナーイメージの追加」を参照してください。

    Ceph Storage を使用する場合には、「container image prepare コマンドの使用方法」の「Ceph Storage」に記載した追加のパラメーターを含めてください。

    注記

    このステップの openstack overcloud container image prepare コマンドは、registry.access.redhat.com 上のレジストリーをターゲットにして、イメージのリストを生成します。ここでは、後半のステップで使用する openstack overcloud container image prepare コマンドとは異なる値を指定します。

  2. これで、コンテナーイメージの情報が含まれた satellite_images という名前のファイルが作成されます。このファイルを使用して、コンテナーイメージを Satellite 6 サーバーに同期します。
  3. satellite_images ファイルから YAML 固有の情報を削除して、イメージ一覧のみが記載されたフラットファイルに変換します。この操作は、以下の sed コマンドで実行します。

    (undercloud) $ sed -i "s/- imagename: //g" ~/satellite_images
    (undercloud) $ sed -i "s/:.*//g" ~/satellite_images
    (undercloud) $ sed -i "1d" ~/satellite_images

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

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

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

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

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

    $ hammer repository create \
      --organization "ACME" \
      --product "OSP12 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name rhosp12/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 "OSP12 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name $IMAGE \
      --name $IMAGENAME ; done < satellite_images
  8. コンテナーイメージを同期します。

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

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

    注記

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

  9. base イメージに利用可能なタグを確認します。

    $ hammer docker tag list --repository "base" \
      --organization "ACME" \
      --product "OSP12 Containers"

    これにより、OpenStack Platform コンテナーイメージのタグが表示されます。タグを選択し、この後のステップで使用するために書き留めておきます。

  10. アンダークラウドに戻り、Satellite サーバー上のイメージ用に環境ファイルを生成します。これには、以下のデータが使われます。

    • --namespace: Satellite サーバー上のレジストリーの URL およびポート。Red Hat Satellite のデフォルトのレジストリーポートは 5000 です。例: --namespace=satellite6.example.com:5000
    • --prefix=: プレフィックスは、Satellite 6 組織およびコンテナーを保管する製品名に基づきます。たとえば、組織名が ACME の場合、プレフィックスは acme-osp12_containers- となります。
    • --tag=<TAG>: 前のステップで記録した OpenStack Platform コンテナーイメージのタグ
    • -e: このオプションを使用して、オーバークラウド用に追加のサービスの各環境ファイルを指定します。 詳しい情報は、「container image prepare コマンドの使用方法」「その他のサービス用のコンテナーイメージの追加」を参照してください。

      環境ファイルを生成するコマンドの例を以下に示します。

      (undercloud) $ openstack overcloud container image prepare \
        --namespace=satellite6.example.com:5000 \
        --prefix=acme-osp12_containers- \
        --tag=<TAG> \
        --output-env-file=/home/stack/templates/overcloud_images.yaml

      Ceph Storage を使用する場合は、以下の追加パラメーターを使います。

    • --set ceph_namespace: Ceph Storage イメージ用に設定する Satellite サーバー上のレジストリーの URL およびポート。これは、--namespace と同じ値にする必要があります。
    • --set ceph_image: Satellite サーバー上の Ceph Storage イメージの名前。これは、OpenStack Platform のイメージと同じ命名規則に従います。例: acme-osp12_containers-rhceph-2-rhel7
    • --set ceph_tag: Ceph Storage コンテナーイメージのタグ。latest に設定します。

      詳しい説明は 「container image prepare コマンドの使用方法」の「Ceph Storage」を参照してください。

      注記

      このステップの openstack overcloud container image prepare コマンドは、Satellite サーバーをターゲットにします。ここでは、前のステップで使用した openstack overcloud container image prepare コマンドとは異なる値を指定します。

  11. これで、Satellite サーバー上のイメージの場所が記載された overcloud_images.yaml 環境ファイルが作成されます。このファイルをデプロイメントで指定します。

レジストリーの設定を使用する準備が整いました。「6章CLI ツールを使用した基本的なオーバークラウドの設定」に記載の手順に進んでください。



[1] Openstack Networking (neutron)、OpenStack Block Storage (cinder)、 OpenStack Shared File System (manila) を除きます。これらのサービスは、Red Hat OpenStack Platform 12 ではデフォルトでコンテナーにデプロイされません。これらのサービスでは、コンテナーは、テクノロジープレビューとして利用可能です。