第3章 アプリケーションの作成


3.1. テンプレートの使用

テンプレートを使用して、OpenShift Container Platform クラスター上に事前設定済みのアプリケーションをデプロイしたり、再利用可能なオブジェクト定義を作成したりできます。Web コンソールまたは CLI からテンプレートのアップロード、インスタンス化、作成を実行することで、アプリケーションの作成を高速化できます。

3.1.1. テンプレートについて

テンプレートを使用して、OpenShift Container Platform が Service オブジェクトや DeploymentConfig オブジェクトなどのリソースに処理する、再利用可能でパラメーター化されたオブジェクトセットを記述できます。テンプレートを使用すると、Web コンソールまたは CLI から同じアプリケーション構造を一貫してデプロイできます。

テンプレートは、プロジェクト内で作成権限を持つあらゆるものを作成するために処理できます。また、テンプレートではラベルのセットを定義して、これをテンプレート内に定義されたすべてのオブジェクトに適用できます。

3.1.2. テンプレートのアップロード

OpenShift Container Platform プロジェクトにテンプレートを追加するには、CLI を使用して JSON または YAML テンプレートファイルをアップロードします。アップロードされたテンプレートはプロジェクトのテンプレートライブラリーに保存され、そのプロジェクトへのアクセス権を持つユーザーはそれを使用できます。

手順

  • 次のいずれかの方法を使用してテンプレートをアップロードします。

    • 以下のコマンドを実行して、JSON または YAML テンプレートファイルを現在のプロジェクトのテンプレートライブラリーにアップロードします。

      $ oc create -f <filename>
    • 以下のコマンドを実行し、プロジェクトの名前と -n オプションを使用してテンプレートを別のプロジェクトにアップロードします。

      $ oc create -f <filename> -n <project>

      テンプレートは、Web コンソールまたは CLI を使用して選択できるようになりました。

3.1.3. Web コンソールを使用したアプリケーションの作成

OpenShift Container Platform クラスター上でテンプレートからアプリケーションを作成するには、Web コンソールの Developer Catalog を使用します。デプロイする前に、テンプレートまたはビルダーイメージを選択し、生成されたオブジェクトを設定します。

手順

  1. プロジェクトに移動して +Add をクリックします
  2. Developer Catalog タイルの All services をクリックします。
  3. Type の下の Builder Images をクリックして、利用可能なビルダーイメージを表示します。

    注記

    以下の例に示すように、builder タグがアノテーションにリスト表示されているイメージストリームタグのみがリストに表示されます。tags アノテーションに builder を含めることで、イメージストリームタグが Web コンソールでビルダーとして表示されるようになります。

    kind: "ImageStream"
    apiVersion: "image.openshift.io/v1"
    metadata:
      name: "ruby"
      creationTimestamp: null
    spec:
    # ...
      tags:
        - name: "2.6"
          annotations:
            description: "Build and run Ruby 2.6 applications"
            iconClass: "icon-ruby"
            tags: "builder,ruby"
            supports: "ruby:2.6,ruby"
            version: "2.6"
    # ...
  4. 新規アプリケーション画面で設定を変更し、オブジェクトをアプリケーションをサポートするように設定します。

3.1.4. CLI を使用してテンプレートからオブジェクトを作成する手順

CLI を使用して、テンプレートをプロジェクト内のオブジェクトリストに処理することで、OpenShift Container Platform クラスター上でテンプレートからオブジェクトを作成できます。CLI コマンドを使用して、テンプレートのラベル、パラメーター、および生成されたオブジェクトリストを管理します。

3.1.4.1. ラベルの追加

OpenShift Container Platform クラスターでテンプレートを処理する際にラベルを追加するには、oc process コマンドにラベルセレクターを渡します。テンプレートで指定されるラベルは、テンプレートから生成されるすべてのオブジェクトに適用されます。

ラベルは、Pod などの生成されたオブジェクトを管理し、整理するために使用されます。

手順

  • 以下のコマンドを実行して、テンプレートにラベルを追加します。

    $ oc process -f <filename> -l name=otherLabel

3.1.4.2. パラメーターのリスト表示

OpenShift Container Platform クラスター上でテンプレートパラメーターをリスト表示することで、テンプレートを処理する前にどの値をオーバーライドできるか確認できます。テンプレートファイルまたはアップロードしたテンプレート名を指定して、oc process --parameters コマンドを使用します。

