Red Hat OpenStack で、コンテナ化された3rd Party 製品を組み込む方法

Red Hat でソリューションアーキテクトをしている。荒木です。

なんの脈略もない話ですが、最近、『学生症候群』という言葉を知りました。これは、夏休みの宿題等、明確な期日がある事柄に対して、ギリギリまで対応しないという性格を表す言葉だそうで、私の日々のあり方について、まさにこれだ!と合点が行ってしまった感じです。 今日、この時間になって、ようやくブログを更新していることこそ、まさに、学生症候群なのである!と、無意味にドヤッている気分で本日の記事をまとめました。 というか、きっと色々な方に迷惑をかけているので、この性格を改める!...というのは、実際難しいので、仕事のやり方を工夫してできるだけ足を引っ張らないように頑張っていこうと、思う今日のエッセイでした。ではなくて...

気を取り直して、赤帽エンジニア Advent Calendar 2018 の20日目の本記事では、Red Hat OpenStack 環境への3rd Party 製品との組み込み方が、バージョン 13 でおおきく変わりましたので、その方法について簡単にまとめます。尚、本記事に記載している操作内容については、前回紹介しましたADPで紹介されている手順を前提として記載しています。

RHOSP のコンテナ化

Red Hat Openstack Platform は、バージョン12より、OpenStack の各種コンポーネントが、container化されて提供されるようになりました。

一つの大きな理由として、OpenStack は、半年に一回というスピードで、メジャーバージョンアップされてきており、Red Hat は、現在このバージョンに追随する形で、バージョンアップを繰り返して来ていることがあげられます。

OpenStackコンポーネントのバージョン管理に関して、従来のrpmベースの環境構築による構成管理の煩雑化に対して、container化する事で、よりシンプルに構成管理できるようになる期待があります。

また、バージョン10から、提供されている機能で、コンポーネントの柔軟な配置(RHOSP Director では、composable role と読んでいます。)による、機能を分解した配置も行えるようになりましたが、container化により、OpenStackのコード塊と、その配置の簡素化が促される期待もあります。

現在の最新バージョンにあたる、13では、Neutron-Plugin や、cinder-volumeのバックエンドといった、選択的に3rd-patryのソフトウェアが組み込める部分についてもcontainer化が進み、実質、RHOSPで提供される全てのOpenStack のコンポーネントが、container形式で提供されるようになりました。

現在、配布されているcontainerイメージは、下記URLより検索することができます。

3rd Patry ソフトウェアの認定の仕組み

RHOSPの構築または、それを検討いただいた方であれば、ご存知の事だと思いますが、RHOSP は、3rd Patry ソフトウェアとの組み合わせについて、認定を行っています。

Product Documentation for Red Hat OpenStack Certification 1.0

概要を述べますと、RHOSP 環境との組み合わせにおいて、その動作の正常性をテストツールで評価し、相互に認定するという仕組みです。

ここで認定されていない場合、組み込まれた3rd party ソフトウェアとの境界に当たる部分(例えば、neutron の ML2-Plugin)については、Red Hat でサポートを提供することが出来無くなる為、ご注意いただく必要があります。

尚、認定済みソリューションについては、以下にて検索していただくことができます。

ソフトウェアの認定は、各バージョン毎に実施されています。このため、異るRHOSPバージョンで認定がとれている場合であっても、実際に使用するバージョンを対象として、認定がとれているかをかならず確認するようにしてください。認定状況について、確認がとれなかったり、ご判断いただけない場合は、Red Hat までご連絡ください。

3rd Patry ソフトウェアの組み込み方の変化

rpm ベースで提供されていた頃は、3rd party ソフトウェアの提供については、特に明確なルールはありませんでした。3rd Patry ベンダーの方から、直接パッケージが提供されるパターンが一般的でした。これが、container化されたことに伴い、基本的な提供ルールが定義されました。その提供方法は、Red Hat の公式 container registory から入手していただくというものです。

f:id:toaraki:20181220200955p:plain
ソフトウェア配布形態の変化

3rd Party ソフトウェアの環境への組み込み方

ここからは、3rd Patry ソフトウェアを実際に環境に取り込むための操作を説明します。

必要最低限の操作の流れは、以下のようになります。

  • container イメージの特定
  • container 利用の為の準備
  • 3rd party ソフトウェア用のコンフィグレーションテンプレートの準備
  • overcloud deploy
  • テスト

以降、例として、Dell EMC社のVNX/Unity 用 cinder-volumeドライバーの取り込み方の操作をまとめます。

container イメージの特定

まず、取り込む対象のcontiner イメージを、コンテナ検索サイトで検索します。

f:id:toaraki:20181220201800p:plain
コンテナ検索

画面は、検索条件を"VNX/Unity" とした検索結果が表示されています。

container 利用の為の準備

検索結果のコンテナイメージを利用するため、コンテナを入手し、デプロイできる状態を整えます。

  • container イメージの入手
### Red Hat Network にログイン
$ docker login registry.connect.redhat.com
Username: "Red Hat ID "
Password:  " ID に設定されたパスワードを入力"
Login Succeeded
$

### コンテナイメージのダウンロード
$ docker pull registry.connect.redhat.com/dellemc/openstack-cinder-volume-dellemc
Using default tag: latest
Trying to pull repository registry.connect.redhat.com/dellemc/openstack-cinder-volume-dellemc ... 
latest: Pulling from registry.connect.redhat.com/dellemc/openstack-cinder-volume-dellemc
378837c0e24a: Pull complete 
...
c46374f9d499: Pull complete 
Digest: sha256:942a03874f5cb3eae93cc9e8b89f8600ad7c3655b7224abe6f627b81d506019d
Status: Downloaded newer image for registry.connect.redhat.com/dellemc/openstack-cinder-volume-dellemc:latest
$ 

