第8章 glance イメージの nova への事前キャッシュ

ローカルの一時ストレージを使用するように OpenStack Compute を設定する場合、インスタンスのデプロイメントを迅速化するために glance イメージがキャッシュされます。インスタンスに必要なイメージがまだキャッシュされていない場合は、インスタンスの作成時にコンピュートノードのローカルディスクにダウンロードされます。

glance イメージのダウンロードプロセスに要する時間は、イメージのサイズおよび帯域幅やレイテンシー等のネットワーク特性によって変動します。

インスタンスの起動を試みる際にローカルの Ceph クラスターでイメージが利用できない場合は、以下のメッセージと共にインスタンスの起動に失敗します。

Build of instance 3c04e982-c1d1-4364-b6bd-f876e399325b aborted: Image 20c5ff9d-5f54-4b74-830f-88e78b9999ed is unacceptable: No image locations are accessible

Compute サービスのログには以下のメッセージが記録されます。

'Image %s is not on my ceph and [workarounds]/ never_download_image_if_on_rbd=True; refusing to fetch and upload.',

インスタンスの起動に失敗する原因は、nova.conf 設定ファイルの never_download_image_if_on_rbd パラメーターです。DCN デプロイメントの場合、このパラメーターはデフォルトでは true に設定されています。dcn-hci.yaml ファイルの heat パラメーター NovaDisableImageDownloadToRbd を使用して、この値を制御することができます。

オーバークラウドのデプロイ前に NovaDisableImageDownloadToRbd の値を false に設定した場合の動作は、以下のようになります。

  • イメージがローカルで利用できない場合、Compute サービス (nova) は central サイトで利用可能なイメージを自動的にストリーミングします。
  • glance イメージからの COW コピーは使用されません。
  • イメージを使用するインスタンスの数により、Compute (nova) ストレージに同じイメージのコピーが複数含まれる場合があります。
  • central サイトへの WAN リンクと nova ストレージプールの両方が飽和状態になる可能性があります。

Red Hat では、この値を true に設定したままにし、インスタンスの起動前に必要なイメージがローカルで利用できるようにすることを推奨します。イメージをエッジサイトで利用できるようにする方法については、「新規サイトへのイメージのコピー」を参照してください。

ローカルにあるイメージに関して、tripleo_nova_image_cache.yml Ansible Playbook を使用して、共通的に使用されるイメージや今後デプロイする可能性の高いイメージを事前キャッシュして、仮想マシンの作成を迅速化することができます。

8.1. tripleo_nova_image_cache.yml Ansible Playbook の実行

前提条件

  • シェル環境での正しい API への認証用クレデンシャル

各手順で提供されるコマンドの前に、正しい認証ファイルが読み込まれている必要があります。

手順

  1. スタック用の Ansible インベントリーファイルを作成します。複数のスタックをコンマ区切りリストで指定して、複数サイトのイメージをキャッシュすることができます。

    $ source stackrc
    
    $ tripleo-ansible-inventory --plan central,dcn0,dc1 \
    --static-yaml-inventory inventory.yaml
  2. 事前キャッシュするイメージの ID 一覧を作成します。

    1. 利用可能なイメージの完全な一覧を取得します。

      $ source centralrc
      
      $ openstack image list
      +--------------------------------------+---------+--------+
      | ID                                   | Name    | Status |
      +--------------------------------------+---------+--------+
      | 07bc2424-753b-4f65-9da5-5a99d8383fe6 | image_0 | active |
      | d5187afa-c821-4f22-aa4b-4e76382bef86 | image_1 | active |
      +--------------------------------------+---------+--------+
    2. nova_cache_args.yml という名前で Ansible Playbook の引数ファイルを作成し、事前キャッシュするイメージの ID を追加します。

      ---
      tripleo_nova_image_cache_images:
        - id: 07bc2424-753b-4f65-9da5-5a99d8383fe6
        - id: d5187afa-c821-4f22-aa4b-4e76382bef86
  3. tripleo_nova_image_cache.yml Ansible Playbook を実行します。

    $ source centralrc
    
    $ ansible-playbook -i inventory.yaml \
    --extra-vars "@nova_cache_args.yml" \
    /usr/share/ansible/tripleo-playbooks/tripleo_nova_image_cache.yml