手順

  • 以下のコマンドを実行して、ローカルテンプレートファイルからテンプレートパラメーターをリストします。

    $ oc process --parameters -f <filename>
  • 以下のコマンドを実行して、アップロードされたテンプレートからテンプレートパラメーターをリストします。

    $ oc process --parameters -n <project> <template_name>

    たとえば、デフォルトの openshift プロジェクトにある rails-postgresql-example クイックスタートテンプレートのパラメーターをリストするには、次のコマンドを実行します。

    $ oc process --parameters -n openshift rails-postgresql-example

    出力例

    NAME                         DESCRIPTION                                                                                              GENERATOR           VALUE
    SOURCE_REPOSITORY_URL        The URL of the repository with your application source code                                                                  https://github.com/sclorg/rails-ex.git
    SOURCE_REPOSITORY_REF        Set this to a branch name, tag or other ref of your repository if you are not using the default branch
    CONTEXT_DIR                  Set this to the relative path to your project if it is not in the root of your repository
    APPLICATION_DOMAIN           The exposed hostname that will route to the Rails service                                                                    rails-postgresql-example.openshiftapps.com
    GITHUB_WEBHOOK_SECRET        A secret string used to configure the GitHub webhook                                                     expression          [a-zA-Z0-9]{40}
    SECRET_KEY_BASE              Your secret key for verifying the integrity of signed cookies                                            expression          [a-z0-9]{127}
    APPLICATION_USER             The application user that is used within the sample application to authorize access on pages                                 openshift
    APPLICATION_PASSWORD         The application password that is used within the sample application to authorize access on pages                             secret
    DATABASE_SERVICE_NAME        Database service name                                                                                                        postgresql
    POSTGRESQL_USER              database username                                                                                        expression          user[A-Z0-9]{3}
    POSTGRESQL_PASSWORD          database password                                                                                        expression          [a-zA-Z0-9]{8}
    POSTGRESQL_DATABASE          database name                                                                                                                root
    POSTGRESQL_MAX_CONNECTIONS   database max connections                                                                                                     10
    POSTGRESQL_SHARED_BUFFERS    database shared buffers                                                                                                      12MB

    この出力から、テンプレートの処理時に正規表現のようなジェネレーターで生成された複数のパラメーターを特定できます。

3.1.4.3. オブジェクトリストの生成

OpenShift Container Platform クラスター上でテンプレートが作成するオブジェクトをプレビューするには、テンプレートを適用せずに oc process コマンドを実行します。プロジェクトでリソースを作成する前に、生成されたオブジェクトリストを確認し、ファイルに保存します。

手順

  • 以下のコマンドを実行して、オブジェクトのリストを標準出力に返すテンプレートを定義するファイルを処理します。

    $ oc process -f <filename>
  • 以下のコマンドを実行して、現在のプロジェクトでアップロードされたテンプレートを処理し、オブジェクトのリストを標準出力に返します。

    $ oc process <template_name>
  • 以下のコマンドを実行して、テンプレートを処理し、その出力を oc create にパイプして、テンプレートからオブジェクトを作成します。

    $ oc process -f <filename> | oc create -f -
  • 以下のコマンドを実行して、テンプレートを処理し、その出力を oc create にパイプして、現在のプロジェクトでアップロードされたテンプレートからオブジェクトを作成します。

    $ oc process <template> | oc create -f -
  • オーバーライドする <name>=<value> の各ペアに、-p オプションを追加することで、ファイルに定義されたパラメーターの値をオーバーライドできます。パラメーター参照は、テンプレートアイテム内のテキストフィールドに表示されます。

    たとえば、テンプレートの以下の POSTGRESQL_USER および POSTGRESQL_DATABASE パラメーターをオーバーライドし、カスタマイズされた環境変数の設定を出力します。

    • 以下のコマンドを実行して、テンプレートからオブジェクトのリストを作成します。

      $ oc process -f my-rails-postgresql \
          -p POSTGRESQL_USER=bob \
          -p POSTGRESQL_DATABASE=mydatabase
    • 以下のコマンドを実行して、処理された出力からオブジェクトを作成します。

      $ oc process -f my-rails-postgresql \
          -p POSTGRESQL_USER=bob \
          -p POSTGRESQL_DATABASE=mydatabase \
          | oc create -f -
      注記

      JSON 出力は、ファイルにリダイレクトすることも、oc create コマンドにパイプすることでテンプレートをアップロードせずに直接適用することもできます。

    • パラメーターの数が多い場合は、それらをファイルに保存してから、以下のコマンドを実行してそのファイルを oc process に渡すことができます。

      $ cat postgres.env
      $ oc process -f my-rails-postgresql --param-file=postgres.env

      出力例

      POSTGRESQL_USER=bob
      POSTGRESQL_DATABASE=mydatabase

    • 次のコマンドを実行して、--param-file オプションの値として "-" を指定することで、標準入力からパラメーター値を読み込むこともできます。

      $ sed s/bob/alice/ postgres.env | oc process -f my-rails-postgresql --param-file=-

3.1.5. アップロードしたテンプレートの変更

