第1章 はじめに
1.1. 本ガイドについて
本書では、Ansible Playbook Bundles (APB) の設計概念およびワークフローについての概念を説明します。また、apb
CLI ツールのインストールおよび使用方法について説明し、独自の APB を作成する際に使用できるチュートリアルおよび参考情報を提供します。
1.2. 設計の概要
APB は Nulecule および Atomicapp プロジェクトのいくつかの概念、つまり対象アプリケーションのデプイメントのオーケストレーションのみを目的とする有効期限の短いコンテナーの概念に基づく軽量アプリケーション定義です。APB の場合に、この有効期限の短いコンテナーとは APB 自体のことです。このコンテナーには、Ansible ランタイム環境と Playbook、ロールおよび追加の依存関係などのオーケストレーションを支援する必要なファイルが含まれます。
OpenShift Ansible Broker (OAB) は、APB で定義されるアプリケーションを管理する Open Service Broker (OSB) API の実装です。OAB は、OpenShift Container Platform 3.7 よりデフォルトでサポートされ、デプロイされています。
APB の仕様は軽量であることが意図されており、パラメーターなどの情報をキャプチャーしてアプリケーションに渡すためのいくつかの名前付き Playbook と 1 つのメタデータファイルで構成されます。
1.3. ワークフロー
APB ワークフローは以下のステップに分けられます。
準備
- APB の初期化
- APB 仕様ファイル
- アクション (プロビジョニング、プロビジョニング解除、バインド、バインド解除)
- ビルド
- デプロイ
1.3.1. 準備
APB をビルドし、デプロイする前に APB のディレクトリー構造および仕様ファイルを準備する必要があります。「作業の開始」のトピックでは、APB の初回作成時の段階的なチュートリアルを提供しています。以下のセクションでは、このワークフローについて簡単に説明しています。
1.3.1.1. APB の初期化
apb init
コマンドは、APB に必要なスケルトンのディレクトリー構造といくつかの必要なファイル (apb.yml 仕様ファイルなど) を作成します。
以下は、APB のディレクトリー構造のサンプルを示しています。
ディレクトリー構造
example-apb/ ├── Dockerfile ├── apb.yml └── roles/ │ └── example-apb-openshift │ ├── defaults │ │ └── main.yml │ └── tasks │ └── main.yml └── playbooks/ └── provision.yml └── deprovision.yml └── bind.yml └── unbind.yml
1.3.1.2. APB 仕様ファイル
APB 仕様ファイル (apb.yml) は特定のアプリケーション用に編集する必要があります。たとえば、apb init
を実行後のデフォルトの仕様ファイルは以下のようになります。
version: 1.0 name: my-test-apb description: This is a sample application generated by apb init bindable: False async: optional metadata: 1 displayName: my-test plans: - name: default description: This default plan deploys my-test-apb free: True metadata: {} parameters: [] 2
完全に定義された APB 仕様ファイルのサンプルについては、「参考情報」のトピックを参照してください。
1.3.1.3. アクション
以下は APB のアクションです。APB は少なくともプロビジョニングおよびプロビジョニング解除のアクションを実装する必要があります。
- provision.yml
- アプリケーションのクラスターへのインストールを処理するために呼び出される Playbook。
- deprovision.yml
- アンインストールを処理するために呼び出される Playbook。
- bind.yml
- 認証情報の生成など、別のサービスがこのサービスを使用するために使用するアクセスを付与するための Playbook。
- unbind.yml
- このサービスへのアクセスを取り消すための Playbook。
- test.yml
- (オプション) APB が有効であることをテストするための Playbook。
必要な名前付き Playbook は OSB API で定義されるメソッドに対応します。たとえば、OAB が APB をプロビジョニングする必要がある場合、これは provision.yml を実行します。
必要な名前付き Playbook が生成された後は、ファイルを直接使用してアプリケーションの管理をテストできます。開発者はこのファイルのディレクトリーを使用して、期待する動作が得られるまで調整と実行を繰り返す必要があるかもしれません。開発者は Ansible を Playbook および必要な変数を使って直接起動して Playbook をテストすることができます。
1.3.2. ビルド
ビルドのステップは、名前付き Playbook から配布するコンテナーイメージをビルドします。パッケージ化により、Ansible ランタイムを含むベースイメージと Playbook の実行に必要な Ansible アーティファクトおよびその他の依存関係が組み合わされます。
結果として、いくつかの引数を取るための ENTRYPOINT
が設定されたコンテナーイメージがビルドされます。それらの 1 つにはプロビジョニングおよびプロビジョニング解除などの実行メソッドが含まれます。
図1.1 APB のビルド
1.3.3. デプロイ
APB のデプロイにより、コンテナーが起動し、必要な変数と共に実行される Playbook の名前が渡されます。OAB を経由しなくても APB を直接起動できます。それぞれの APB はパッケージ化されるため、その ENTRYPOINT
が実行時に Ansible を起動します。このコンテナーの有効期限は短く設定され、アプリケーションを管理し、終了するための Ansible Playbook を実行します。
通常の APB デプロイでは、APB コンテナーは、Ansible ロールを実行する provision.yml Playbook を実行してアプリケーションをプロビジョニングします。このロールは、oc create
コマンドを呼び出すか、または Ansible モジュールを利用して OpenShift Container Platform リソースを作成します。最終的な結果として、APB は Ansible を実行して OpenShift Container Platform と通信し、対象アプリケーションのプロビジョニングのオーケストレーションを実行します。
以下の図は、ユーザーが利用可能な APB の一覧を検出し、次に選択した APB をプロジェクトにプロビジョニングする 2 つのフェーズで構成されるデプロイメントのフローを示しています。
図1.2 利用可能な APB の一覧表示
OpenShift Container Platform ユーザーはサービスをプロジェクトにプロビジョニングすることを検討しているので、OpenShift Container Platform UI (Web コンソールまたは CLI) にアクセスしてサービスカタログと対話し、すでに利用可能な APB を検出します。
サービスカタログは、ユーザーに表示するために OAB から APB の一覧を要求します。
OAB は設定済みのすべてのコンテナーレジストリー (クラスターの OpenShift Container レジストリーまたはその他のリモートレジストリー) で APB (LABEL=apb-1.0
などの特定ラベルの付いたイメージ) を検索します。
OAB は検出された一覧をサービスカタログに返し、ユーザーはこの一覧を OpenShift Container Platform UI で表示できます。
図1.3 選択した APB のデプロイ
ユーザーはサービスカタログで提供される検出された一覧から APB を選択できるようになります。
サービスカタログは、ユーザーが選択した APB の使用について要求した OAB と通信します。
OAB は適切なコンテナーレジストリーからイメージプルを開始します。
イメージのプル後に、OAB はアプリケーションのオーケストレーションのロジックを APB に送ります。サービスは APB コンテナーをいくつかのパラメーターで実行してデプロイされます。これを実行するには、以下のコマンドを一時的な namespace の OpenShift Container Platform クラスターに対して実行します。
$ oc run $IMAGE $METHOD $VARS ansible-playbook ${METHOD}.yaml ${VARS}
このコマンドは、以下のように分けられます。
-
oc run
コマンドは APB イメージを実行します。 -
結果として作成される有効期限の短いコンテナーでは、Ansible は、必要なアクションを実行するための Playbook (provision.yaml など) を実行する
ansible-playbook
コマンドを使用して起動します。これにより、OpenShift Container Platform リソースがユーザーのプロジェクトに作成されます。 - コンテナーは実行が終了すると終了し、一時的な namespace は削除されます。
結果として、ユーザーは OpenShift Container Platform UI から要求したサービスがプロジェクトに正常にプロビジョニングされていることを確認できます。