第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 は、デフォルトでサポートされ、デプロイされています。

APB の仕様は軽量であることが意図されており、パラメーターなどの情報をキャプチャーしてアプリケーションに渡すためのいくつかの名前付き Playbook と 1 つのメタデータファイルで構成されます。

1.3. ワークフロー

APB ワークフローは以下のステップに分けられます。

  1. 準備

    1. APB の初期化
    2. APB 仕様ファイル
    3. アクション (プロビジョニング、プロビジョニング解除、バインド、バインド解除)
  2. Build
  3. デプロイ

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
1
metadata フィールドはオプションで、OpenShift Container Platform サービスカタログと統合する場合に使用されます。
2
いずれのパラメーターも持たない APB の場合、parameters フィールドは空白になります。
注記

完全に定義された 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. Build

ビルドの手順では、名前付き Playbook から配布するコンテナーイメージをビルドします。パッケージ化により、Ansible ランタイムを含むベースイメージと Playbook の実行に必要な Ansible アーティファクトおよびその他の依存関係が組み合わされます。

結果として、いくつかの引数を取るための ENTRYPOINT が設定されたコンテナーイメージがビルドされます。それらの 1 つにはプロビジョニングおよびプロビジョニング解除などの実行メソッドが含まれます。

図1.1 APB のビルド

OpenShift ContainerPlatform APB DevelopmentGuide 463015 1117 Build

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 ContainerPlatform APB DevelopmentGuide 463015 1117 Deploy p1

redcircle 1 OpenShift Container Platform ユーザーはサービスをプロジェクトにプロビジョニングすることを検討しているので、OpenShift Container Platform UI (Web コンソールまたは CLI) にアクセスしてサービスカタログと対話し、すでに利用可能な APB を検出します。

redcircle 2 サービスカタログは、ユーザーに表示するために OAB から APB の一覧を要求します。

redcircle 3 OAB は設定済みのすべてのコンテナーレジストリー (クラスターの OpenShift Container レジストリーまたはその他のリモートレジストリー) で APB (LABEL=apb-1.0 などの特定ラベルの付いたイメージ) を検索します。

redcircle 4 OAB は検出された一覧をサービスカタログに返し、ユーザーはこの一覧を OpenShift Container Platform UI で表示できます。

図1.3 選択した APB のデプロイ

OpenShift ContainerPlatform APB DevelopmentGuide 463015 1117 Deploy p2

redcircle 5 ユーザーはサービスカタログで提供される検出された一覧から APB を選択できるようになります。

redcircle 6 サービスカタログは、ユーザーが選択した APB の使用について要求した OAB と通信します。

redcircle 7 OAB は適切なコンテナーイメージレジストリーからイメージプルを開始します。

redcircle 8 イメージのプル後に、OAB はアプリケーションのオーケストレーションのロジックを APB に送ります。サービスは APB コンテナーをいくつかのパラメーターで実行してデプロイされます。これを実行するには、以下のコマンドを一時的な namespace の OpenShift Container Platform クラスターに対して実行します。

$ oc run $IMAGE $METHOD $VARS ansible-playbook ${METHOD}.yaml ${VARS}

このコマンドは、以下のように分けられます。

  1. oc run コマンドは APB イメージを実行します。
  2. 結果として作成される有効期限の短いコンテナーでは、Ansible は、必要なアクションを実行するための Playbook (provision.yaml など) を実行する ansible-playbook コマンドを使用して起動します。これにより、OpenShift Container Platform リソースがユーザーのプロジェクトに作成されます。
  3. コンテナーは実行が終了すると終了し、一時的な namespace は削除されます。

redcircle 9 結果として、ユーザーは OpenShift Container Platform UI から要求したサービスがプロジェクトに正常にプロビジョニングされていることを確認できます。