OpenShift Container Platform プロジェクトにすでに保存されているテンプレートを更新するには、テンプレートオブジェクトを編集し、既存のバージョンを置き換えます。更新されたテンプレートは、引き続きプロジェクトテンプレートライブラリーから再利用できます。

手順

  • 以下のコマンドを実行して、アップロード済みのテンプレートを変更します。

    $ oc edit template <template>

3.1.6. インスタントアプリとクイックスタートテンプレートの使用

OpenShift Container Platform クラスター上で instant-app テンプレートのサンプルアプリケーションを試用するには、テンプレートからアプリケーションを作成し、必要に応じてテンプレートのソースリポジトリーをフォークします。ビルド設定をカスタマイズして変更をテストし、アプリケーションを再ビルドします。

OpenShift Container Platform では、デフォルトのインスタントアプリとクイックスタートテンプレートを複数提供しており、これを使用することで各種言語で簡単に新規アプリケーションの構築を開始できます。Rails (Ruby)、Django (Python)、Node.js、CakePHP (PHP) および Dancer (Perl) 用のテンプレートを利用できます。クラスター管理者は、これらのテンプレートを利用できるようにデフォルトのグローバル openshift プロジェクトにこれらのテンプレートを作成している必要があります。

デフォルトで、テンプレートビルドは必要なアプリケーションコードが含まれる GitHub の公開ソースリポジトリーを使用して行われます。

手順

  1. 次のコマンドを実行して、利用可能なデフォルトのインスタントアプリケーションテンプレートとクイックスタートテンプレートのリストを表示します。

    $ oc get templates -n openshift
  2. ソースを、独自のバージョンのアプリケーションをビルドするように修正します。

    1. テンプレートのデフォルト SOURCE_REPOSITORY_URL パラメーターが参照するリポジトリーをフォークします。
    2. テンプレートから作成する場合には、SOURCE_REPOSITORY_URL パラメーターの値をオーバーライドします。デフォルト値ではなく、フォークを指定してください。

      これにより、テンプレートによって作成されたビルド設定が、アプリケーションコードのフォークを指すようになります。その後、必要に応じてコードを修正し、アプリケーションをリビルドできます。

      注記

      インスタントアプリケーションテンプレートやクイックスタートテンプレートの中には、データベースの DeploymentConfig オブジェクトを定義するものがあります。テンプレートが定義する設定では、データベースコンテンツ用に一時ストレージを使用します。データベース Pod が何らかの理由で再起動されると、データベースの全データが失われてしまうので、これらのテンプレートはデモ目的でのみ使用する必要があります。

3.1.6.1. クイックスタートテンプレート

OpenShift Container Platform クラスター上のサンプルアプリケーションテンプレートやクイックスタートテンプレートを参照するには、openshift プロジェクトのデフォルトテンプレートを確認します。これらのテンプレートを使用して、一般的な言語やフレームワーク向けのサンプルアプリケーションをデプロイします。

クイックスタートテンプレートは、OpenShift Container Platform で実行されるアプリケーションの基本的な例です。クイックスタートはさまざまな言語やフレームワークで提供されており、Service、BuildConfig、DeploymentConfig オブジェクトのセットから構成されるテンプレートで定義されています。このテンプレートは、必要なイメージやソースリポジトリーを参照して、アプリケーションをビルドし、デプロイします。

管理者がこれらのテンプレートを OpenShift Container Platform クラスターにすでにインストールしている必要がありますが、その場合には、Web コンソールからこれを選択できます。

クイックスタートは、アプリケーションのソースコードを含むソースリポジトリーを参照します。クイックスタートをカスタマイズするには、リポジトリーをフォークし、テンプレートからアプリケーションを作成する時に、デフォルトのソースリポジトリー名をフォークしたリポジトリーに置き換えます。これにより、提供されたサンプルのソースではなく、独自のソースコードを使用してビルドが実行されます。ソースリポジトリーでコードを更新し、新しいビルドを起動して、デプロイされたアプリケーションで変更が反映されていることを確認できます。

3.1.6.1.1. Web フレームワーククイックスタートテンプレート

以下のクイックスタートテンプレートでは、指定のフレームワークおよび言語の基本アプリケーションを提供します。

  • CakePHP: PHP Web フレームワーク (MySQL データベースを含む)
  • Dancer: Perl Web フレームワーク (MySQL データベースを含む)
  • Django: Python Web フレームワーク (PostgreSQL データベースを含む)
  • NodeJS: NodeJS web アプリケーション (MongoDB データベースを含む)
  • Rails: Ruby Web フレームワーク (PostgreSQL データベースを含む)

3.1.7. テンプレートの作成

OpenShift Container Platform クラスター上で再利用可能なアプリケーションテンプレートを定義するには、デプロイするリソースと、それらの作成をガイドするメタデータをリストした Template オブジェクトを作成します。