実行例は、container イメージの検索結果にも情報が記載されています。(図中の中段)

f:id:toaraki:20181220202804p:plain
コンテナイメージの入手方法のヒント

  • conainer イメージにタグ情報の付与
### コンテナイメージにタグ情報を付与
$ docker tag registry.connect.redhat.com/dellemc/openstack-cinder-volume-dellemc 192.168.24.1:8787/dellemc/openstack-cinder-volume-dellemc                                                          
$
  • container イメージのローカルレジストリへの登録

入手したコンテナイメージを、Director 上のレジストリに登録します。

### コンテナイメージのレジストリ(例だと、192.168.24.1:8787)に登録
$ docker push 192.168.24.1:8787/dellemc/openstack-cinder-volume-dellemc                                                                                                                             
The push refers to a repository [192.168.24.1:8787/dellemc/openstack-cinder-volume-dellemc]
dc82f8e44fd3: Pushed
...
366de6e5861a: Pushed
latest: digest: sha256:7b5c610d720003aa76c0f17b6edd69eca7d1ec87170a897d9a0c63061ffccfd6 size: 3462
$

3rd party ソフトウェア用のコンフィグレーションテンプレートの準備

  • container イメージの指定

カスタムのテンプレートとして、ファイル:/home/stack/templates/custom-dellemc-container.yamlを新規に作成し、下記の内容を記入します。

parameter_defaults:
  DockerCinderVolumeImage: 192.168.24.1:8787/dellemc/openstack-cinder-volume-dellemc
  DockerInsecureRegistryAddress:
  - 192.168.24.1:8787


* ソフトウェア用の設定の入力

この操作は、3rd Patry ソフトウェア製品毎に、内容が異なります。個々の製品の設定方法については、各社が提供する情報を参照ください。

ここに示した設定例は、Dell EMC社 が公開している情報を元としました。

予め、用意されている標準テンプレートを、カスタマイズ用にコピーします。

$ cp /usr/share/openstack-tripleo-heat-templates/environments/cinder-dellemc-vnx-config.yaml /home/stack/templates/

コピーされたファイル("/home/stack/templates/cinder-dellemc-vnx-config.yaml") に、ストレージバックエンドの接続に必要となる情報を記入します。

# A Heat environment file which can be used to enable a
# Cinder Dell EMC VNX backend, configured via puppet
resource_registry:
  OS::TripleO::Services::CinderBackendDellEMCVNX: /usr/share/openstack-tripleo-heat-templates/puppet/services/cinder-backend-dellemc-vnx.yaml

parameter_defaults:
  CinderEnableIscsiBackend: false
  CinderEnableRbdBackend: false
  CinderEnableNfsBackend: false
  NovaEnableRbdBackend: false
  GlanceBackend: file
  CinderEnableDellEMCVNXBackend: true
  CinderDellEMCVNXBackendName: 'tripleo_dellemc_vnx'
  CinderDellEMCVNXSanIp: '192.168.1.50'
  CinderDellEMCVNXSanLogin: 'admin'
  CinderDellEMCVNXSanPassword: 'password'
  CinderDellEMCVNXStorageProtocol: 'iscsi'
  CinderDellEMCVNXStoragePoolName: ''
  CinderDellEMCVNXDefaultTimeout: 3600
  CinderDellEMCVNXMaxLunsPerStorageGroup: 255
  CinderDellEMCVNXInitiatorAutoRegistration: 'true'
  CinderDellEMCVNXAuthType: 'global'
  CinderDellEMCVNXStorageSecurityFileDir: ''
  CinderDellEMCVNXNaviSecCliPath: '/opt/Navisphere/bin/naviseccli'

overcloud deploy の実行

用意したテンプレートを読み込む形で、overcloud deploy を実行します。

尚、ここでの実行例は、ADPにて公開しているデプロイコマンドをベースに記載してます。yaml で定義された変数は、より後に読み込まれた変数で上書きすることが可能です。このため、予め、DockerCinderVolumeImage という変数を他のカ所で定義している場合、その定義ファイルよりも後段に、今回作成した"cinder-dellemc-vnx-config.yaml" を読み込む必要があります。

$ openstack overcloud deploy --verbose \
 --templates /usr/share/openstack-tripleo-heat-templates \
 -e /home/stack/templates/global-config.yaml \
... (省略)
 -e /home/stack/templates/docker-registry.yaml \  ## 元々のDockerCinderVolumeImage が定義されているファイル
 -e /home/stack/templates/custom-dellemc-container.yaml \ ## DockerContainerVokumeImage の上書き値が定義されているファイル。
 -e /home/stack/templates/cinder-backend-dellemc-vnx.yaml \
... (省略)

テスト

overcloud deploy が完了した後は、openstack volume コマンドを使用して、ストレージとの接続性など確認してください。

ここまでが、コンテナ化された3rd Party 製品のovercloud への取り込み方 となります。

まとめ

RHOSP12 以降、OpenStack のコンポーネントは、コンテナ化されました。さらに、RHSP13以降は、3rd Patry ソフトウェアも、container イメージとして、Red Hat Network より配布されるように変わりました。 とりこむ製品毎に、取り込み方は若干異なりますが、概ね、ここに記した方法で、取り込むことが可能となります。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。