type
status
date
slug
summary
tags
category
icon
password
书籍
目標
複数のコンテナイメージを使用してコンテナ化されたアプリケーションを OpenShift にデプロイする。
学習目標(Objectives)
- テンプレート を使用して、OpenShift 上に マルチコンテナアプリケーション をデプロイする。
セクション(Sections)
- OpenShift でのマルチコンテナアプリケーションのデプロイ(ガイド付き演習を含む)
ラボ(Lab)
- マルチコンテナアプリケーションのデプロイ演習
この章では、複数のコンテナを組み合わせたアプリケーション のデプロイ方法を学びます。OpenShift では、テンプレート を利用して、データベース + Web アプリなどの複数のコンテナが連携するアプリケーションを効率的に管理・デプロイできます。💡
OpenShift におけるマルチコンテナアプリケーションのデプロイ
目標(Objective)
このセクションを完了すると、テンプレート を使用して OpenShift に マルチコンテナアプリケーション をデプロイできるようになります。
テンプレートの基本構造の確認
OpenShift Container Platform では、アプリケーションを テンプレート を使ってデプロイすることが可能です。
テンプレートは、一連の OpenShift リソースの定義 と、それらの パラメータ を記述したものです。
テンプレートの特徴
- OpenShift クラスタ内のプロジェクトでリソースを作成する権限があれば、どのリソースでも含めることができる。
- アプリケーションの構成をまとめて管理 できる(例:Web アプリ + データベース + 必要なサービス)。
- 変数(パラメータ)を使用して、デプロイ時に動的に値を設定 できる。
- 例:データベースのパスワードを自動生成
- テンプレートを利用することで、環境構築が簡単 になる。
テンプレートの事例:MySQL(永続ストレージ付き)
OpenShift には、デフォルトで openshift 名前空間にいくつかのテンプレートが用意されています。
以下のコマンドで、それらを一覧表示できます。
📌 テンプレートの例(一部)
テンプレート名 | 説明 |
cakephp-mysql-persistent | CakePHP + MySQL アプリケーション |
django-psql-persistent | Django + PostgreSQL アプリケーション |
mysql-persistent | MySQL データベース(永続ストレージ付き) |
nodejs-mongo-persistent | Node.js + MongoDB アプリケーション |
MySQL テンプレートの構造(例)
📌 ポイント
DATABASE_SERVICE_NAME
などのパラメータを使用し、デプロイ時にカスタマイズ可能。
MYSQL_PASSWORD
はランダムに生成される。
PersistentVolumeClaim
を定義して、データが永続化される。
カスタムテンプレートのアップロード方法
独自のテンプレートを OpenShift に追加するには、以下の
oc create -f
コマンドを使用します。デフォルトでは、現在のプロジェクト にテンプレートが作成されます。
n openshift
オプションを付けると、OpenShift の共通テンプレートとして登録できます。
⚠️ 重要
openshift
名前空間に作成したテンプレートは、Web コンソールの 「Add to Project」メニュー から利用可能。
- 現在のプロジェクト に作成した場合、そのプロジェクト内でのみ利用できる。
パラメーター
テンプレートは、一連の パラメーター(parameters) を定義し、それぞれに値を割り当てます。テンプレート内で定義された OpenShift のリソースは、名前付きパラメーターを参照することで設定値を取得できます。
パラメーターには デフォルト値 を設定できますが、必須ではありません。デフォルト値は、テンプレートを処理するときに別の値に置き換えることができます。
各パラメーターの値は、以下のいずれかの方法で設定できます。
oc process
コマンドを使用して 明示的に設定する。
- OpenShift によって、パラメーターの設定に基づいて自動生成される。
oc process
とは?
oc process
は、OpenShift のテンプレートを処理するためのコマンド です。テンプレートには、アプリの設定や環境変数、必要なリソース などが定義されていますが、
そのままではアプリをデプロイできません。
そこで
oc process
を使って、具体的な Kubernetes リソース定義に変換 する必要があります。なぜ oc process
が必要なのか?
OpenShift のテンプレート(Template)は、再利用可能なアプリの設定ファイルです。
テンプレートには、以下のような情報が含まれています:
✅ デプロイするアプリの種類(例:MySQL、Nginx など)
✅ 環境変数(例:データベースのユーザー名、パスワード)
✅ 作成するリソース(例:Pod、Service、Persistent Volume)
ただし!
テンプレートには変数(プレースホルダー)が含まれているため、そのままでは使えません。
たとえば、
MYSQL_USER=${MYSQL_USER}
のような変数が入っています。この変数を実際の値に置き換えるのが
oc process
の役割 です。oc process
の基本的な使い方
1️⃣ ローカルのテンプレートを処理する
意味:
mysql-template.json
のテンプレートを処理して、Kubernetes のリソース定義に変換する。2️⃣ OpenShift 内のテンプレートを処理する
意味:
openshift
プロジェクト内の mysql-template
を処理し、Kubernetes のリソース定義を生成する。処理結果のイメージ
例えば、以下のような
mysql-template.json
があったとします:このテンプレートを
oc process
で処理すると:すると、変数
${MYSQL_USER}
と ${MYSQL_PASSWORD}
が実際の値に置き換わります:💡 ポイント:
oc process
は テンプレートを実際のリソース定義に変換するだけ で、まだアプリはデプロイされていません!oc process
でアプリをデプロイする方法
処理結果を
oc create
に渡せば、アプリを実際にデプロイできます:処理の流れ:
1️⃣
oc process -f mysql-template.json
でテンプレートを処理し、リソース定義を生成2️⃣
|
(パイプ)で結果を oc create -f -
に渡す3️⃣
oc create
によって アプリが実際にデプロイされる! 🎉まとめ
コマンド | 説明 |
oc process -f template.json | ローカルのテンプレートを処理し、リソース定義を生成 |
oc process template-name -n openshift | OpenShift 内のテンプレートを処理 |
`oc process -f template.json | oc create -f -` |
簡単なイメージ
💡
oc process
を「レシピの翻訳」に例えると…- テンプレート = 料理のレシピ(でも材料が「${MEAT}」みたいに変数になっている)
oc process
= レシピの材料を「牛肉」や「豚肉」に置き換える(翻訳)
oc create
= 実際に料理を作る(アプリをデプロイする)
つまり:
これは…
📖 「レシピを翻訳」 → 🍳 「料理を作る」 → 🍽 「完成!」 🎉
こう考えると分かりやすいですね 😆
テンプレートのパラメーターを確認する方法
テンプレートに含まれるパラメーターの一覧を確認する方法は 2 つ あります。
① oc describe
コマンドを使用する
以下のコマンドを実行すると、テンプレートに含まれるパラメーターが表示されます。
出力例
💡 補足
${DATABASE_SERVICE_NAME}
のように、変数の形で定義された値は、テンプレート処理時に実際の値に置き換えられます。
- デフォルトの MySQL ユーザー名とパスワードが自動生成される場合がある ので、出力結果を確認することが重要です。
② oc process --parameters
コマンドを使用する
oc process --parameters
コマンドを使用すると、よりシンプルな形式でパラメーターの一覧を取得できます。出力例
💡 ポイント
MYSQL_USER
やMYSQL_PASSWORD
にはGENERATOR
列があり、OpenShift によって自動生成 されることがわかります。
VALUE
列にデフォルト値が設定されているものもあり、デフォルト値を変更することも可能です。
Persistent Volume (PV) と Persistent Volume Claim (PVC)
コンテナが実行中にデータを保存しても、コンテナが削除されるとそのデータは失われます。これは、コンテナが揮発性のストレージ空間で動作しているためです。
多くの場合、データの損失を防ぐために永続的なストレージが求められます。例えば、データベースコンテナを実行する際に、データベースのエントリーをコンテナの寿命とは独立して保持することは非常に重要です。
Docker と OpenShift Container Platform は、このストレージの問題に対してそれぞれ異なる解決策を提供しています。
- Docker では、バインドマウント(bind mount) 機能を使用して、コンテナのための永続的なストレージを定義します。バインドマウントには以下の 2 つの方法があります:
- Docker ホスト上に新しい空のディレクトリを作成し、それをコンテナにマウントする。
- 既存のディレクトリをコンテナにマウントする(この場合、
svirt_sandbox_file_t
の SELinux コンテキストを設定する必要があります)。
- OpenShift Container Platform では、Persistent Volume(PV) と Persistent Volume Claim(PVC) を実装し、Pod コンテナに永続的なストレージを提供します。
- Persistent Volume(PV) は、OpenShift クラスタ全体で使用できるリソースであり、通常は外部のストレージアレイをバックエンドとして使用します。
- PV は、NFS、iSCSI、Red Hat Gluster Storage、Red Hat Ceph Storage などのさまざまなストレージバックエンドをサポートしています(プラグイン経由で対応)。
- Persistent Volume Claim(PVC) は、OpenShift のプロジェクト(または Kubernetes の名前空間)内で、ユーザーが PV を利用するために発行するリクエストです。
- PVC を通じて PV を Pod にバインドすることで、永続的なストレージを利用できます。
- なお、PV はクラスタ全体のリソースであるため、管理できるのは
cluster-admin
権限を持つユーザーのみです。
テンプレートの処理(CLI を使用)
新しいアプリケーションを作成する際には、テンプレートを処理してリソースのリストを生成する必要があります。
テンプレートの処理には
oc process
コマンドを使用します:このコマンドは、JSON または YAML 形式のテンプレートを処理し、リソースのリストを標準出力に出力します。
また、現在のプロジェクトや
openshift
プロジェクトにあるテンプレートを直接処理することも可能です:注意点:
oc process
コマンドの出力は、ファイルにリダイレクトして保存することができます:テンプレートは パラメータを利用して異なる値を生成 できます。パラメータを上書きするには、
-p
オプションを使用し、<name>=<value>
形式で指定します:上記のコマンドは、指定されたパラメータを使用してテンプレートを処理し、結果を
mysqlProcessed.json
に保存します。次に、この JSON ファイルを使ってアプリケーションを作成できます:
または、ファイルを保存せずに直接処理して適用することも可能です:
openshift
プロジェクト内のテンプレートを処理する際の制約
通常のユーザー (
regularUser
) は、oc process
コマンドを使って openshift
プロジェクト内のテンプレートを直接処理することはできません:この場合、以下のエラーが発生します:
解決策:
- テンプレートをエクスポートしてローカルファイルとして処理する
openshift//
をプレフィックスとして指定する
oc new-app
コマンドを使用して、テンプレートから直接アプリケーションを作成する
参考情報
さらに詳しい情報は、以下の OpenShift Container Platform ドキュメントを参照してください。
🔹 アーキテクチャに関する情報
🔹 開発者向けの情報(テンプレートに関する詳細)
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/1a7d7ae8-88e2-8043-ae2a-c4477d72dbfa
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章