独自のテンプレートを作成する前に、以下のサンプル YAML を使用して構造を確認します。

apiVersion: template.openshift.io/v1
kind: Template
metadata:
  name: redis-template
  annotations:
    description: "Description"
    iconClass: "icon-redis"
    tags: "database,nosql"
objects:
- apiVersion: v1
  kind: Pod
  metadata:
    name: redis-master
  spec:
    containers:
    - env:
      - name: REDIS_PASSWORD
        value: ${REDIS_PASSWORD}
      image: dockerfile/redis
      name: master
      ports:
      - containerPort: 6379
        protocol: TCP
parameters:
- description: Password used for Redis authentication
  from: '[A-Z0-9]{8}'
  generate: expression
  name: REDIS_PASSWORD
labels:
  redis: master

3.1.7.1. テンプレート記述の作成

Web コンソールでユーザーがテンプレートを容易に見つけ、理解できるように、表示名、タグ、アイコンクラスなどの説明メタデータを追加します。目的、注意点、および関連リンクを文書化するには、このリファレンスに記載されているアノテーションを使用します。

以下は、テンプレート記述メタデータの例です。

kind: Template
apiVersion: template.openshift.io/v1
metadata:
  name: cakephp-mysql-example
  annotations:
    openshift.io/display-name: "CakePHP MySQL Example (Ephemeral)"
    description: >-
      An example CakePHP application with a MySQL database. For more information
      about using this template, including OpenShift considerations, see
      https://github.com/sclorg/cakephp-ex/blob/master/README.md.


      WARNING: Any data stored will be lost upon pod destruction. Only use this
      template for testing."
    openshift.io/long-description: >-
      This template defines resources needed to develop a CakePHP application,
      including a build configuration, application DeploymentConfig, and
      database DeploymentConfig.  The database is stored in
      non-persistent storage, so this configuration should be used for
      experimental purposes only.
    tags: "quickstart,php,cakephp"
    iconClass: icon-php
    openshift.io/provider-display-name: "Red Hat, Inc."
    openshift.io/documentation-url: "https://github.com/sclorg/cakephp-ex"
    openshift.io/support-url: "https://access.redhat.com"
message: "Your admin credentials are ${ADMIN_USERNAME}:${ADMIN_PASSWORD}"

各項目の説明:

metadata.name
テンプレートの一意の名前を指定します。
metadata.annotations.openshift.io/display-name
ユーザーインターフェイスで利用できるように、ユーザーに分かりやすく、簡単な名前を指定します。
metadata.annotations.description
テンプレートの説明を指定します。デプロイされる内容、デプロイ前に知っておく必要のある注意点をユーザーが理解できるように詳細を追加します。README ファイルなど、追加情報へのリンクも追加します。改行を追加すると、段落を作成できます。
metadata.annotations.openshift.io/long-description
追加のテンプレートの説明を指定します。これはサービスカタログに表示される可能性があります。
metadata.annotations.tags
検索およびグループ化を実行するためにテンプレートに関連付けられるタグを指定します。テンプレートを、提供されているカタログカテゴリーのいずれかに分類するタグを追加します。コンソールの定数ファイルの CATALOG_CATEGORIES で id および categoryAliases を参照してください。カテゴリーはクラスター全体に対してカスタマイズすることもできます。
metadata.annotations.iconClass

Web コンソールでテンプレートと一緒に表示されるアイコンを指定します。

以下は、利用可能なアイコンのリストです。

  • icon-3scale
  • icon-aerogear
  • icon-amq
  • icon-angularjs
  • icon-ansible
  • icon-apache
  • icon-beaker
  • icon-camel
  • icon-capedwarf
  • icon-cassandra
  • icon-catalog-icon
  • icon-clojure
  • icon-codeigniter
  • icon-cordova
  • icon-datagrid
  • icon-datavirt
  • icon-debian
  • icon-decisionserver
  • icon-django
  • icon-dotnet
  • icon-drupal
  • icon-eap
  • icon-elastic
  • icon-erlang
  • icon-fedora
  • icon-freebsd
  • icon-git
  • icon-github
  • icon-gitlab
  • icon-glassfish
  • icon-go-gopher
  • icon-golang
  • icon-grails
  • icon-hadoop
  • icon-haproxy
  • icon-helm
  • icon-infinispan
  • icon-jboss
  • icon-jenkins
  • icon-jetty
  • icon-joomla
  • icon-jruby
  • icon-js
  • icon-knative
  • icon-kubevirt
  • icon-laravel
  • icon-load-balancer
  • icon-mariadb
  • icon-mediawiki
  • icon-memcached
  • icon-mongodb
  • icon-mssql
  • icon-mysql-database
  • icon-nginx
  • icon-nodejs
  • icon-openjdk
  • icon-openliberty
  • icon-openshift
  • icon-openstack
  • icon-other-linux
  • icon-other-unknown
  • icon-perl
  • icon-phalcon
  • icon-php
  • icon-play
  • iconpostgresql
  • icon-processserver
  • icon-python
  • icon-quarkus
  • icon-rabbitmq
  • icon-rails
  • icon-redhat
  • icon-redis
  • icon-rh-integration
  • icon-rh-spring-boot
  • icon-rh-tomcat
  • icon-ruby
  • icon-scala
  • icon-serverlessfx
  • icon-shadowman
  • icon-spring-boot
  • icon-spring
  • icon-sso
  • icon-stackoverflow
  • icon-suse
  • icon-symfony
  • icon-tomcat
  • icon-ubuntu
  • icon-vertx
  • icon-wildfly
  • icon-windows
  • icon-wordpress
  • icon-xamarin
  • icon-zend
