Ansible Playbook Bundle 開発ガイド
Ansible Playbook Bundle (APB) を使用した開発
概要
第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 ワークフローは以下のステップに分けられます。
準備
- APB の初期化
- APB 仕様ファイル
- アクション (プロビジョニング、プロビジョニング解除、バインド、バインド解除)
- Build
- デプロイ
1.3.1. 準備 リンクのコピーリンクがクリップボードにコピーされました!
APB をビルドし、デプロイする前に APB のディレクトリー構造および仕様ファイルを準備する必要があります。作業の開始のトピックでは、APB の初回作成時の段階的なチュートリアルを提供しています。 以下のセクションでは、このワークフローについて簡単に説明しています。
1.3.1.1. APB の初期化 リンクのコピーリンクがクリップボードにコピーされました!
apb init
コマンドは、APB に必要なスケルトンのディレクトリー構造といくつかの必要なファイル (apb.yml 仕様ファイルなど) を作成します。
以下は、APB のディレクトリー構造のサンプルを示しています。
ディレクトリー構造
1.3.1.2. APB 仕様ファイル リンクのコピーリンクがクリップボードにコピーされました!
APB 仕様ファイル (apb.yml) は特定のアプリケーション用に編集する必要があります。たとえば、apb init
を実行後のデフォルトの仕様ファイルは以下のようになります。
完全に定義された 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 $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 から要求したサービスがプロジェクトに正常にプロビジョニングされていることを確認できます。
第2章 CLI ツール リンクのコピーリンクがクリップボードにコピーされました!
2.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
apb
CLI ツールを使用する Ansible Playbook Bundle (APB) の作成者は、APB を作成し、ビルドしてこれをコンテナーレジストリーに公開できます。これにより、ベストプラクティスが実施され、詳細事項が処理されることでデプロイが容易になります。
2.2. ツールのインストール リンクのコピーリンクがクリップボードにコピーされました!
2.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
2.2.1.1. Docker デーモン リンクのコピーリンクがクリップボードにコピーされました!
docker
デーモンは正常にインストールされており、システム上で実行されている必要があります。
2.2.1.2. アクセスパーミッション リンクのコピーリンクがクリップボードにコピーされました!
apb
ツールは、ユーザーにトークンを使用するクラスターユーザーとしてログインすることを要求します。デフォルトの system:admin システムユーザーはツールの認証に使用できるトークンを持たないために適切ではありません。さらに、apb
ツールの機能全体を許可するには、数多くのローカルロール (プロジェクト単位) およびクラスターロール (クラスター全体) が存在している必要があります (Cluster and Local RBAC を参照してください)。
最も簡単なオプションとして、ユーザーに cluster-admin クラスターロールを持たせることができます。このロールを別のユーザーに追加するには、このパーミッションをすでに持つユーザー (system:admin デフォルトシステムユーザーなど) として以下を実行することができます。
これはクラスターの root であり、開発設定でのみ使用する必要があります。
oc adm policy add-cluster-role-to-user cluster-admin <user> oc login -u <user> <openshift_server>
$ oc adm policy add-cluster-role-to-user cluster-admin <user>
$ oc login -u <user> <openshift_server>
さらに厳密にパーミッションが設定された環境が必要な場合、デフォルトで提供される OpenShift テンプレートにより developer というユーザーのロールが付与されます。このテンプレートは、各種ロールを作成できるパーミッションのあるユーザーによって実行される必要があります。developer ユーザーにはこのようなパーミッションはありませんが、system:admin ユーザーにはこれを実行するためのパーミッションがあります。
テンプレートを実行するには、以下を実行します。
- openshift-permissions.template.yaml ファイルをローカルにダウンロードします。
次のコマンドを実行します。
oc process -f openshift-permissions.template.yaml \ -p BROKER_NAMESPACE=openshift-ansible-service-broker \ -p GLOBAL_IMAGE_PROJECT=default \ [-p USER=<your_desired_user>] \ | oc create -f -
$ oc process -f openshift-permissions.template.yaml \ -p BROKER_NAMESPACE=openshift-ansible-service-broker \ -p GLOBAL_IMAGE_PROJECT=default \ [-p USER=<your_desired_user>] \
1 | oc create -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- デフォルトで、テンプレートは developer ユーザーのロールを付与します。オプションで
-p
フラグを使用して、デフォルト値を必要なユーザーで上書きすることができます。
2.2.2. RPM でのインストール リンクのコピーリンクがクリップボードにコピーされました!
APB CLI ツールは apb パッケージによって提供されます。 これは rhel-7-server-ose-3.11-rpms
チャンネルで利用できます。
sudo yum install apb
$ sudo yum install apb
2.2.3. インストールの検証 リンクのコピーリンクがクリップボードにコピーされました!
apb help
を実行して、ツールが適切にインストールされていることを確認します。
2.3. 通常のワークフロー リンクのコピーリンクがクリップボードにコピーされました!
2.3.1. ローカルレジストリー リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container レジストリーを使用して APB を調達するには、OpenShift Ansible Broker を local_openshift
タイプのレジストリーアダプターを使用するように設定する必要があります。詳細は、config のセクションを参照してください。
apb init my-new-apb cd my-new-apb apb build apb push apb list
$ apb init my-new-apb
$ cd my-new-apb
$ apb build
$ apb push
$ apb list
APB をホストするためにデフォルトの openshift
namespace 以外の namespace を使用する場合は、以下のコマンドを使用できます。
apb push --namespace <namespace>
$ apb push --namespace <namespace>
2.3.2. リモートレジストリー リンクのコピーリンクがクリップボードにコピーされました!
OAB は、docker.io/ansibleplaybookbundle または独自の個人アカウントなどの、リモートレジストリーや組織を使用するように設定することもできます。これを APB を開発するために使用するには、APB をビルドし、リモートレジストリーにプッシュしてから bootstrap
を実行して APB を再度読み込むことができます。
2.4. APB 作成コマンド リンクのコピーリンクがクリップボードにコピーされました!
2.4.1. init リンクのコピーリンクがクリップボードにコピーされました!
説明
新規 APB のディレクトリー構造を初期化します。さらに、適切なデフォルト値が設定された新規 APB のサンプルファイルを作成します。
使用方法
apb init [OPTIONS] NAME
$ apb init [OPTIONS] NAME
引数
NAME
: 作成される APB およびディレクトリーの名前です。
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| ディレクトリーの再初期化および上書きを強制的に実行します。 |
|
アプリケーションの非同期操作を指定します。通常は |
| アプリケーションをバインド可能な設定で生成します。 |
| プロビジョニング Playbook およびロールを生成しません。 |
| プロビジョニング解除 Playbook およびロールを生成しません。 |
| バインド Playbook およびロールを生成しません。 |
| バインド解除 Playbook およびロールを生成しません。 |
| ロールを生成しません。 |
非同期バインドおよびバインド解除は実験的な機能であり、デフォルトではサポートされておらず、有効にされていません。
例
ディレクトリー my-new-apb を作成します。
ディレクトリー my-new-apb を作成しますが、プロビジョニング解除 Playbook およびロールの生成を省略します。
ディレクトリー my-new-apb を作成し、古いバージョンを上書きします。APB はバインド可能になるように設定され、async をオプションに設定します。
2.4.2. prepare リンクのコピーリンクがクリップボードにコピーされました!
説明
APB を base64 エンコーディングでコンパイルし、これを Dockerfile のラベルとして作成します。
これにより、OAB はイメージをダウンロードせずにレジストリーから APB メタデータを読み取ることができます。このコマンドは APB ディレクトリー内から実行される必要があります。build
コマンドを実行すると、prepare も自動的に実行されます。 つまり、通常は prepare
自体を実行する必要はありません。
使用方法
apb prepare [OPTIONS]
$ apb prepare [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| APB 仕様を、Dockerfile という名前のファイルの代わりにターゲットファイル名に書き込みます。 |
例
Dockerfile に仕様フィールドのラベルを作成します。
apb prepare
$ apb prepare
Dockerfile-custom に仕様フィールドのラベルを作成します。
apb prepare --dockerfile Dockerfile-custom
$ apb prepare --dockerfile Dockerfile-custom
2.4.3. build リンクのコピーリンクがクリップボードにコピーされました!
説明
APB のイメージをビルドします。
タグを使って apb prepare
および docker build
を実行するのと同様です。
使用方法
apb build [OPTIONS]
$ apb build [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
|
ビルドイメージのタグを |
|
イメージのタグのレジストリー部分です (例: |
| イメージのタグのユーザーまたは組織の部分です。 |
例
イメージをビルドし、apb.yml の名前フィールドをタグとして使用します。
apb build
$ apb build
イメージをビルドし、タグ docker.io/my-org/my-new-apb
を使用します。
apb build --tag docker.io/my-org/my-new-apb
$ apb build --tag docker.io/my-org/my-new-apb
イメージをビルドし、タグ docker.io/my-org/<my-apb-name>
を使用します。
apb build --registry docker.io --org my-org
$ apb build --registry docker.io --org my-org
ファイル Dockerfile-custom を Dockerfile 定義として使用してイメージをビルドします。
apb build --dockerfile Dockerfile-custom
$ apb build --dockerfile Dockerfile-custom
2.4.4. push リンクのコピーリンクがクリップボードにコピーされました!
説明
APB を OpenShift Container レジストリーに、またはこれが OAB による読み取りが行われるブローカーのモックレジストリーにアップロードします。
ブローカーのモックレジストリーを使用する場合、仕様はアップロードされ、OpenShift Container Platform に表示されますが、通常 OpenShift Container Platform はイメージをレジストリーからプルします。このレジストリーは通常は oc cluster up
が実行されるレジストリーになります。
OpenShift Container レジストリーを使用する場合、イメージは OpenShift Container Platform に直接アップロードされます。
使用方法
apb push [OPTIONS]
$ apb push [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| OAB へのルートです。 |
| OpenShift Container レジストリーにプッシュする namespace です。 |
| OpenShift Container レジストリーを使用します。 |
|
内部レジストリーイメージをビルドするための Dockerfile です。通常は |
| OAB へのセキュアな接続を使用します。 |
| ブローカーの通信で使用される基本認証ユーザー名です。 |
| ブローカーの通信で使用される基本認証パスワードです。 |
| APB のブローカーへのプッシュ後にカタログを再度一覧表示しません。 |
| ServiceBroker Kubernetes リソースの名前です。 |
例
OAB 開発エンドポイントにプッシュします。
apb push
$ apb push
ローカルの OpenShift Container レジストリーにプッシュします。
apb push
$ apb push
namespace myproject
の下のローカルの OpenShift Container レジストリーにプッシュします。
apb push --namespace myproject
$ apb push --namespace myproject
2.4.5. test リンクのコピーリンクがクリップボードにコピーされました!
説明
APB 単体テストを実行します。
使用方法
apb test [OPTIONS]
$ apb test [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
|
ビルドイメージのタグを |
例
テストを実行します。
apb test
$ apb test
テストを実行しますが、ビルドされたイメージの特定のタグを使用します。
apb test --tag docker.io/my-org/my-new-apb
$ apb test --tag docker.io/my-org/my-new-apb
2.5. ブローカーのユーティリティーコマンド リンクのコピーリンクがクリップボードにコピーされました!
2.5.1. list リンクのコピーリンクがクリップボードにコピーされました!
説明
ブローカーが読み込んだすべての APB を一覧表示します。
使用方法
apb list [OPTIONS]
$ apb list [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| OAB へのルートです。 |
| OAB へのセキュアな接続を使用します。 |
| OAB から詳細な仕様情報を出力します。 |
| 詳細な出力形式を yaml (デフォルト) または json で指定します。 |
| 使用される基本認証ユーザー名を指定します。 |
| 使用される基本認証パスワードを指定します。 |
例
名前、ID および説明を含む APB の基本的な一覧です。
apb list
$ apb list
詳細な、読み取りが容易な仕様を一覧表示します。
apb list -v
$ apb list -v
すべての JSON 出力を一覧表示します。
apb list -v -o json
$ apb list -v -o json
2.5.2. bootstrap リンクのコピーリンクがクリップボードにコピーされました!
説明
OAB がすべての APB をレジストリーから再度読み込むことを要求します。
使用方法
apb bootstrap [OPTIONS]
$ apb bootstrap [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| OAB へのルートです。 |
| OAB へのセキュアな接続を使用します。 |
| ブローカーのブートストラップにカタログを再度一覧表示しません。 |
| 使用される基本認証ユーザー名を指定します。 |
| 使用される基本認証パスワードを指定します。 |
| ServiceBroker Kubernetes リソースの名前です。 |
例
APB の基本的な再読み込み:
apb bootstrap
$ apb bootstrap
2.5.3. remove リンクのコピーリンクがクリップボードにコピーされました!
説明
1 つ (またはすべての) APB を OAB から削除します。
使用方法
apb remove [OPTIONS]
$ apb remove [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| OAB へのルートです。 |
| OAB へのセキュアな接続を使用します。 |
| すべての保存された APB を削除します。 |
| 削除する APB の ID です。 |
| OAB へのセキュアな接続を使用します。 |
| 使用される基本認証ユーザー名を指定します。 |
| 使用される基本認証パスワードを指定します。 |
| 削除後にカタログを再度一覧表示しません。 |
例
ID を使用して APB を削除します。
apb remove --id ca91b61da8476984f18fc13883ae2fdb
$ apb remove --id ca91b61da8476984f18fc13883ae2fdb
APB の ID が必要な場合は、以下を使用します。
apb list
$ apb list
ID NAME DESCRIPTION
ca91b61da8476984f18fc13883ae2fdb dh-etherpad-apb Note taking web application
すべての APB を削除します。
apb remove --all
$ apb remove --all
2.5.4. relist リンクのコピーリンクがクリップボードにコピーされました!
説明
サービスカタログに対し、ブローカーに一致する提供されたサービスを再度一覧表示するよう強制します。
使用方法
apb relist [OPTIONS]
$ apb relist [OPTIONS]
オプション
オプション (短縮形表記) | 説明 |
---|---|
| ヘルプメッセージを表示 |
| ServiceBroker Kubernetes リソースの名前です。 |
| OAB へのセキュアな接続を使用します。 |
| 使用される基本認証ユーザー名を指定します。 |
| 使用される基本認証パスワードを指定します。 |
例
apb relist
$ apb relist
2.6. その他のコマンド リンクのコピーリンクがクリップボードにコピーされました!
2.6.1. help リンクのコピーリンクがクリップボードにコピーされました!
説明
ヘルプメッセージを表示します。
使用方法
apb help
$ apb help
例
apb help
$ apb help
apb -h
$ apb -h
第3章 APB の作成 リンクのコピーリンクがクリップボードにコピーされました!
3.1. APB の作成: 作業の開始 リンクのコピーリンクがクリップボードにコピーされました!
3.1.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
このチュートリアルでは、いくつかのサンプル Ansible Playbook Bundle (APB) の作成を行います。APB でプロビジョニング、プロビジョニング解除、バインドおよびバインド解除を可能にするアクションを作成します。APB の設計についての詳細は、設計のトピックを参照してください。APB の作成についてのさらに詳細な情報は、参照のトピックを参照してください。
このチュートリアルの残りの部分では、括弧のマークされた項目を独自の情報で置き換えます。 たとえば、<host>:<port>
を 172.17.0.1.nip.io:8443
などに置き換えます。
3.1.2. 操作を始める前に リンクのコピーリンクがクリップボードにコピーされました!
独自の APB を作成する前に、開発環境をセットアップする必要があります。
- OpenShift Container Platform クラスターにアクセスできることを確認します。クラスターはサービスカタログと、デフォルトでインストールされている OpenShift Ansible broker (OAB) の両方を実行している必要があります。
-
APB ツールをCLI ツールのトピックで説明されているようにインストールします。検証するには、
apb help
コマンドを実行して、有効な応答の有無を確認します。 -
リモートホストに存在する OpenShift Container Platform クラスターに対して開発を行っている場合や、docker デーモンにアクセスがない場合は、本書で説明されている apb push および
apb run
コマンドを使用する際の代替的な手順について、リモートクラスターの使用
を参照してください。
3.1.3. APB の初回作成 リンクのコピーリンクがクリップボードにコピーされました!
このチュートリアルでは、コンテナー化された hello world アプリケーションの APB を作成します。ここでは、APB hello-world-apb をミラーリングする基本的な APB を扱います。
最初のタスクとして、
apb
CLI ツールを使用して APB を初期化します。これにより、APB のスケルトンが作成されす。ここで使用するコマンドは単純なコマンドです。apb init my-test-apb
$ apb init my-test-apb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初期化の後に、以下の構造を確認できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apb.yml (APB 仕様ファイル) および Dockerfile の 2 つのファイルがルートディレクトリーに作成されています。これらは APB に必要な最低限のファイルです。APB 仕様ファイルについての詳細は、参照のトピックを参照してください。ここでは、Dockerfile で実行できることについても説明されています。
apb.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dockerfile では、2 つの更新を実行します。
FROM
命令を変更して、イメージを Red Hat Container Catalog から使用できるようにします。最初の行が表示されるはずです。FROM openshift3/apb-base
FROM openshift3/apb-base
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LABEL
命令のcom.redhat.apb.spec
を base64 でエンコードされたバージョンの apb.yml で更新します。これを実行するには、apb prepare
を実行します。cd my-test-apb apb prepare
$ cd my-test-apb $ apb prepare
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、以下のように Dockerfile が更新されます。
Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この時点で、ビルド可能な完全に形成された APB が使用できるようになります。
apb prepare
の使用を省略した場合でも、apb build
コマンドがイメージのビルド前に APB を作成します。apb build
$ apb build
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の APB イメージをローカルの OpenShift Container レジストリーにプッシュできるようになります。
apb push
$ apb push
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OAB のクエリーによって、新規の APB が一覧表示されているのを確認できます。
apb list
$ apb list ID NAME DESCRIPTION < ------------ ID -------------> dh-my-test-apb This is a sample application generated by apb init
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同様に、OpenShift Container Platform Web コンソールにアクセスすると、サービスカタログの All および Other タブの下に my-test-apb という名前の新規 APB が表示されます。
3.1.4. アクションの追加 リンクのコピーリンクがクリップボードにコピーされました!
直前のセクションで作成された完全に新規の APB は、そのままの状態では多くのことを実行できないため、いくつかのアクションを追加する必要があります。そのためには、いくつかのアクションを追加する必要があります。サポートされるアクションは以下のとおりです。
- provision (プロビジョニング)
- deprovision (プロビジョニング解除)
- bind (バインド)
- unbind (バインド解除)
- test
以下のセクションで上記のアクションのそれぞれを追加していきます。開始前に、以下を確認してください。
oc
CLI 経由で OpenShift Container Platform クラスターにログインしている。この場合は、apb
ツールが OpenShift Container Platform および OAB と対話できます。oc login <cluster_host>:<port> -u <user_name> -p <password>
# oc login <cluster_host>:<port> -u <user_name> -p <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform Web コンソールにログインし、APB がカタログに一覧表示されていることを確認します。
図3.1 OpenShift Container Platform Web コンソール
getting-started という名前のプロジェクトを作成します。このプロジェクトで OpenShift Container Platform リソースをデプロイします。 Web コンソールまたは CLI を使用してこれを作成できます。
oc new-project getting-started
$ oc new-project getting-started
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4.1. プロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
apb init
プロセス中に、プロビジョニングタスクの 2 つの部分が消去されました。Playbook playbooks/provision.yml および roles/provision-my-test-apb の関連ロール。
playbooks/provision.yml ファイルは、プロビジョニングアクションが OAB から呼び出される際に実行される Ansible Playbook です。Playbook は変更可能ですが、ここではコードをそのままにしておきます。
playbooks/provision.yml
Playbook は localhost
で実行され、ロール provision-my-test-apb を実行します。この Playbook はサービスブローカーで作成されるローカルコンテナーで機能します。ansible.kubernetes-modules ロールによって、kubernetes-modules を使用して OpenShift Container Platform リソースを作成できます。asb-modules は OAB で使用できる追加の機能を提供します。
現時点で、このロールに設定されたタスクはありません。roles/provision-my-test-apb/tasks/main.yml のコンテンツには、共通のリソース作成タスクを示すコメントのみが含まれます。 現時点でプロビジョニングタスクを実行できますが、実行するタスクがないために APB コンテナーが単純に起動されるのみで、何もデプロイせずに終了されることになります。
これは Web コンソールを使用し、my-test APB をクリックして、これを getting-started プロジェクトにデプロイして試してみることができます。
図3.2 my-test のプロビジョニング
プロビジョニングの実行中、新規の namespace が dh-my-test-apb-prov-<random> という名前で作成されます。開発モードでは、これは永続しますが、通常この namespace は正常な完了後に削除されます。APB がプロビジョニングに失敗すると、デフォルトでは namespace は永続します。
Pod リソースを参照すると、ログで APB の実行を確認することができます。Pod のログを表示するには、以下を実行します。
Web コンソールを使用してすべての namespace を表示し、作成日で並べ替えるか、または以下のコマンドを使用するかのいずれかを実行して namespace を検索します。
oc get ns
$ oc get ns NAME STATUS AGE ansible-service-broker Active 1h default Active 1h dh-my-test-apb-prov-<random> Active 4m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロジェクトに切り替えます。
oc project dh-my-test-apb-prov-<random>
$ oc project dh-my-test-apb-prov-<random> Now using project "dh-my-test-apb-prov-<random>" on server "<cluster_host>:<port>".
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 名を取得します。
oc get pods
$ oc get pods NAME READY STATUS RESTARTS AGE <apb_pod_name> 0/1 Completed 0 3m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4.1.1. デプロイメント設定の作成 リンクのコピーリンクがクリップボードにコピーされました!
APB は少なくともアプリケーション Pod をデプロイできる必要があります。これは デプロイメント設定を指定して実行できます。
provision-my-test-apb/tasks/main.yml ファイルでコメントアウトされている最初のタスクの 1 つに、デプロイメント設定の作成があります。このコメントを解除することも、または以下を貼り付けることもできます。
注記通常、
image:
値を独自のアプリケーションイメージに置き換えることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細については、APB の作成: 参照を参照してください。 また、すべてのフィールドの詳細については、ansible-kubernetes-modules ドキュメントを参照してください。
APB をビルドし、プッシュします。
apb build apb push
$ apb build $ apb push
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Web コンソールを使用して APB をプロビジョニングします。
プロビジョニングの後に、新規に実行される Pod および新規のデプロイメント設定が利用可能になります。OpenShift Container Platform リソースをチェックして検証します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow また、Web コンソールのプロジェクトの Overview ページでデプロイされたアプリケーションを表示できます。
この Pod を現行の状態で使用する唯一の方法として、以下を実行します。
oc describe pods/<pod_name>
$ oc describe pods/<pod_name>
これにより、その IP アドレスを検索し、それに直接アクセスします。複数の Pod がある場合、それらは別個にアクセスされます。それらを単一ホストのように処理するには、次のセクションで説明されているように サービス を作成する必要があります。
次に進む前にクリーンアップし、再度プロビジョニングを実行するために、getting-started プロジェクトを削除してから再作成するか、または新規のプロジェクトを作成することができます。
3.1.4.1.2. サービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
複数の Pod を使用して負荷分散を行い、ユーザーがそれらに単一ホストとしてアクセスできるようにサービスを作成する必要になる場合があります。 以下を実行します。
provision-my-test-apb/tasks/main.yml ファイルを変更し、以下を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow selector
セクションでは、my-test サービスに適切な Pod を組み込むことができます。ports
はターゲットポートを Pod から取得し (8080)、それらをサービスの単一ポート (80) として公開します。アプリケーションは 8080 で実行されていますが、これがデフォルトの HTTP ポート 80 で利用可能になることに注意してください。ポートの
name
フィールドでは、このポートを今後に他のリソースで使用できるように指定できます。詳細については、k8s_v1_service モジュールを参照してください。APB をビルドし、プッシュします。
apb build apb push
$ apb build $ apb push
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Web コンソールを使用して APB をプロビジョニングします。
プロビジョニング後に、新規サービスが Web コンソールまたは CLI に表示されます。Web コンソールでは、アプリケーションの Overview ページの Networking の下か、または Applications → Services の下で新規サービスをクリックできます。負荷が分散されたアプリケーションに使用するために使用できるサービスの IP アドレスが表示されます。
コマンドラインでサービスの情報を表示するには、以下を実行できます。
oc project getting-started oc get services oc describe services/my-test
$ oc project getting-started
$ oc get services
$ oc describe services/my-test
describe
は、サービスにアクセスするために使用する IP アドレスを表示します。ただし、ユーザーがアプリケーションにアクセスするために IP アドレスを使用する方法は通常は理想的な方法ではありません。その代わりに、次のセクションで説明されるように route を作成する必要があります。
次に進む前にクリーンアップし、再度プロビジョニングを実行するために、getting-started プロジェクトを削除してから再作成するか、または新規のプロジェクトを作成することができます。
3.1.4.1.3. ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションへの外部アクセスは、信頼できる名前付きルートで公開できます。
provision-my-test-apb/tasks/main.yml ファイルを変更して以下を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow to_name
はターゲットサービスの名前です。spec_port_target_port
はターゲットサービスのポートの名前を参照します。詳細は、openshift_v1_route モジュール を参照してください。APB をビルドし、プッシュします。
apb build apb push
$ apb build $ apb push
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Web コンソールを使用して APB をプロビジョニングします。
プロビジョニング後に、作成される新規ルートが表示されます。Web コンソールの getting-started プロジェクトの Overview ページでは、アクティブでクリック可能なルートリンクがアプリケーションに一覧表示されます。ルートをクリックするか、または URL にアクセスすると、hello-world アプリケーションが起動します。
CLI からルート情報を表示することもできます。
この時点で、my-test アプリケーションは完全に機能し、負荷分散が行われており、拡張可能かつアクセス可能です。完成した APB を hello-world-apb サンプルリポジトリーの hello-world APB と比較できます。
3.1.4.2. プロビジョニング解除 リンクのコピーリンクがクリップボードにコピーされました!
プロビジョニング解除タスクについては、すべてのプロビジョニングされたリソースを、通常は作成時と反対の順序で破棄する必要があります。
プロビジョニング解除アクションを追加するには、deprovision.yml ファイルが playbooks/ ディレクトリーの下にあり、関連タスクが roles/deprovision-my-test-apb/tasks/main.yml になければなりません。これらのファイルはどちらもすでに作成されている必要があります。
deprovision.yml ファイルの内容は、異なるロールを呼び出すことを除くとプロビジョニングタスクと同様です。
playbooks/deprovision.yml
このロールをファイル roles/deprovision-my-test-apb/tasks/main.yml で編集します。タスクのコメントを解除することにより、コメントなしの生成されるファイルは以下のようになります。
先に作成された provision.yml ファイルでは、デプロイメント設定、サービス、次にルートを作成しました。プロビジョンニング解除アクションの場合、リソースを逆の順序で削除する必要があります。これは、リソースを namespace
および name
で識別し、これを state: absent
とマークして実行できます。
プロビジョニング解除テンプレートを実行するには、Deployed Services 一覧のメニューをクリックし、Delete を選択します。
3.1.4.2.1. バインド リンクのコピーリンクがクリップボードにコピーされました!
先のセクションでは、スタンドアロンアプリケーションをデプロイする方法を説明しました。しかし、ほとんどの場合、アプリケーションは他のアプリケーションと通信し、とくにデータソースと通信する必要があります。以下のセクションでは、my-test-apb からデプロイされた hello-world アプリケーションが使用できる PostSQL データベースを作成します。
3.1.4.2.1.1. 準備 リンクのコピーリンクがクリップボードにコピーされました!
正常に開始できるように、PostgreSQL をプロビジョニングおよびプロビジョニング解除するために必要なファイルを作成します。
詳細な例については、PostgreSQL example APB を参照してください。
--bindable
オプションを使用して APB を初期化します。apb init my-pg-apb --bindable
$ apb init my-pg-apb --bindable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、いくつかの違いはあるものの、通常の APB ファイル構造を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通常ファイルのほかに、新規 Playbook bind.yml、unbind.yml、およびそれらの関連付けられたロールが表示されます。bind.yml および unbind.yml ファイルはどちらも空であり、デフォルトのバインド動作を使用しているために空のままになります。
apb.yml ファイルを編集します。
bindable: true
の設定に注意してください。それらの変更のほかにも、PostgreSQL を設定するためにいくつかのパラメーターを apb.yml に追加する必要があります。それらは、新規 APB のプロビジョニング時の Web コンソールでの選択可能なフィールドになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow playbooks/provision.yml は以下のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow playbooks/deprovision.yml は以下のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow roles/provision-my-pg-apb/tasks/main.yml ファイルを編集します。このファイルは、多くの点で hello-world アプリケーションをミラーリングしますが、再起動間のデータを保存し、デプロイメント設定の各種設定オプションを保存するために 永続ボリューム (PV) を追加します。
さらに、新規タスクがプロビジョニングタスク後に下部に追加されます。プロビジョニングプロセスで作成された認証情報を保存するには、OAB で取得できるようにそれらをエンコードする必要があります。モジュール
asb_encode_binding
を使用する新規タスクでこれを実行します。このファイルのすべての内容を安全に削除し、これを以下に置き換えることができます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow encode bind credentials
タスクは利用可能なフィールドを環境変数 (DB_TYPE
,DB_HOST
,DB_PORT
,DB_USER
,DB_PASSWORD
, andDB_NAME
) として利用可能にします。これは、bind.yml ファイルが空のままの場合のデフォルトの動作です。すべてのアプリケーション (hello-world など) がこれらの環境変数を使用でき、バインド操作後に設定済みのデータベースに接続できます。roles/deprovision-my-pg-apb/tasks/main.yml を編集し、以下の行のコメントを解除して、作成されたリソースがプロビジョニング解除時に削除されるようにします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最後に APB をビルドし、プッシュします。
apb build apb push
$ apb build $ apb push
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この時点で、APB は完全に機能する PostgreSQL データベースをクラスターに作成できます。これについては、次のセクションでテストできます。
3.1.4.2.1.2. UI からの実行 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションをテストするには、hello-world アプリケーションをプロビジョニングされた PostgreSQL データベースにバインドできます。このチュートリアルのプロビジョニング セクションで事前に作成されたアプリケーションを使用するか、または hello-world-apb を使用できます。
- まず、my-test-apb をプロビジョニングします。
次に、my-pg-apb をプロビジョニングし、シークレットを作成する オプションを選択します。
- 次に、プロジェクトに移動します (まだの場合)。hello-world アプリケーションと PostgreSQL データベースの両方を確認できます。プロビジョニング時にバインディングを作成することを選択しなかった場合は、ここで バインディングの作成 リンクを使用してこれを実行できます。
バインディングが作成されたら、バインディングで作成されたシークレットをアプリケーションに追加する必要があります。まず、Resources → Secretsページでシークレットに移動します。
シークレットを環境変数として追加します。
これを追加したら、Overview ページに戻ることができます。my-test アプリケーションは依然として設定変更による再デプロイの実行中である可能性があります。その場合には、ルートをクリックしてアプリケーションを表示できるまで待機します。
ルートのクリック後に、hello-world アプリケーションが my-pg データベースを検出し、これに接続されていることを確認できます。
3.1.4.2.2. Test リンクのコピーリンクがクリップボードにコピーされました!
テストアクションは、APB がサービスカタログに公開される前に基本的なサニティーチェックをパスするものであることを確認することを目的としています。これらはライブサービスをテストするように意図されていません。OpenShift Container Platform には、プロビジョニング時に追加できる liveness および readiness プローブを使用してライブサービスをテストする機能があります。
テストの実際の実装については、APB の作成者が決定することができます。以下のセクションでは、これについてのガイダンスおよびベストプラクティスを説明します。
3.1.4.2.2.1. テストアクションの作成 リンクのコピーリンクがクリップボードにコピーされました!
APB のテストアクションを作成するには、以下を実行します。
- playbooks/test.yml ファイルを組み込みます。
- テストのデフォルトを playbooks/vars/ ディレクトリーに組み込みます。
APB のテストのオーケストレーションを実行するには、test.yml ファイルの include_vars および include_role モジュールを使用する必要があります。
test.yml
3.1.4.2.2.2. 検証ロールの作成 リンクのコピーリンクがクリップボードにコピーされました!
検証ロール では、プロビジョニングが失敗したか、または成功したかを判別できます。verify_<name> ロールは roles/ ディレクトリーに配置されます。これは通常の Ansible ロール です。
main.yml ファイルのタスクサンプルは以下のようになります。
3.1.4.2.2.3. テスト結果の保存 リンクのコピーリンクがクリップボードにコピーされました!
また、asb_save_test_result モジュールを検証ロールで使用することもできます。これにより、APB はテスト結果を保存し、apb test
コマンドはそれらを返すことができるようになります。APB Pod はツールがテスト結果を取得するまで有効な状態のままになります。
たとえば、asb_save_test_result の使用を先の main.yml のサンプルに追加します。
3.1.4.2.2.4. テストアクションの実行 リンクのコピーリンクがクリップボードにコピーされました!
テストアクションを定義した後に、CLI ツールを使用してテストを実行できます。
apb test
$ apb test
テストアクションは以下を実行します。
- イメージのビルド
- サービスブローカーで実行を開始される場合と同様の Pod の起動
- 保存されている場合、テスト結果の取得
実行が終了した後の Pod のステータスはテストのステータスを判別するものになります。Pod がエラー状態の場合は障害が生じたことを示し、コマンドはテストが不成功であったことを報告します。
3.2. APB の作成: 参照 リンクのコピーリンクがクリップボードにコピーされました!
3.2.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
使用開始のトピックでは初回の Ansible Playbook Bundle (APB) の作成を手順ごとに説明していますが、このトピックでは、詳細な参考情報を提供します。ここでは APB を設定する基本的なコンポーネントについて詳細に説明し、経験豊かな APB 開発者が APB 内の個々のコンポーネントをよく理解するのに役立つ情報を提供します。
完成した APB サンプルについては、GitHub の ansibleplaybookbundle 組織で APB を参照できます。
3.2.2. ディレクトリー構造 リンクのコピーリンクがクリップボードにコピーされました!
以下は、APB のディレクトリー構造のサンプルを示しています。
3.2.3. APB 仕様ファイル リンクのコピーリンクがクリップボードにコピーされました!
APB 仕様ファイルは apb.yml に置かれ、ここではアプリケーションの概要情報が宣言されます。以下は APB 仕様の例です。
- 1
- 非同期バインドおよびバインド解除は実験的な機能であり、デフォルトではサポートされておらず、有効にされていません。
3.2.3.1. 上部の構造 リンクのコピーリンクがクリップボードにコピーされました!
フィールド | 説明 |
---|---|
| APB 仕様のバージョンです。詳細は、APB 仕様のバージョン管理を参照してください。 |
| APB の名前です。名前は有効な ASCII でなければならず、小文字、数字、アンダースコア、ピリオド、およびダッシュを含めることができます。有効なタグ名については、Docker のガイドラインを参照してください。 |
| この APB の簡単な説明です。 |
|
この APB をバインド可能にするかについてのブール値オプションです。許可されるフィールドは |
| 関連するメタデータ情報を宣言するディクショナリーフィールドです。 |
| デプロイできるプランの一覧です。詳細は、プランを参照してください。 |
3.2.3.2. メタデータ リンクのコピーリンクがクリップボードにコピーされました!
フィールド | 説明 |
---|---|
| アプリケーションのドキュメントへの URL です。 |
| サービスカタログについての Web コンソールに表示されるイメージの URL です。 |
| APB 内で使用できるイメージの一覧です。 |
| Web コンソールに表示されるこの APB の名前です。 |
| APB が Web コンソールでクリックされる際に表示される詳細の説明です。 |
| この APB を使用できるように提供しているプロバイダーの名前です。 |
3.2.3.3. プラン リンクのコピーリンクがクリップボードにコピーされました!
プランは一覧として宣言されます。このセクションでは、プランの各フィールドの説明内容について説明します。
フィールド | 説明 |
---|---|
| デプロイするプランの任意の名前です。これは APB がサービスカタログからクリックされる際に表示されます。 |
| このプランからデプロイされる内容の簡単な説明です。 |
|
この計画にコストが発生しないかどうかを判別するためのブール値フィールドです。許可されるフィールドは |
| 関連するプランメタデータ情報を宣言するディクショナリーフィールドです。詳細は、プランメタデータを参照してください。 |
| APB への入力として使用されるパラメーターディクショナリーの一覧です。詳細は、パラメーターを参照してください。 |
3.2.3.4. プランメタデータ リンクのコピーリンクがクリップボードにコピーされました!
フィールド | 説明 |
---|---|
| Web コンソールに表示されるプランの名前です。 |
| このプランがデプロイする内容の詳細な説明です。 |
|
プランのデプロイにかかるコストです。許可されるフィールドは |
3.2.3.5. パラメーター リンクのコピーリンクがクリップボードにコピーされました!
parameters
セクションの各項目には複数のフィールドがある場合があります。name
フィールドは必須です。パラメーターの順序は、OpenShift Container Platform Web コンソールのフォームの順序で表示されます。
フィールド | 説明 |
---|---|
| APB に渡されるパラメーターの固有の名前です。 |
| Web コンソールに表示されるラベルです。 |
|
リンク json-schema で指定されるパラメーターのデータタイプです ( |
| パラメーターが APB の実行に必須かどうかを示します。Web コンソールの必須フィールドです。 |
| パラメーターに割り当てられるデフォルト値です。 |
|
Web コンソールの表示タイプです。たとえば、 |
|
パラメーターが一致する |
パラメーターの詳細の一覧を使用する場合、共有パラメーター一覧を使用すると便利です。この例として、rhscl-postgresql-apb を参照してください。
3.2.3.6. APB 仕様のバージョン管理 リンクのコピーリンクがクリップボードにコピーされました!
APB 仕様は x.y
形式のセマンティックバージョニングを使用します。 ここで、x
はメジャーリリースで、y
はマイナーリリースです。
現行の仕様バージョンは 1.0
です。
3.2.3.6.1. メジャーバージョン リンクのコピーリンクがクリップボードにコピーされました!
APB 仕様は、API の互換性を失う変更が仕様に導入されるたびにメジャーバージョンを増分します。例には以下が含まれます。
- 必須フィールドの導入または削除。
- YAML 形式の変更。
- 新機能。
3.2.3.6.2. マイナーバージョン リンクのコピーリンクがクリップボードにコピーされました!
APB 仕様は、API の互換性に影響がない変更が仕様に導入されるたびにマイナーバージョンを増分します。例には以下が含まれます。
- オプションフィールドの導入または削除。
- スペルの修正。
- 新規オプションの既存フィールドへの導入。
3.2.4. Dockerfile リンクのコピーリンクがクリップボードにコピーされました!
Dockerfile は APB イメージを実際にビルドする際に使用されます。そのため、これを独自のニーズに合わせてカスタマイズする必要があります。たとえば、PostgreSQL との対話が必要な Playbook を実行する場合、yum install
コマンドを追加して必要なパッケージをインストールすることが必要になる可能性があります。
3.2.5. APB アクション (Playbook) リンクのコピーリンクがクリップボードにコピーされました!
APB のアクションは APB の実行で使用されるコマンドです。サポートされている標準的なアクションは以下になります。
- provision (プロビジョニング)
- deprovision (プロビジョニング解除)
- bind (バインド)
- unbind (バインド解除)
- test
アクションを有効にするには、playbooks/ ディレクトリーに <action>.yml という名前の有効なファイルがなければなりません。これらの Playbook はすべてのことを実行できる、つまり、希望するすべてのアクションを作成できます。たとえば、 mediawiki-apb には update
アクションを作成する Playbook があります。
ほとんどの APB にはリソースを作成するためのプロビジョニングアクションと、サービスを削除する際にリソースを破棄するためのプロビジョニング解除アクションがあります。
バインドおよびバインド解除アクションは、1 つのサービスの位置情報 (coordinate) を別のサービスで利用可能にする必要がある場合に使用されます。通常、これはデータサービスを作成し、これをアプリケーションで利用可能にする場合に該当します。現時点では、この位置情報 (coordinate) はプロビジョニング時に利用可能になります。
位置情報 (coordinate) を別のサービスで適切に利用可能にするには、asb_encode_binding モジュールを使用します。このモジュールは APB のプロビジョニングロールの最後に呼び出され、これは OpenShift Ansible Broker (OAB) にバインド認証情報を返します。
- name: encode bind credentials asb_encode_binding: fields: EXAMPLE_FIELD: foo EXAMPLE_FIELD2: foo2
- name: encode bind credentials
asb_encode_binding:
fields:
EXAMPLE_FIELD: foo
EXAMPLE_FIELD2: foo2
3.2.6. 共通リソースの使用 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、APB の開発時に作成される共通の OpenShift Container Platform リソースの一覧について説明します。利用可能なリソースモジュールの詳細の一覧については、Ansible Kubernetes Moduleを参照してください。
3.2.6.1. サービス リンクのコピーリンクがクリップボードにコピーされました!
以下は、hello-world という名前のサービスを作成するためのサンプルの Ansible タスクです。APB の namespace
変数は Web コンソールから起動される場合に OAB によって提供されます。
プロビジョニング
プロビジョニング解除
- k8s_v1_service: name: hello-world namespace: '{{ namespace }}' state: absent
- k8s_v1_service:
name: hello-world
namespace: '{{ namespace }}'
state: absent
3.2.6.2. デプロイメント設定 リンクのコピーリンクがクリップボードにコピーされました!
以下は、サービス hello-world にマップするイメージ docker.io/ansibleplaybookbundle/hello-world のデプロイメント設定を作成するサンプルの Ansible タスクです。
プロビジョニング
プロビジョニング解除
- openshift_v1_deployment_config: name: hello-world namespace: '{{ namespace }}' state: absent
- openshift_v1_deployment_config:
name: hello-world
namespace: '{{ namespace }}'
state: absent
3.2.6.3. ルート リンクのコピーリンクがクリップボードにコピーされました!
以下は、サービス hello-world にマップする hello-world という名前のルートを作成する例です。
プロビジョニング
プロビジョニング解除
- openshift_v1_route: name: hello-world namespace: '{{ namespace }}' state: absent
- openshift_v1_route:
name: hello-world
namespace: '{{ namespace }}'
state: absent
3.2.6.4. 永続ボリューム リンクのコピーリンクがクリップボードにコピーされました!
以下は、Persistent Volume Claim (PVC, 永続ボリューム要求) リソースとこれを使用するデプロイメント設定を作成する例です。
プロビジョニング
リソースに加えて、ボリュームをデプロイメント設定の宣言に追加します。
プロビジョニング解除
3.2.7. オプションの変数 リンクのコピーリンクがクリップボードにコピーされました!
オプションの変数は、環境変数を使用して APB に追加できます。変数を APB に渡すには、.yml ファイルで変数置換をエスケープする必要があります。
たとえば、etherpad-apb の以下の roles/provision-etherpad-apb/tasks/main.yml ファイルについて見てみましょう。
APB の変数は roles/provision-etherpad-apb/defaults/main.yml ファイルに定義されます。
3.2.8. リモートクラスターの使用 リンクのコピーリンクがクリップボードにコピーされました!
APB の開発において、開発者が apb
ツールが提供する完全な開発ライフサイクルを使用できない状態になるいくつかの要因があります。これらの主な要因には、以下が含まれます。
- リモートホストにある OpenShift Container Platform クラスターに対して開発を行っている。
- docker デーモンへのアクセスがないマシンで APB を開発している。
開発者が上記のいずれかの条件を満たす場合は、以下のワークフローを使用してイメージを内部 OpenShift Container Platform レジストリーに公開し、ブローカーがイメージのブートストラップ (APB 仕様をブローカーに読み込むプロセス) を実行できるようにします。以下のセクションでは、apb
ツールを使用する場合と使用しない場合にこれらの手順を実行する方法について説明しています。
3.2.8.1. APB のプッシュ リンクのコピーリンクがクリップボードにコピーされました!
リモートの OpenShift Container Platform クラスターを使って apb push
コマンドを使用するには、以下を実行します。
base64 エンコードされた APB 仕様が Dockerfile のラベルであることを確認します。これは、通常は
apb prepare
コマンドを使用して実行できます。apb
ツールがインストールされていない場合は、以下を実行できます。cat apb.yml | base64
$ cat apb.yml | base64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64 エンコードされた apb.yml を返します。 これは、以下のように Dockerfile の
LABEL "com.redhat.apb.spec"
の下にコピーアンドペーストできます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 内部 OpenShift Container Platform レジストリーにビルドされた APB イメージを設定します。
通常、これは
apb push
コマンドで処理されます。docker
CLI を使用せずにイメージをビルドするには、OpenShift Container Platform の S2I 機能を利用することができます。デフォルトで、OAB は openshift プロジェクトで公開済みの APB を検索するように設定されます。このプロジェクトは、クラスターのすべての認証ユーザーが利用できるようにイメージとイメージストリームを公開するグローバル namespace です。イメージをビルドするために openshift プロジェクトで
oc new-app
コマンドを使用して、この利点を活用できます。oc new-app <path_to_bundle_source> \ --name <bundle_name> \ -n openshift
$ oc new-app <path_to_bundle_source> \ --name <bundle_name> \ -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2 分ほど経過したら、イメージが内部レジストリーに表示されるはずです。
oc get images | grep <bundle_name>
$ oc get images | grep <bundle_name> sha256:b2dcb4b95e178e9b7ac73e5ee0211080c10b24260f76cfec30b89e74e8ee6742 172.30.1.1:5000/openshift/<bundle_name>@sha256:b2dcb4b95e178e9b7ac73e5ee0211080c10b24260f76cfec30b89e74e8ee6742
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OAB をブートストラップします。通常、これも
apb push
またはapb bootstrap
コマンドで処理されます。apb bootstrap
コマンドは 5 分から 10 分の待機時間なしにサービスカタログを再度一覧表示するため、このコマンドをこの手順で使用するのが適しています。apb
ツールがインストールされていない場合、代わりに以下を実行できます。ブローカーのルート名を取得します。
oc get route -n openshift-ansible-service-broker
$ oc get route -n openshift-ansible-service-broker NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD asb-1338 asb-1338-openshift-ansible-service-broker.172.17.0.1.nip.io asb port-1338 reencrypt None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブローカーのサポートされているパスの一覧を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このパスは
v2/bootstrap
およびv2/catalog
パスを指定します。
直前の手順で検出される値を使用し、
v2/bootstrap
パスに対して curl を実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 直前の手順で検出される値と異なる場合には、
ansible-service-broker
を置き換えます。
注記oc whoami -t
コマンドはトークンを返し、認証ユーザーにはアクセスパーミッションで説明されているパーミッションがなければなりません。
新規 APB が OAB に存在することを確認します。通常、これは
apb list
コマンドの機能になります。apb
ツールがインストールされていない場合、代わりに以下を実行できます。直前の
v2/bootstrap
の手順で収集されるルートおよびサポートされているパスと名前を使用して、v2/catalog
パスに対して curl を実行します。curl -H "Authorization: Bearer $(oc whoami -t)" -k \ https://asb-1338-openshift-ansible-service-broker.172.17.0.1.nip.io/ansible-service-broker/v2/catalog
$ curl -H "Authorization: Bearer $(oc whoami -t)" -k \ https://asb-1338-openshift-ansible-service-broker.172.17.0.1.nip.io/ansible-service-broker/v2/catalog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブートストラップされたすべての APB 仕様の一覧および
localregistry-<bundle_name>
のラベルが付けられたものが表示されるはずです。出力の形式が JSON であるため、|grep <bundle_name>
を使用して検索することができます。
3.2.8.2. APB の実行 リンクのコピーリンクがクリップボードにコピーされました!
リモートクラスターを使用する際に制限があるため、apb push
コマンドが正常に実行されるかどうかに依存せずに apb run
コマンドと同じ機能を使用する必要がある場合があります。apb run
の場合はアプリケーションのプロビジョニングを試行する前に apb push
を暗黙的に実行します。
この問題の回避策として、以下を実行します。
APB のプッシュに説明される手順に従い、イメージを内部 OpenShift Container Platform レジストリーにプッシュします。イメージが存在している場合は、以下のように表示されるはずです。
oc get images | grep <bundle_name>
$ oc get images | grep <bundle_name> sha256:bfaa73a5e15bf90faec343c7d5f8cc4f952987afdbc3f11a24c54c037528d2ed 172.30.1.1:5000/openshift/<bundle_name>@sha256:bfaa73a5e15bf90faec343c7d5f8cc4f952987afdbc3f11a24c54c037528d2ed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロビジョニングを実行するには、
oc run
コマンドを使用して APB を起動します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- レジストリーは完全修飾ドメイン名 (FQDN) を決定するため、直前の手順で
oc get images
を実行する際に表示されるイメージのプル仕様を使用します。
3.2.9. 制限付き SCC の使用 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform イメージのビルド時に、アプリケーションを root ユーザーとして実行していないことは重要になります (可能な場合)。制限付き SCC で実行される場合、アプリケーションのイメージはランダム UID で起動します。これは、アプリケーションフォルダーが root ユーザーで所有されている場合には問題を生じさせます。
この問題の適切な回避策として、ユーザーを root グループに追加し、アプリケーションを root グループによって所有されるようにすることができます。任意のユーザー ID をサポートする方法についての詳細は、OpenShift Container Platform-Specific Guidelinesを参照してください。
以下は、/usr/src で実行されるノードアプリケーションの Dockerfile の例です。このコマンドは、アプリケーションが /usr/src にインストールされ、関連付けられた環境変数が設定された後に実行されます。
3.2.10. ConfigMap の APB 内での使用 リンクのコピーリンクがクリップボードにコピーされました!
Ansible モジュールのバグ対策として、Ansible から ConfigMaps を作成するために一時的な回避策を使用できます。
ConfigMaps の 1 つの一般的なユースケースとして、APB のパラメーターがアプリケーションまたはサービスの設定ファイル内で使用される場合があります。ConfigMap モジュールにより、ConfigMap を Pod にボリュームとしてマウントできます。これは設定ファイルを保存するために使用できます。 この方法では、ConfigMap を APB パラメーターから作成するために Ansible の テンプレート モジュール機能を活用することもできます。
以下は、ボリュームとして Pod にマウントされた Jinja テンプレートから ConfigMap を作成する例です。
3.2.11. エラーメッセージのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
プロビジョニング呼び出しが失敗すると、デフォルトのエラーメッセージが Web コンソールに返されます。以下に例を示します。
Error occurred during provision. Please contact administrator if the issue persists.
Error occurred during provision. Please contact administrator if the issue persists.
失敗した場合にトラブルシューティングに使用する詳細情報を提供するために、Web コンソールがチェックできる APB についてのカスタムエラーメッセージを作成し、これをユーザーに返せるようにすることができます。
Kubernetes は Pod が終了ログに対して致命的なイベントのログを記録できるようにします。ログファイルの場所は、Pod の仕様の terminationMessagePath
フィールドで設定され、デフォルトでは /dev/termination-log に設定されます。
ブローカーはこの終了ログでファイルに書き込まれたメッセージの有無を確認し、その内容をサービスカタログに渡します。Web コンソールは失敗が生じるとこれらのメッセージを表示します。
Pod の終了メッセージについての詳細は、Kubernetes ドキュメントを参照してください。
以下は、CloudFormation テンプレートを使用して、これを APB で実行する方法の例について示しています。
- name: Writing Termination Message shell: echo "[CloudFormation Error] - {{ ansible_failed_result.msg }}" > /dev/termination-log - fail: msg="[APB Failed Plain - '{{ _apb_plan_id }}'] "
- name: Writing Termination Message
shell: echo "[CloudFormation Error] - {{ ansible_failed_result.msg }}" > /dev/termination-log
- fail: msg="[APB Failed Plain - '{{ _apb_plan_id }}'] "
エラーが発生すると、このカスタムメッセージのサンプルは Pod が失敗する前にデフォルトの終了ログパスに書き込まれます。