metadata.annotations.openshift.io/provider-display-name
テンプレートを提供する人または組織の名前を指定します。
metadata.annotations.openshift.io/documentation-url
テンプレートに関する他のドキュメントを参照する URL を指定します。
metadata.annotations.openshift.io/support-url
テンプレートに関するサポートを受けることができる URL を指定します。
message
テンプレートがインスタンス化された時に表示される説明メッセージを指定します。このフィールドで、新規作成されたリソースの使用方法をユーザーに通知します。生成された認証情報や他のパラメーターを出力に追加できるように、メッセージの表示前にパラメーターの置換が行われます。ユーザーが従うべき次の手順が記載されたドキュメントへのリンクを追加してください。

3.1.7.2. テンプレートラベルの作成

テンプレートから作成されたすべてのオブジェクトにラベルを付けるには、テンプレート定義に labels セクションを追加します。パラメーター化したラベルを使用することで、ユーザーはテンプレートから作成されたリソースを識別および管理できます。

以下は、テンプレートオブジェクトのラベルの例です。

kind: "Template"
apiVersion: "v1"
...
labels:
  template: "cakephp-mysql-example"
  app: "${NAME}"

各項目の説明:

labels.template
このテンプレートから作成する全オブジェクトに適用されるラベルを指定します。
labels.app
パラメーター化されたラベルを指定します。このラベルは、このテンプレートを基に作成された全オブジェクトに適用されます。パラメーターは、ラベルキーおよび値の両方で拡張されます。

3.1.7.3. テンプレートパラメーターの作成

テンプレートを処理する際にカスタマイズするには、デフォルト値または生成値を持つパラメーターを定義し、テンプレートフィールドでそれらを参照します。文字列または JSON 置換構文を使用して、ユーザー固有の値を作成されたオブジェクトに渡します。

パラメーターを使用すると、ユーザーが値を指定することも、テンプレート処理時に値が生成されるようにすることもできます。パラメーターが参照されると、値が置換されます。参照は、オブジェクト一覧フィールドであればどこでも定義できます。これは、無作為にパスワードを作成したり、テンプレートのカスタマイズに必要なユーザー固有の値やホスト名を指定したりできるので便利です。パラメーターは、2 種類の方法で参照可能です。

  • 文字列の値として、テンプレートの文字列フィールドに ${PARAMETER_NAME} の形式で配置する
  • JSON/YAML の値として、テンプレートのフィールドに ${{PARAMETER_NAME}} の形式で配置する

${PARAMETER_NAME} 構文を使用すると、複数のパラメーター参照を 1 つのフィールドに統合でき、"http://${PARAMETER_1}${PARAMETER_2}" などのように、参照を固定データ内に埋め込むことができます。どちらのパラメーター値も置換されて、引用された文字列が最終的な値になります。

${{PARAMETER_NAME}} 構文のみを使用する場合は、単一のパラメーター参照のみが許可され、先頭文字や終了文字は使用できません。結果の値は、置換後に結果が有効な JSON オブジェクトの場合は引用されません。結果が有効な JSON 値でない場合に、結果の値は引用され、標準の文字列として処理されます。

単一のパラメーターは、テンプレート内で複数回参照でき、1 つのテンプレート内で両方の置換構文を使用して参照することができます。

デフォルト値を指定でき、ユーザーが別の値を指定していない場合に使用されます。

以下は、明示的な値をデフォルト値として設定する例です。

parameters:
  - name: USERNAME
    description: "The user name for Joe"
    value: joe

パラメーター値は、パラメーター定義に指定したルールを基に生成することも可能です。

parameters:
  - name: PASSWORD
    description: "The random user password"
    generate: expression
    from: "[a-zA-Z0-9]{12}"

上記の例では、処理後に、英字の大文字、小文字、数字をすべて含む 12 文字長のパスワードが無作為に作成されます。

利用可能な構文は、完全な正規表現構文ではありません。ただし、\w、\d、\a、および \A 修飾子を使用できます。

  • [\w]{10} は、10 桁の英字、数字、およびアンダースコアを生成します。これは PCRE 標準に準拠し、[a-zA-Z0-9_]{10} に相当します。
  • [\d]{10} は 10 桁の数字を生成します。これは [0-9]{10} に相当します。
  • [\a]{10} は 10 桁の英字を生成します。これは [a-zA-Z]{10} に相当します。
  • [\A]{10} は 10 の句読点または記号文字を生成します。これは [~!@#$%\^&*()\-_+={}\[\]\\|<,>.?/"';:`]{10} に相当します。
注記

テンプレートが YAML 形式と JSON 形式のどちらで記述されているかによって、バックスラッシュを 2 つ目のバックスラッシュでエスケープする必要がある場合があります。これは、修飾子が埋め込まれている文字列の種類にも依存します。以下は例になります。

修飾子を含む YAML テンプレートの例

  parameters:
  - name: singlequoted_example
    generate: expression
    from: '[\A]{10}'
  - name: doublequoted_example
    generate: expression
    from: "[\\A]{10}"

修飾子を含む JSON テンプレートの例

{
    "parameters": [
       {
        "name": "json_example",
        "generate": "expression",
        "from": "[\\A]{10}"
       }
    ]
}

以下は、パラメーター定義と参照を含む完全なテンプレートの例です。

kind: Template
apiVersion: template.openshift.io/v1
metadata:
  name: my-template
objects:
  - kind: BuildConfig
    apiVersion: build.openshift.io/v1
    metadata:
      name: cakephp-mysql-example
      annotations:
        description: Defines how to build the application
    spec:
      source:
        type: Git
        git:
          uri: "${SOURCE_REPOSITORY_URL}"
          ref: "${SOURCE_REPOSITORY_REF}"
        contextDir: "${CONTEXT_DIR}"
  - kind: DeploymentConfig
    apiVersion: apps.openshift.io/v1
    metadata:
      name: frontend
    spec:
      replicas: "${{REPLICA_COUNT}}"
parameters:
  - name: SOURCE_REPOSITORY_URL
    displayName: Source Repository URL
    description: The URL of the repository with your application source code
    value: https://github.com/sclorg/cakephp-ex.git
    required: true
  - name: GITHUB_WEBHOOK_SECRET
    description: A secret string used to configure the GitHub webhook
    generate: expression
    from: "[a-zA-Z0-9]{40}"
  - name: REPLICA_COUNT
    description: Number of replicas to run
    value: "2"
    required: true
message: "... The GitHub webhook secret is ${GITHUB_WEBHOOK_SECRET} ..."

各項目の説明:

spec.git.uri
テンプレート処理時に、SOURCE_REPOSITORY_URL パラメーターの値で置き換える値を指定します。
spec.replicas
テンプレート処理時に、引用符なしの REPLICA_COUNT パラメーター値で置き換える値を指定します。
parameters.name
パラメーターの名前を指定します。この値は、テンプレート内でパラメーターを参照するのに使用します。
parameters.displayName
パラメーターの分かりやすい名前を指定します。これは、ユーザーに表示されます。
parameters.description
パラメーターの説明を指定します。期待値に対する制約など、パラメーターの目的を詳細にわたり説明します。説明文は、コンソールテキストの標準に準拠するため、完全な文章で記述します。表示名と同じ内容を使用しないでください。
parameters.value
テンプレート処理時に値をオーバーライドしない場合に使用される、パラメーターのデフォルト値を指定します。パスワードなどのデフォルト値の使用を避けるようにしてください。シークレットと組み合わせた生成パラメーターを使用するようにしてください。
parameters.required
このパラメーターが必須であることを指定します。つまり、空の値でオーバーライドすることはできません。パラメーターでデフォルト値または生成値が指定されていない場合には、ユーザーは値を指定する必要があります。
parameters.generate
生成されたパラメーター値であることを指定します。
parameters.from
ジェネレーターへの入力を指定します。この場合、ジェネレーターは、大文字、小文字を含む 40 桁の英数字の値を生成します。
message
テンプレートメッセージにパラメーターを含めることができることを指定します。このフィールドには、生成された値についての情報が示されます。

3.1.7.4. テンプレートオブジェクトリストの作成

テンプレートの処理時に何が作成されるかを指定するには、デプロイする API リソースを含む objects リストを定義します。パラメーター値は、作成前に各オブジェクト定義に置き換えられます。

以下は、オブジェクトリストの例です。

kind: "Template"
apiVersion: "v1"
metadata:
  name: my-template
objects:
  - kind: "Service"
    apiVersion: "v1"
    metadata:
      name: "cakephp-mysql-example"
      annotations:
        description: "Exposes and load balances the application pods"
    spec:
      ports:
        - name: "web"
          port: 8080
          targetPort: 8080
      selector:
        name: "cakephp-mysql-example"

各項目の説明:

objects.kind
サービスの定義を指定します。このテンプレートにより作成されます。
注記

オブジェクト定義のメタデータに namespace フィールドの固定値が含まれる場合、フィールドはテンプレートのインスタンス化の際に定義から取り除かれます。namespace フィールドにパラメーター参照が含まれている場合、通常のパラメーター置換が実行され、結果として得られた namespace にオブジェクトが作成されます。そのためには、ユーザーがその namespace にオブジェクトを作成する権限を持っている必要があります。

3.1.7.5. テンプレートをバインド可能としてマーキングする

エンドユーザーがテンプレートからプロビジョニングされたサービスとバインドできないようにするには、テンプレートオブジェクトに template.openshift.io/bindable: "false" アノテーションを追加します。デフォルトでは、テンプレートサービスブローカーは、各テンプレートサービスをサービスカタログ内でバインド可能として公開します。

手順

  • template.openshift.io/bindable: "false" のアノテーションをテンプレートに追加して、エンドユーザーが指定のテンプレートからプロビジョニングされるサービスをバインドできないようにできます。

3.1.7.6. テンプレートオブジェクトフィールドの公開

ユーザーがテンプレートサービスにバインドしたときに接続の詳細を返すには、ConfigMap、Secret、Service、または Route オブジェクトに template.openshift.io/expose- または template.openshift.io/base64-expose- アノテーションを追加します。バインディングクライアントは、必要な認証情報とエンドポイントを直接受け取ります。

各アノテーションキーは、bind 応答のキーになるように、プレフィックスが削除されてパススルーされます。

各アノテーションの値は Kubernetes JSONPath 式の値であり、バインド時に解決され、bind 応答で返される値が含まれるオブジェクトフィールドを指定します。

注記

バックスラッシュでエスケープしない限り、Kubernetes の JSONPath 実装は表現内のどの場所に使用されていても、.、@ などはメタ文字として解釈します。そのため、たとえば my.key という名前の ConfigMap データを参照するには、JSONPath 式は {.data['my\.key']} とする必要があります。JSONPath 式が YAML でどのように記述されているかによって、"{.data['my\\.key']}" などのように、追加でバックスラッシュが必要になる場合があります。

以下は、公開されるさまざまなオブジェクトのフィールドの例です。

kind: Template
apiVersion: template.openshift.io/v1
metadata:
  name: my-template
objects:
- kind: ConfigMap
  apiVersion: v1
  metadata:
    name: my-template-config
    annotations:
      template.openshift.io/expose-username: "{.data['my\\.username']}"
  data:
    my.username: foo
- kind: Secret
  apiVersion: v1
  metadata:
    name: my-template-config-secret
    annotations:
      template.openshift.io/base64-expose-password: "{.data['password']}"
  stringData:
    password: <password>
- kind: Service
  apiVersion: v1
  metadata:
    name: my-template-service
    annotations:
      template.openshift.io/expose-service_ip_port: "{.spec.clusterIP}:{.spec.ports[?(.name==\"web\")].port}"
  spec:
    ports:
    - name: "web"
      port: 8080
- kind: Route
  apiVersion: route.openshift.io/v1
  metadata:
    name: my-template-route
    annotations:
      template.openshift.io/expose-uri: "http://{.spec.host}{.spec.path}"
  spec:
    path: mypath
注記

Bind 応答のキーと値のペアは、環境変数として、システムの他の場所で使用できます。そのため、プレフィックスが削除されたアノテーションキーは、それぞれ有効な環境変数名である必要があります。有効な名前は、A-Z、a-z、または _ の文字で始まり、その後に A-Z、a-z、0-9、または _ の文字が 0 個以上続きます。

前述の部分的なテンプレートでの bind 操作に対する応答例は以下のようになります。

{
  "credentials": {
    "username": "foo",
    "password": "YmFy",
    "service_ip_port": "172.30.12.34:8080",
    "uri": "http://route-test.router.default.svc.cluster.local/mypath"
  }
}

手順

  • template.openshift.io/expose- アノテーションを使用して、値を文字列として返します。この手法では、任意のバイナリーデータは処理できません。
  • バイナリーデータを返す必要がある場合、template.openshift.io/base64-expose- アノテーションを使用して、データが返される前にデータを Base64 でエンコードします。

3.1.7.7. テンプレートの準備ができるまで待機する

主要なリソースが準備できるまでテンプレートからのリソース作成を遅らせるには、サポートされているオブジェクトの種類に template.alpha.openshift.io/wait-for-ready: "true" アノテーションを追加します。サービスカタログ、テンプレートサービスブローカー、および TemplateInstance API は、アノテーション付きオブジェクトが準備完了を報告するまで待機します。

手順を開始する前に、次の考慮事項をお読みください。

  • アプリケーションにスムーズに実行するのに十分なリソースが提供されるようにメモリー、CPU、およびストレージのデフォルトサイズを設定します。
  • latest タグが複数のメジャーバージョンで使用されている場合には、イメージからこのタグを参照しないようにします。新規イメージがそのタグにプッシュされると、実行中のアプリケーションが破損してしまう可能性があります。
  • 適切なテンプレートの場合、テンプレートのデプロイ後に変更する必要なしに、ビルドおよびデプロイが正常に行われます。

手順

  • テンプレート機能を使用するには、テンプレート内の Build、BuildConfig、Deployment、DeploymentConfig、Job、または StatefulSet の種類のオブジェクト 1 つ以上に、以下のアノテーションでマークを付けます。

    "template.alpha.openshift.io/wait-for-ready": "true"

    テンプレートからリソース作成は、アノテーションのマークが付けられたすべてのオブジェクトが準備できたと報告されるまで、完了しません。同様に、アノテーションが付けられたオブジェクトが失敗したと報告されるか、固定タイムアウトである 1 時間以内にテンプレートの準備が整わなかった場合に、テンプレートからのリソース作成は失敗します。

    テンプレートからリソースを作成する場合、各オブジェクトの種類における準備完了と失敗は、次のように定義されます。

    Kind準備状態 (Readiness)失敗 (Failure)

    Build

    オブジェクトが Complete フェーズを報告する

    オブジェクトが Canceled、Error、または Failed を報告する

    BuildConfig

    関連付けられた最新のビルドオブジェクトが Complete フェーズを報告する

    関連付けられた最新のビルドオブジェクトが Canceled、Error、または Failed を報告する

    Deployment

    オブジェクトは、新しいレプリカセットとデプロイメントが利用可能であると報告する。これにより、オブジェクトで定義される readiness プローブが有効になります。

    オブジェクトで、Progressing の状態が false であると報告される

    DeploymentConfig

    オブジェクトは新規レプリケーションコントローラーおよびデプロイメントが利用可能であると報告する。これにより、オブジェクトで定義される readiness プローブが有効になります。

    オブジェクトで、Progressing の状態が false であると報告される

    Job

    オブジェクトが完了 (completion) を報告する

    オブジェクトが 1 つ以上の失敗が発生したことを報告する

    StatefulSet

    オブジェクトはすべてのレプリカが Ready であることを報告するこれにより、オブジェクトで定義される readiness プローブが有効になります。

    該当なし

    以下は、テンプレートサンプルを一部抜粋したものです。この例では、wait-for-ready アノテーションが使用されています。他のサンプルは、OpenShift Container Platform クイックスタートテンプレートにあります。

    kind: Template
    apiVersion: template.openshift.io/v1
    metadata:
      name: my-template
    objects:
    - kind: BuildConfig
      apiVersion: build.openshift.io/v1
      metadata:
        name: ...
        annotations:
          # wait-for-ready used on BuildConfig ensures that creating resources from the template
          # fails immediately if the build fails
          template.alpha.openshift.io/wait-for-ready: "true"
      spec:
        ...
    - kind: DeploymentConfig
      apiVersion: apps.openshift.io/v1
      metadata:
        name: ...
        annotations:
          template.alpha.openshift.io/wait-for-ready: "true"
      spec:
        ...
    - kind: Service
      apiVersion: v1
      metadata:
        name: ...
      spec:
        ...

3.1.7.8. 既存オブジェクトからのテンプレートの作成

プロジェクト内の既存オブジェクトからテンプレートを作成するには、それらのオブジェクトをエクスポートし、パラメーターやその他のテンプレートのカスタマイズを追加します。デプロイ済みのリソースを再利用することで、他のユーザーがテンプレートから一貫してデプロイできる、動作する設定を確保できます。

手順

  • 以下のコマンドを実行して、プロジェクト内のオブジェクトをエクスポートします。

    $ oc get -o yaml all > <yaml_filename>

    all ではなく、特定のリソースタイプや複数のリソースを置き換えることも可能です。他の例は、oc get -h を実行してください。

    oc get -o yaml all に含まれるオブジェクトタイプは以下の通りです。

    • BuildConfig
    • Build
    • DeploymentConfig
    • ImageStream
    • Pod
    • ReplicationController
    • Route
    • Service

      注記

      コンテンツはクラスターやバージョンによって異なる可能性があるため、all エイリアスの使用は推奨されません。代わりに、必要なすべてのリソースを指定してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る