アプリケーションのビルド
アプリケーション向けの Red Hat OpenShift Service on AWS の設定
概要
第1章 アプリケーションのビルドの概要
Red Hat OpenShift Service on AWS を使用すると、Web コンソールまたはコマンドラインインターフェイス (CLI) を使用してアプリケーションを作成、編集、削除、および管理できます。
1.1. プロジェクトの使用
プロジェクトを使用すると、アプリケーションを分離して編成および管理できます。Red Hat OpenShift Service on AWS で、プロジェクトの作成、表示、削除 などを含め、プロジェクトライフサイクル全体を管理できます。
プロジェクトを作成したら、Developer パースペクティブを使用して、ユーザーに対して プロジェクトへのアクセス権の付与または取り消し と クラスターロールの管理 を行えます。また、新規プロジェクトの自動プロビジョニングに使用されるプロジェクトテンプレートを作成する際に、プロジェクト設定リソースの編集 も行えます。
Dedicated の管理者権限のあるユーザーは、認証されたユーザーグループによる新規プロジェクトのセルフプロビジョニングを阻止 することを選択できます。
1.2. アプリケーションの使用
1.2.1. アプリケーションの作成
アプリケーションを作成するには、プロジェクトを作成しているか、適切なロールとパーミッションでプロジェクトにアクセスできる必要があります。Web コンソールの Developer パースペクティブ、インストール済みの Operator、OpenShift CLI (oc
) のいずれかを使用して、アプリケーションを作成できます。プロジェクトに追加するアプリケーションは、Git、JAR ファイル、devfile、または開発者カタログから入手できます。
ソースまたはバイナリーコード、イメージ、およびテンプレートを含むコンポーネントを使用し、OpenShift CLI (oc
) を使用してアプリケーションを作成することもできます。Red Hat OpenShift Service on AWS Web コンソールを使用すると、クラスター管理者によってインストールされた Operator からアプリケーションを作成できます。
1.2.2. アプリケーションの保守
アプリケーションを作成したら、Web コンソールを使用して プロジェクトまたはアプリケーションのメトリクスを監視 できます。Web コンソールを使用して、アプリケーションを 編集 または 削除 することもできます。
アプリケーションの実行中は、すべてのアプリケーションリソースが使用されるわけではありません。クラスター管理者は、スケーラブルなリソースをアイドル状態 にして、リソースの消費を減らすことができます。
1.2.3. アプリケーションのデプロイ
Deployment
または DeploymentConfig
オブジェクトを使用してアプリケーションをデプロイし、Web コンソールからそれらを 管理 できます。アプリケーションの変更またはアップグレード中のダウンタイムを短縮するのに役立つ デプロイメントストラテジー を作成できます。
Helm (アプリケーションやサービスの Red Hat OpenShift Service on AWS クラスターへのデプロイメントを単純化するソフトウェアパッケージマネージャー) も使用できます。
1.3. Red Hat Marketplace の使用
Red Hat Marketplace は、パブリッククラウドおよびオンプレミスで実行されるコンテナーベース環境向けの認定されたソフトウェアの検出とアクセスが可能なオープンクラウドマーケットプレースです。
第2章 プロジェクト
2.1. プロジェクトの使用
プロジェクト を使用することにより、あるユーザーコミュニティーは、他のコミュニティーと切り離された状態で独自のコンテンツを整理し、管理することができます。
openshift-
および kube-
で始まる名前のプロジェクトはデフォルトプロジェクトです。これらのプロジェクトは、Pod として実行されるクラスターコンポーネントおよび他のインフラストラクチャーコンポーネントをホストします。そのため、Red Hat OpenShift Service on AWS では oc new-project
コマンドを使用して openshift-
または kube-
で始まる名前のプロジェクトを作成することができません。クラスター管理者は、oc adm new-project
コマンドを使用してこれらのプロジェクトを作成できます。
デフォルトプロジェクトでワークロードを実行したり、デフォルトプロジェクトへのアクセスを共有したりしないでください。デフォルトのプロジェクトは、コアクラスターコンポーネントを実行するために予約されています。
デフォルトプロジェクトである default
、kube-public
、kube-system
、openshift
、openshift-infra
、openshift-node
、および openshift.io/run-level
ラベルが 0
または 1
に設定されているその他のシステム作成プロジェクトは、高い特権があるとみなされます。Pod セキュリティーアドミッション、Security Context Constraints、クラスターリソースクォータ、イメージ参照解決などのアドミッションプラグインに依存する機能は、高い特権を持つプロジェクトでは機能しません。
2.1.1. プロジェクトの作成
Red Hat OpenShift Service on AWS Web コンソールまたは OpenShift CLI (oc
) を使用して、クラスター内にプロジェクトを作成できます。
2.1.1.1. Web コンソールを使用したプロジェクトの作成
Red Hat OpenShift Service on AWS Web コンソールを使用して、クラスター内にプロジェクトを作成できます。
openshift-
および kube-
で始まる名前のプロジェクトは Red Hat OpenShift Service on AWS によって重要 (Critical) と見なされます。そのため、Red Hat OpenShift Service on AWS では、Web コンソールを使用して openshift-
で始まる名前のプロジェクトを作成できません。
前提条件
- Red Hat OpenShift Service on AWS でプロジェクト、アプリケーション、その他のワークロードを作成するための適切なロールと権限を持っている。
手順
Administrator パースペクティブを使用している場合:
- Home → Projects に移動します。
Create Project をクリックします。
-
Create Project ダイアログボックスで、Name フィールドに、
myproject
などの一意の名前を入力します。 - オプション: プロジェクトの Display name および Description の詳細を追加します。
Create をクリックします。
プロジェクトのダッシュボードが表示されます。
-
Create Project ダイアログボックスで、Name フィールドに、
- オプション: Details タブを選択して、プロジェクトの詳細を表示します。
- オプション: プロジェクトに対する適切なパーミッションがある場合は、Project Access タブを使用して、プロジェクトの admin、edit、および view 権限を付与または取り消すことができます。
Developer パースペクティブを使用している場合:
Project メニューをクリックし、Create Project を選択します。
図2.1 Create project
-
Create Project ダイアログボックスで、Name フィールドに、
myproject
などの一意の名前を入力します。 - オプション: プロジェクトの Display name および Description の詳細を追加します。
- Create をクリックします。
-
Create Project ダイアログボックスで、Name フィールドに、
- オプション: 左側のナビゲーションパネルを使用して Project ビューに移動し、プロジェクトのダッシュボードを表示します。
- オプション: プロジェクトダッシュボードで Details タブを選択し、プロジェクトの詳細を表示します。
- オプション: プロジェクトに対する適切なパーミッションがある場合は、プロジェクトダッシュボードの Project Access タブを使用して、プロジェクトの admin、edit、および view 権限を付与または取り消すことができます。
2.1.1.2. CLI を使用したプロジェクトの作成
クラスター管理者が許可する場合、新規プロジェクトを作成できます。
openshift-
および kube-
で始まる名前のプロジェクトは Red Hat OpenShift Service on AWS によって重要 (Critical) と見なされます。そのため、Red Hat OpenShift Service on AWS では、oc new-project
コマンドを使用して openshift-
または kube-
で始まる名前のプロジェクトを作成することはできません。クラスター管理者は、oc adm new-project
コマンドを使用してこれらのプロジェクトを作成できます。
手順
以下を実行します。
$ oc new-project <project_name> \ --description="<description>" --display-name="<display_name>"
以下に例を示します。
$ oc new-project hello-openshift \ --description="This is an example project" \ --display-name="Hello OpenShift"
作成できるプロジェクトの数は、システム管理者によって制限される場合があります。上限に達すると、新規プロジェクトを作成できるように既存プロジェクトを削除しなければならない場合があります。
2.1.2. プロジェクトの表示
Red Hat OpenShift Service on AWS Web コンソールまたは OpenShift CLI (oc
) を使用して、クラスター内のプロジェクトを表示できます。
2.1.2.1. Web コンソールを使用してプロジェクトを表示する
Red Hat OpenShift Service on AWS Web コンソールを使用して、アクセス権のあるプロジェクトを表示できます。
手順
Administrator パースペクティブを使用している場合:
- ナビゲーションメニューで Home → Projects に移動します。
- 表示するプロジェクトを選択します。Overview タブには、プロジェクトのダッシュボードが含まれています。
- Details タブを選択して、プロジェクトの詳細を表示します。
- YAML タブを選択して、プロジェクトリソースの YAML 設定を表示および更新します。
- Workloads タブを選択して、プロジェクト内のワークロードを表示します。
- RoleBindings タブを選択して、プロジェクトのロールバインディングを表示および作成します。
Developer パースペクティブを使用している場合:
- ナビゲーションメニューの Project ページに移動します。
- 画面上部の Project ドロップダウンメニューから All Projects を選択し、クラスター内のすべてのプロジェクトをリスト表示します。
- 表示するプロジェクトを選択します。Overview タブには、プロジェクトのダッシュボードが含まれています。
- Details タブを選択して、プロジェクトの詳細を表示します。
- プロジェクトに対する適切なパーミッションがある場合は、Project access タブビューを選択し、プロジェクトの権限を更新します。
2.1.2.2. CLI を使用したプロジェクトの表示
プロジェクトを表示する際は、認証ポリシーに基づいて、表示アクセスのあるプロジェクトだけを表示できるように制限されます。
手順
プロジェクトのリストを表示するには、以下を実行します。
$ oc get projects
CLI 操作について現在のプロジェクトから別のプロジェクトに切り換えることができます。その後の操作についてはすべて指定のプロジェクトが使用され、プロジェクトスコープのコンテンツの操作が実行されます。
$ oc project <project_name>
2.1.3. Developer パースペクティブを使用したプロジェクトに対するアクセスパーミッションの提供
Developer パースペクティブで Project ビューを使用し、プロジェクトに対するアクセスを付与したり、取り消したりできます。
前提条件
- プロジェクトを作成している。
手順
ユーザーをプロジェクトに追加し、Admin、Edit、または View アクセスをユーザーに付与するには、以下を実行します。
- Developer パースペクティブで、Project ページに移動します。
- Project メニューからプロジェクトを選択します。
- Project Access タブを選択します。
Add access をクリックして、パーミッションの新規の行をデフォルトのパーミッションに追加します。
図2.2 プロジェクトパーミッション
- ユーザー名を入力し、Select a role ドロップダウンリストをクリックし、適切なロールを選択します。
- Save をクリックして新規パーミッションを追加します。
以下を使用することもできます。
- Select a role ドロップダウンリストを使用して、既存ユーザーのアクセスパーミッションを変更できます。
- Remove Access アイコンを使用して、既存ユーザーのプロジェクトへのアクセスパーミッションを完全に削除できます。
高度なロールベースのアクセス制御は、Administrator パースペクティブの Roles および Roles Binding ビューで管理されます。
2.1.4. Web コンソールを使用した利用可能なクラスターのロールのカスタマイズ
Web コンソールの Developer パースペクティブでは、Project → Project access ページを使用して、プロジェクト管理者がプロジェクト内のユーザーにロールを付与できるようにします。デフォルトでは、プロジェクト内のユーザーに付与できるクラスターロールは、admin、edit、および view です。
クラスター管理者は、クラスター全体のすべてのプロジェクトに対して Project access ページでどのクラスターロールを使用できるかを定義できます。Console
設定リソースの spec.customization.projectAccess.availableClusterRoles
オブジェクトをカスタマイズすることで、使用可能なロールを指定できます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
- Administrator パースペクティブで、Administration → Cluster settings に移動します。
- Configuration タブをクリックします。
-
Configuration resource リストから、Console
operator.openshift.io
を選択します。 - YAML タブに移動し、YAML コードを表示し、編集します。
spec
の YAML コードで、プロジェクトアクセスに使用可能なクラスターロールのリストをカスタマイズします。次の例では、デフォルトのadmin
、edit
、およびview
ロールを指定します。apiVersion: operator.openshift.io/v1 kind: Console metadata: name: cluster # ... spec: customization: projectAccess: availableClusterRoles: - admin - edit - view
-
Save をクリックして、
Console
設定リソースへの変更を保存します。
検証
- Developer パースペクティブで、Project ページに移動します。
- Project メニューからプロジェクトを選択します。
- Project access タブを選択します。
-
Role 列のメニューをクリックし、使用可能なロールが
Console
リソース設定に適用した設定と一致することを確認します。
2.1.5. プロジェクトへの追加
Developer パースペクティブの +Add ページを使用して、プロジェクトに項目を追加できます。
前提条件
- プロジェクトを作成している。
手順
- Developer パースペクティブで、+Add ページに移動します。
- Project メニューからプロジェクトを選択します。
- +Add ページで項目をクリックし、ワークフローに従います。
また、Add* ページの検索機能を使用して、プロジェクトに追加する追加アイテムを見つけます。画面上部の Add の下にある をクリックし、検索フィールドにコンポーネントの名前を入力します。
2.1.6. プロジェクトのステータスの確認
Red Hat OpenShift Service on AWS Web コンソールまたは OpenShift CLI (oc
) を使用して、プロジェクトのステータスを表示できます。
2.1.6.1. Web コンソールを使用したプロジェクトのステータスの確認
Web コンソールを使用して、プロジェクトのステータスを確認できます。
前提条件
- プロジェクトを作成している。
手順
Administrator パースペクティブを使用している場合:
- Home → Projects に移動します。
- 一覧からプロジェクトを選択します。
- Overview ページで、プロジェクトのステータスを確認します。
Developer パースペクティブを使用している場合:
- Project ページに移動します。
- Project メニューからプロジェクトを選択します。
- Overview ページで、プロジェクトのステータスを確認します。
2.1.6.2. CLI を使用したプロジェクトのステータスの確認
OpenShift CLI (oc
) を使用して、プロジェクトのステータスを確認できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - プロジェクトを作成している。
手順
プロジェクトに切り替えます。
$ oc project <project_name> 1
- 1
<project-name>
は、プロジェクト名に置き換えます。
プロジェクトの概要を取得します。
$ oc status
2.1.7. プロジェクトの削除
Red Hat OpenShift Service on AWS Web コンソールまたは OpenShift CLI (oc
) を使用してプロジェクトを削除できます。
プロジェクトを削除する際に、サーバーはプロジェクトのステータスを Active から Terminating に更新します。次に、サーバーは Terminating 状態のプロジェクトからすべてのコンテンツをクリアしてから、最終的にプロジェクトを削除します。プロジェクトのステータスが Terminating の場合、新規のコンテンツをプロジェクトに追加することはできません。プロジェクトは CLI または Web コンソールから削除できます。
2.1.7.1. Web コンソールを使用したプロジェクトの削除
Web コンソールを使用してプロジェクトを削除できます。
前提条件
- プロジェクトを作成している。
- プロジェクトを削除するために必要なパーミッションを持っている。
手順
Administrator パースペクティブを使用している場合:
- Home → Projects に移動します。
- 一覧からプロジェクトを選択します。
プロジェクトの Actions ドロップダウンメニューをクリックし、Delete Project を選択します。
注記プロジェクトを削除するために必要なパーミッションがない場合は、Delete Project オプションは選択できません。
- Delete Project? ペインで、プロジェクトの名前を入力して削除を確認します。
- Delete をクリックします。
Developer パースペクティブを使用している場合:
- Project ページに移動します。
- Project メニューから削除するプロジェクトを選択します。
プロジェクトの Actions ドロップダウンメニューをクリックし、Delete Project を選択します。
注記プロジェクトを削除するために必要なパーミッションがない場合は、Delete Project オプションは選択できません。
- Delete Project? ペインで、プロジェクトの名前を入力して削除を確認します。
- Delete をクリックします。
2.1.7.2. CLI を使用したプロジェクトの削除
OpenShift CLI (oc
) を使用してプロジェクトを削除できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - プロジェクトを作成している。
- プロジェクトを削除するために必要なパーミッションを持っている。
手順
プロジェクトを削除します。
$ oc delete project <project_name> 1
- 1
<project_name>
を、削除するプロジェクトの名前に置き換えます。
2.2. プロジェクト作成の設定
Red Hat OpenShift Service on AWS では、プロジェクト を使用して、関連するオブジェクトをグループ化および分離します。Web コンソールまたは oc new-project
コマンドを使用して新規プロジェクトの作成要求が実行されると、Red Hat OpenShift のエンドポイントは、カスタマイズ可能なテンプレートに応じてプロジェクトをプロビジョニングするために使用されます。
クラスター管理者は、開発者やサービスアカウントが独自のプロジェクトを作成し、プロジェクトの セルフプロビジョニング を実行することを許可し、その方法を設定できます。
2.2.1. プロジェクト作成について
Red Hat OpenShift Service on AWS API サーバーは、クラスターのプロジェクト設定リソースの projectRequestTemplate
パラメーターで識別されるプロジェクトテンプレートに基づいて新規プロジェクトを自動的にプロビジョニングします。パラメーターが定義されない場合、API サーバーは要求される名前でプロジェクトを作成するデフォルトテンプレートを作成し、要求するユーザーをプロジェクトの admin
(管理者) ロールに割り当てます。
プロジェクト要求が送信されると、API はテンプレートで以下のパラメーターを置き換えます。
パラメーター | 説明 |
---|---|
| プロジェクトの名前。必須。 |
| プロジェクトの表示名。空にできます。 |
| プロジェクトの説明。空にできます。 |
| 管理ユーザーのユーザー名。 |
| 要求するユーザーのユーザー名。 |
API へのアクセスは、self-provisioner
ロールと self-provisioners
のクラスターロールバインディングで開発者に付与されます。デフォルトで、このロールはすべての認証された開発者が利用できます。
2.2.2. 新規プロジェクトのテンプレートの変更
クラスター管理者は、デフォルトのプロジェクトテンプレートを変更し、新規プロジェクトをカスタム要件に基づいて作成することができます。
独自のカスタムプロジェクトテンプレートを作成するには、以下を実行します。
前提条件
-
dedicated-admin
パーミッションを持つアカウントを使用して Red Hat OpenShift Service on AWS クラスターにアクセスできる。
手順
-
cluster-admin
権限を持つユーザーとしてログインしている。 デフォルトのプロジェクトテンプレートを生成します。
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
-
オブジェクトを追加するか、既存オブジェクトを変更することにより、テキストエディターで生成される
template.yaml
ファイルを変更します。 プロジェクトテンプレートは、
openshift-config
namespace に作成される必要があります。変更したテンプレートを読み込みます。$ oc create -f template.yaml -n openshift-config
Web コンソールまたは CLI を使用し、プロジェクト設定リソースを編集します。
Web コンソールの使用
- Administration → Cluster Settings ページに移動します。
- Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
CLI の使用
project.config.openshift.io/cluster
リソースを編集します。$ oc edit project.config.openshift.io/cluster
spec
セクションを、projectRequestTemplate
およびname
パラメーターを組み込むように更新し、アップロードされたプロジェクトテンプレートの名前を設定します。デフォルト名はproject-request
です。カスタムプロジェクトテンプレートを含むプロジェクト設定リソース
apiVersion: config.openshift.io/v1 kind: Project metadata: # ... spec: projectRequestTemplate: name: <template_name> # ...
- 変更を保存した後、変更が正常に適用されたことを確認するために、新しいプロジェクトを作成します。
2.2.3. プロジェクトのセルフプロビジョニングの無効化
認証されたユーザーグループによる新規プロジェクトのセルフプロビジョニングを禁止することができます。
手順
-
cluster-admin
権限を持つユーザーとしてログインします。 以下のコマンドを実行して、
self-provisioners
クラスターロールバインディングの使用を確認します。$ oc describe clusterrolebinding.rbac self-provisioners
出力例
Name: self-provisioners Labels: <none> Annotations: rbac.authorization.kubernetes.io/autoupdate=true Role: Kind: ClusterRole Name: self-provisioner Subjects: Kind Name Namespace ---- ---- --------- Group system:authenticated:oauth
self-provisioners
セクションのサブジェクトを確認します。self-provisioner
クラスターロールをグループsystem:authenticated:oauth
から削除します。self-provisioners
クラスターロールバインディングがself-provisioner
ロールのみをsystem:authenticated:oauth
グループにバインドする場合、以下のコマンドを実行します。$ oc patch clusterrolebinding.rbac self-provisioners -p '{"subjects": null}'
self-provisioners
クラスターロールバインディングがself-provisioner
ロールをsystem:authenticated:oauth
グループ以外のユーザー、グループまたはサービスアカウントにバインドする場合、以下のコマンドを実行します。$ oc adm policy \ remove-cluster-role-from-group self-provisioner \ system:authenticated:oauth
ロールへの自動更新を防ぐには、
self-provisioners
クラスターロールバインディングを編集します。自動更新により、クラスターロールがデフォルトの状態にリセットされます。CLI を使用してロールバインディングを更新するには、以下を実行します。
以下のコマンドを実行します。
$ oc edit clusterrolebinding.rbac self-provisioners
表示されるロールバインディングで、以下の例のように
rbac.authorization.kubernetes.io/autoupdate
パラメーター値をfalse
に設定します。apiVersion: authorization.openshift.io/v1 kind: ClusterRoleBinding metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "false" # ...
単一コマンドを使用してロールバインディングを更新するには、以下を実行します。
$ oc patch clusterrolebinding.rbac self-provisioners -p '{ "metadata": { "annotations": { "rbac.authorization.kubernetes.io/autoupdate": "false" } } }'
認証されたユーザーとしてログインし、プロジェクトのセルフプロビジョニングを実行できないことを確認します。
$ oc new-project test
出力例
Error from server (Forbidden): You may not request a new project via this API.
組織に固有のより有用な説明を提供できるようこのプロジェクト要求メッセージをカスタマイズすることを検討します。
2.2.4. プロジェクト要求メッセージのカスタマイズ
プロジェクトのセルフプロビジョニングを実行できない開発者またはサービスアカウントが Web コンソールまたは CLI を使用してプロジェクト作成要求を行う場合、以下のエラーメッセージがデフォルトで返されます。
You may not request a new project via this API.
クラスター管理者はこのメッセージをカスタマイズできます。これを、組織に固有の新規プロジェクトの要求方法の情報を含むように更新することを検討します。以下に例を示します。
-
プロジェクトを要求するには、システム管理者 (
projectname@example.com
) に問い合わせてください。 -
新規プロジェクトを要求するには、
https://internal.example.com/openshift-project-request
にあるプロジェクト要求フォームに記入します。
プロジェクト要求メッセージをカスタマイズするには、以下を実行します。
手順
Web コンソールまたは CLI を使用し、プロジェクト設定リソースを編集します。
Web コンソールの使用
- Administration → Cluster Settings ページに移動します。
- Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
CLI の使用
-
cluster-admin
権限を持つユーザーとしてログインします。 project.config.openshift.io/cluster
リソースを編集します。$ oc edit project.config.openshift.io/cluster
-
spec
セクションを、projectRequestMessage
パラメーターを含むように更新し、値をカスタムメッセージに設定します。カスタムプロジェクト要求メッセージを含むプロジェクト設定リソース
apiVersion: config.openshift.io/v1 kind: Project metadata: # ... spec: projectRequestMessage: <message_string> # ...
以下に例を示します。
apiVersion: config.openshift.io/v1 kind: Project metadata: # ... spec: projectRequestMessage: To request a project, contact your system administrator at projectname@example.com. # ...
- 変更を保存した後に、プロジェクトをセルフプロビジョニングできない開発者またはサービスアカウントとして新規プロジェクトの作成を試行し、変更が正常に適用されていることを確認します。
第3章 アプリケーションの作成
3.1. テンプレートの使用
以下のセクションでは、テンプレートの概要と共に、それらを使用し、作成する方法に関する概要を説明します。
3.1.1. テンプレートについて
テンプレートでは、パラメーター化や処理が可能な一連のオブジェクトを記述し、Red Hat OpenShift Service on AWS で作成するためのオブジェクトのリストを生成します。テンプレートは、サービス、ビルド設定およびデプロイメント設定など、プロジェクト内で作成パーミッションがあるすべてのものを作成するために処理できます。また、テンプレートではラベルのセットを定義して、これをテンプレート内に定義されたすべてのオブジェクトに適用できます。
オブジェクトのリストは CLI を使用してテンプレートから作成することも、テンプレートがプロジェクトまたはグローバルテンプレートライブラリーにアップロードされている場合、Web コンソールを使用することもできます。
3.1.2. テンプレートのアップロード
テンプレートを定義する JSON または YAML ファイルがある場合は、CLI を使用してテンプレートをプロジェクトにアップロードできます。こうすることで、プロジェクトにテンプレートが保存され、対象のプロジェクトに対して適切なアクセス権があるユーザーがこれを繰り返し使用できます。独自のテンプレートの記述方法は、このトピックの後半で説明します。
手順
次のいずれかの方法を使用してテンプレートをアップロードします。
現在のプロジェクトのテンプレートライブラリーにテンプレートをアップロードするには、JSON または YAML ファイルを以下のコマンドで渡します。
$ oc create -f <filename>
-n
オプションを使用してプロジェクト名を指定することで、別のプロジェクトにテンプレートをアップロードできます。$ oc create -f <filename> -n <project>
テンプレートは、Web コンソールまたは CLI を使用して選択できるようになりました。
3.1.3. Web コンソールを使用したアプリケーションの作成
Web コンソールを使用して、テンプレートからアプリケーションを作成することができます。
手順
- Web コンソールのナビゲーションメニューの上部にあるコンテキストセレクターから Developer を選択します。
- 目的のプロジェクト内で、+Add をクリックします。
- Developer Catalog タイルの All services をクリックします。
Type の下の Builder Images をクリックして、利用可能なビルダーイメージを表示します。
注記以下に示すように、
builder
タグがアノテーションにリスト表示されているイメージストリームタグのみがリストに表示されます。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" 1 supports: "ruby:2.6,ruby" version: "2.6" # ...
- 1
- ここに
builder
を含めると、このイメージストリームがビルダーとして Web コンソールに表示されます。
- 新規アプリケーション画面で設定を変更し、オブジェクトをアプリケーションをサポートするように設定します。
3.1.4. CLI を使用してテンプレートからオブジェクトを作成する手順
CLI を使用して、テンプレートを処理し、オブジェクトを作成するために生成された設定を使用できます。
3.1.4.1. ラベルの追加
ラベルは、Pod などの生成されたオブジェクトを管理し、整理するために使用されます。テンプレートで指定されるラベルは、テンプレートから生成されるすべてのオブジェクトに適用されます。
手順
コマンドラインからテンプレートにラベルを追加します。
$ oc process -f <filename> -l name=otherLabel
3.1.4.2. パラメーターのリスト表示
上書きできるパラメーターのリストは、テンプレートの parameters
セクションに表示されます。
手順
CLI で以下のコマンドを使用し、使用するファイルを指定して、パラメーターをリスト表示することができます。
$ oc process --parameters -f <filename>
または、テンプレートがすでにアップロードされている場合には、以下を実行します。
$ oc process --parameters -n <project> <template_name>
たとえば、デフォルトの
openshift
プロジェクトにあるクイックスタートテンプレートのいずれかに対してパラメーターを一覧表示する場合に、以下のような出力が表示されます。$ 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. オブジェクトリストの生成
CLI を使用して、標準出力にオブジェクトリストを返すテンプレートを定義するファイルを処理できます。
手順
標準出力にオブジェクトリストを返すテンプレートを定義するファイルを処理します。
$ oc process -f <filename>
または、テンプレートがすでに現在のプロジェクトにアップロードされている場合には以下を実行します。
$ oc process <template_name>
テンプレートを処理し、
oc create
の出力をパイプして、テンプレートからオブジェクトを作成します。$ oc process -f <filename> | oc create -f -
または、テンプレートがすでに現在のプロジェクトにアップロードされている場合には以下を実行します。
$ 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
JSON ファイルは、ファイルにリダイレクトすることも、
oc create
コマンドで処理済みの出力をパイプして、テンプレートをアップロードせずに直接適用することも可能です。$ oc process -f my-rails-postgresql \ -p POSTGRESQL_USER=bob \ -p POSTGRESQL_DATABASE=mydatabase \ | oc create -f -
多数のパラメーターがある場合は、それらをファイルに保存してからそのファイルを
oc process
に渡すことができます。$ cat postgres.env POSTGRESQL_USER=bob POSTGRESQL_DATABASE=mydatabase
$ oc process -f my-rails-postgresql --param-file=postgres.env
--param-file
の引数として"-"
を使用して、標準入力から環境を読み込むこともできます。$ sed s/bob/alice/ postgres.env | oc process -f my-rails-postgresql --param-file=-
3.1.5. アップロードしたテンプレートの変更
すでにプロジェクトにアップロードされているテンプレートを編集できます。
手順
すでにアップロードされているテンプレートを変更します。
$ oc edit template <template>
3.1.6. テンプレートの作成
アプリケーションの全オブジェクトを簡単に再作成するために、新規テンプレートを定義できます。テンプレートでは、作成するオブジェクトと、これらのオブジェクトの作成をガイドするメタデータを定義します。
以下は、単純なテンプレートオブジェクト定義 (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.6.1. テンプレート記述の作成
テンプレートの記述により、テンプレートの内容に関する情報を提供でき、Web コンソールでの検索時に役立ちます。テンプレート名以外のメタデータは任意ですが、使用できると便利です。メタデータには、一般的な説明などの情報以外にタグのセットも含まれます。便利なタグにはテンプレートで使用する言語名などがあります (例: Java、PHP、Ruby)。
以下は、テンプレート記述メタデータの例です。
kind: Template apiVersion: template.openshift.io/v1 metadata: name: cakephp-mysql-example 1 annotations: openshift.io/display-name: "CakePHP MySQL Example (Ephemeral)" 2 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." 3 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. 4 tags: "quickstart,php,cakephp" 5 iconClass: icon-php 6 openshift.io/provider-display-name: "Red Hat, Inc." 7 openshift.io/documentation-url: "https://github.com/sclorg/cakephp-ex" 8 openshift.io/support-url: "https://access.redhat.com" 9 message: "Your admin credentials are ${ADMIN_USERNAME}:${ADMIN_PASSWORD}" 10
- 1
- テンプレートの一意の名前。
- 2
- ユーザーインターフェイスで利用できるように、ユーザーに分かりやすく、簡単な名前。
- 3
- テンプレートの説明。デプロイされる内容、デプロイ前に知っておく必要のある注意点をユーザーが理解できるように詳細を追加します。README ファイルなど、追加情報へのリンクも追加します。パラグラフを作成するには、改行を追加できます。
- 4
- 追加の説明。たとえば、サービスカタログに表示されます。
- 5
- 検索およびグループ化を実行するためにテンプレートに関連付けられるタグ。これを指定されるカタログカテゴリーのいずれかに組み込むタグを追加します。コンソールの定数ファイルの
CATALOG_CATEGORIES
でid
およびcategoryAliases
を参照してください。 - 6
- Web コンソールでテンプレートと一緒に表示されるアイコン。
例3.1 利用可能なアイコン
-
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
-
- 7
- テンプレートを提供する人または組織の名前
- 8
- テンプレートに関する他のドキュメントを参照する URL
- 9
- テンプレートに関するサポートを取得できる URL
- 10
- テンプレートがインスタンス化された時に表示される説明メッセージ。このフィールドで、新規作成されたリソースの使用方法をユーザーに通知します。生成された認証情報や他のパラメーターを出力に追加できるように、メッセージの表示前にパラメーターの置換が行われます。ユーザーが従うべき次の手順が記載されたドキュメントへのリンクを追加してください。
3.1.6.2. テンプレートラベルの作成
テンプレートにはラベルのセットを追加できます。これらのラベルは、テンプレートがインスタンス化される時に作成されるオブジェクトごとに追加します。このようにラベルを定義すると、特定のテンプレートから作成された全オブジェクトの検索、管理が簡単になります。
以下は、テンプレートオブジェクトのラベルの例です。
kind: "Template" apiVersion: "v1" ... labels: template: "cakephp-mysql-example" 1 app: "${NAME}" 2
3.1.6.3. テンプレートパラメーターの作成
パラメーターにより、テンプレートがインスタンス化される時に値を生成するか、ユーザーが値を指定できるようになります。パラメーターが参照されると、値が置換されます。参照は、オブジェクト一覧フィールドであればどこでも定義できます。これは、無作為にパスワードを作成したり、テンプレートのカスタマイズに必要なユーザー固有の値やホスト名を指定したりできるので便利です。パラメーターは、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}" 1 ref: "${SOURCE_REPOSITORY_REF}" contextDir: "${CONTEXT_DIR}" - kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: frontend spec: replicas: "${{REPLICA_COUNT}}" 2 parameters: - name: SOURCE_REPOSITORY_URL 3 displayName: Source Repository URL 4 description: The URL of the repository with your application source code 5 value: https://github.com/sclorg/cakephp-ex.git 6 required: true 7 - name: GITHUB_WEBHOOK_SECRET description: A secret string used to configure the GitHub webhook generate: expression 8 from: "[a-zA-Z0-9]{40}" 9 - name: REPLICA_COUNT description: Number of replicas to run value: "2" required: true message: "... The GitHub webhook secret is ${GITHUB_WEBHOOK_SECRET} ..." 10
- 1
- この値は、テンプレートがインスタンス化された時点で
SOURCE_REPOSITORY_URL
パラメーターに置き換えられます。 - 2
- この値は、テンプレートがインスタンス化された時点で、
REPLICA_COUNT
パラメーターの引用なしの値に置き換えられます。 - 3
- パラメーター名。この値は、テンプレート内でパラメーターを参照するのに使用します。
- 4
- 分かりやすいパラメーターの名前。これは、ユーザーに表示されます。
- 5
- パラメーターの説明。期待値に対する制約など、パラメーターの目的を詳細にわたり説明します。説明には、コンソールのテキスト標準に従い、完結した文章を使用するようにしてください。表示名と同じ内容を使用しないでください。
- 6
- テンプレートをインスタンス化する時に、ユーザーにより値が上書きされない場合に使用されるパラメーターのデフォルト値。パスワードなどのデフォルト値の使用を避けるようにしてください。シークレットと組み合わせた生成パラメーターを使用するようにしてください。
- 7
- このパラメーターが必須であることを示します。つまり、ユーザーは空の値で上書きできません。パラメーターでデフォルト値または生成値が指定されていない場合には、ユーザーは値を指定する必要があります。
- 8
- 値が生成されるパラメーター
- 9
- ジェネレーターへの入力。この場合、ジェネレーターは、大文字、小文字を含む 40 桁の英数字の値を生成します。
- 10
- パラメーターはテンプレートメッセージに含めることができます。これにより、生成された値がユーザーに通知されます。
3.1.6.4. テンプレートオブジェクトリストの作成
テンプレートの主な部分は、テンプレートがインスタンス化される時に作成されるオブジェクトのリストです。これには、ビルド設定、デプロイメント設定、またはサービスなどの有効な API オブジェクトを使用できます。オブジェクトはここで定義された通りに作成され、パラメーターの値は作成前に置換されます。これらのオブジェクトの定義では、以前に定義したパラメーターを参照できます。
以下は、オブジェクトリストの例です。
kind: "Template"
apiVersion: "v1"
metadata:
name: my-template
objects:
- kind: "Service" 1
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"
- 1
- サービスの定義。このテンプレートにより作成されます。
オブジェクト定義のメタデータに namespace
フィールドの固定値が含まれる場合、フィールドはテンプレートのインスタンス化の際に定義から取り除かれます。namespace
フィールドにパラメーター参照が含まれる場合には、通常のパラメーター置換が行われ、パラメーターの置換による値の解決が実行された namespace で、オブジェクトが作成されます。この場合、ユーザーは対象の namespace でオブジェクトを作成するパーミッションがあることが前提になります。
3.1.6.5. テンプレートをバインド可能としてマーキングする
テンプレートサービスブローカーは、認識されているテンプレートオブジェクトごとに、カタログ内にサービスを 1 つ公開します。デフォルトでは、これらのサービスはそれぞれバインド可能として公開され、エンドユーザーがプロビジョニングしたサービスに対してバインドできるようにします。
手順
テンプレートの作成者は、エンドユーザーが指定テンプレートからプロビジョニングされたサービスに対してバインディングすることを防ぐことができます。
-
template.openshift.io/bindable: "false"
のアノテーションをテンプレートに追加して、エンドユーザーが指定のテンプレートからプロビジョニングされるサービスをバインドできないようにできます。
3.1.6.6. テンプレートオブジェクトフィールドの公開
テンプレートの作成者は、テンプレートに含まれる特定のオブジェクトのフィールドを公開すべきかどうかを指定できます。テンプレートサービスブローカーは、ConfigMap
、Secret
、Service
、および Route
オブジェクトに公開されたフィールドを認識し、ユーザーがブローカーでサポートされているサービスをバインドする際に公開されたフィールドの値を返します。
オブジェクトのフィールドを 1 つまたは複数公開するには、テンプレート内のオブジェクトに、接頭辞が template.openshift.io/expose-
または template.openshift.io/base64-expose-
のアノテーションを追加します。
各アノテーションキーは、bind
応答のキーになるように、接頭辞が削除されてパススルーされます。
各アノテーションの値は Kubernetes JSONPath 式の値であり、バインド時に解決され、bind
応答で返される値が含まれるオブジェクトフィールドを指定します。
Bind
応答のキーと値のペアは、環境変数として、システムの他の場所で使用できます。そのため、アノテーションキーで接頭辞を取り除いた値を有効な環境変数名として使用することが推奨されます。先頭に A-Z
、a-z
または _
を指定して、その後に、ゼロか、他の文字 A-Z
、a-z
、0-9
または _
を指定してください。
バックスラッシュでエスケープしない限り、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
操作に対する応答例は以下のようになります。
{ "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.6.7. テンプレートの準備ができるまで待機する
テンプレートの作成者は、テンプレート内の特定のオブジェクトがサービスカタログ、Template Service Broker または TemplateInstance
API によるテンプレートのインスタンス化が完了したとされるまで待機する必要があるかを指定できます。
この機能を使用するには、テンプレート内の Build
、BuildConfig
、Deployment
、DeploymentConfig
、Job
または StatefulSet
のオブジェクト 1 つ以上に、次のアノテーションでマークを付けてください。
"template.alpha.openshift.io/wait-for-ready": "true"
テンプレートのインスタンス化は、アノテーションのマークが付けられたすべてのオブジェクトが準備できたと報告されるまで、完了しません。同様に、アノテーションが付けられたオブジェクトが失敗したと報告されるか、固定タイムアウトである 1 時間以内にテンプレートの準備が整わなかった場合に、テンプレートのインスタンス化は失敗します。
インスタンス化の目的で、各オブジェクトの種類の準備状態および失敗は以下のように定義されます。
種類 | 準備状態 (Readines) | 失敗 (Failure) |
---|---|---|
| オブジェクトが Complete フェーズを報告する | オブジェクトが Canceled、Error、または Failed を報告する |
| 関連付けられた最新のビルドオブジェクトが Complete フェーズを報告する | 関連付けられた最新のビルドオブジェクトが Canceled、Error、または Failed を報告する |
| オブジェクトは、新しいレプリカセットとデプロイメントが利用可能であると報告する。これにより、オブジェクトで定義される readiness プローブが有効になります。 | オブジェクトで、Progressing の状態が false であると報告される |
| オブジェクトは新規レプリケーションコントローラーおよびデプロイメントが利用可能であると報告する。これにより、オブジェクトで定義される readiness プローブが有効になります。 | オブジェクトで、Progressing の状態が false であると報告される |
| オブジェクトが完了 (completion) を報告する | オブジェクトが 1 つ以上の失敗が発生したことを報告する |
| オブジェクトはすべてのレプリカが Ready であることを報告するこれにより、オブジェクトで定義される readiness プローブが有効になります。 | 該当なし |
以下は、テンプレートサンプルを一部抜粋したものです。この例では、wait-for-ready
アノテーションが使用されています。その他の例は、Red Hat OpenShift Service on AWS のクイックスタートテンプレートにあります。
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 template instantiation # will fail immediately if 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: ...
その他の推奨事項
- アプリケーションにスムーズに実行するのに十分なリソースが提供されるようにメモリー、CPU、およびストレージのデフォルトサイズを設定します。
-
latest
タグが複数のメジャーバージョンで使用されている場合には、イメージからこのタグを参照しないようにします。新規イメージがそのタグにプッシュされると、実行中のアプリケーションが破損してしまう可能性があります。 - 適切なテンプレートの場合、テンプレートのデプロイ後に変更する必要なしに、ビルドおよびデプロイが正常に行われます。
3.1.6.8. 既存オブジェクトからのテンプレートの作成
テンプレートをゼロから作成するのではなく、プロジェクトから既存のオブジェクトを YAML 形式でエクスポートして、パラメーターを追加したり、テンプレート形式としてカスタマイズしたりして、YAML 形式を変更することもできます。
手順
オブジェクトを YAML 形式でプロジェクトにエクスポートします。
$ 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
エイリアスの使用は推奨されません。代わりに、必要なすべてのリソースを指定してください。
3.2. Developer パースペクティブを使用したアプリケーションの作成
Web コンソールの Developer パースペクティブでは、+Add ビューからアプリケーションおよび関連サービスを作成し、それらを Red Hat OpenShift Service on AWS にデプロイするための以下のオプションが提供されます。
リソースの使用: 開発者コンソールを使い始めるには、これらのリソースを使用します。Options メニュー を使用してヘッダーを非表示にすることができます。
- サンプルを使用したアプリケーションの作成: 既存のコードサンプルを使用して、Red Hat OpenShift Service on AWS でアプリケーションの作成を開始します。
- ガイド付きドキュメントを使用してビルド: ガイド付きドキュメントを参照してアプリケーションを構築し、主なコンセプトや用語に慣れてください。
- 新規開発者機能の確認: Developer パースペクティブの新機能およびリソースを紹介します。
Developer catalog: Developer Catalog で、イメージビルダーに必要なアプリケーション、サービス、またはソースを選択し、プロジェクトに追加します。
- すべてのサービス: カタログを参照して、Red Hat OpenShift Service on AWS 全体のサービスを見つけます。
- Database: 必要なデータベースサービスを選択し、アプリケーションに追加します。
- Operator Backed: 必要な Operator 管理サービスを選択し、デプロイします。
- Helm chart: 必要な Helm チャートを選択し、アプリケーションおよびサービスのデプロイメントを単純化します。
- Devfile: Devfile レジストリーから devfile を選択して、開発環境を宣言的に定義します。
Event Source: 特定のシステムからイベントソースを選択し、関心のあるイベントクラスを登録します。
注記RHOAS Operator がインストールされている場合には、マネージドサービスオプションも利用できます。
- Git repository: From Git、From Devfile または From Dockerfile オプションを使用して Git リポジトリーから既存のコードベース、Devfile、または Dockerfile をインポートし、Red Hat OpenShift Service on AWS でアプリケーションをビルドしてデプロイします。
- Container images: イメージストリームまたはレジストリーからの既存イメージを使用し、これを Red Hat OpenShift Service on AWS にデプロイします。
- Pipelines: Tekton パイプラインを使用して Red Hat OpenShift Service on AWS でソフトウェア配信プロセスの CI/CD パイプラインを作成します。
Serverless: Serverless オプションを検査して、Red Hat OpenShift Service on AWS でステートレスおよびサーバーレスアプリケーションを作成、ビルド、デプロイします。
- Channel: Knative チャネルを作成し、インメモリーの信頼性の高い実装を備えたイベント転送および永続化層を作成します。
- Samples: 利用可能なサンプルアプリケーションを確認して、アプリケーションをすばやく作成、ビルド、デプロイします。
- Quick Starts: アプリケーションを作成、インポート、および実行するためのクイックスタートオプションを調べて、ステップバイステップの手順とタスクを使用します。
From Local Machine: From Local Machine タイルを確認して、ローカルマシンのファイルをインポートまたはアップロードし、簡単にアプリケーションをビルドしてデプロイします。
- Import YAML: YAML ファイルをアップロードし、アプリケーションをビルドしてデプロイするためのリソースを定義します。
- Upload JAR file: JAR ファイルをアップロードして Java アプリケーションをビルドおよびデプロイします。
- Share my Project: このオプションを使用して、プロジェクトにユーザーを追加または削除し、アクセシビリティオプションを提供します。
- Helm Chart リポジトリー: このオプションを使用して、namespace に Helm Chart リポジトリーを追加します。
- リソースの並べ替え: これらのリソースを使用して、ナビゲーションペインに追加済みのピン留めされたリソースを並べ替えます。ナビゲーションウィンドウでピン留めされたリソースにカーソルを合わせると、その左側にドラッグアンドドロップアイコンが表示されます。ドラッグしたリソースは、それが属するセクションにのみドロップできます。
Pipelines オプションは、OpenShift Pipelines Operator がインストールされている場合にのみ表示されることに注意してください。
3.2.1. 前提条件
Developer パースペクティブを使用してアプリケーションを作成するには、以下を確認してください。
- Web コンソールにログインしている。
3.2.2. サンプルアプリケーションの作成
Developer パースペクティブの +Add フローでサンプルアプリケーションを使用し、アプリケーションをすぐに作成し、ビルドし、デプロイできます。
前提条件
- Red Hat OpenShift Service on AWS Web コンソールにログインしており、Developer パースペクティブを使用している。
手順
- +Add ビューで、Samples タイルをクリックして Samples ページを表示します。
- Samples ページで、利用可能なサンプルアプリケーションの 1 つを選択し、Create Sample Application フォームを表示します。
Create Sample Application Form:
- Name フィールドには、デフォルトでデプロイメント名が表示されます。この名前は必要に応じて変更することができます。
- Builder Image Version では、ビルダーイメージがデフォルトで選択されます。Builder Image Version ドロップダウンリストを使用してイメージバージョンを変更できます。
- Git リポジトリー URL のサンプルは、デフォルトで追加されます。
- Create をクリックしてサンプルアプリケーションを作成します。サンプルアプリケーションのビルドステータスが Topology ビューに表示されます。サンプルアプリケーションの作成後、デプロイメントがアプリケーションに追加されていることを確認できます。
3.2.3. Quick Starts を使用したアプリケーションの作成
クイックスタート ページには、Red Hat OpenShift Service on AWS でアプリケーションを作成、インポート、実行する方法が、段階的な手順とタスクとともに示されています。
前提条件
- Red Hat OpenShift Service on AWS Web コンソールにログインしており、Developer パースペクティブを使用している。
手順
- +Add ビューで、Getting Started resources → Build with guided documentation → View all quick starts リンクをクリックして、Quick Starts ページを表示します。
- Quick Starts ページで、使用するクイックスタートのタイルをクリックします。
- Start をクリックして、クイックスタートを開始します。
- 表示される手順を実行します。
3.2.4. Git のコードベースのインポートおよびアプリケーションの作成
Developer パースペクティブを使用し、GitHub で既存のコードベースを使用して Red Hat OpenShift Service on AWS でアプリケーションを作成、ビルド、デプロイすることができます。
以下の手順では、Developer パースペクティブの From Git オプションを使用してアプリケーションを作成します。
手順
- +Add ビューで、Git Repository タイルの From Git をクリックし、Import from git フォームを表示します。
-
Git セクションで、アプリケーションの作成に使用するコードベースの Git リポジトリー URL を入力します。たとえば、このサンプル nodejs アプリケーションの URL
https://github.com/sclorg/nodejs-ex
を入力します。その後、URL は検証されます。 オプション: Show Advanced Git Options をクリックし、以下のような詳細を追加できます。
- Git Reference: アプリケーションのビルドに使用する特定のブランチ、タグ、またはコミットのコードを参照します。
- Context Dir: アプリケーションのビルドに使用するアプリケーションのソースコードのサブディレクトリーを指定します。
- Source Secret: プライベートリポジトリーからソースコードをプルするための認証情報で Secret Name を作成します。
オプション:
Devfile
、Dockerfile
、Builder Image
、またはServerless Function
が Git リポジトリーからインポートして、デプロイをさらにカスタマイズできます。-
Git リポジトリーに
Devfile
、Dockerfile
、Builder Image
、またはfunc.yaml
が含まれている場合、それらは自動的に検出され、それぞれのパスフィールドに入力されます。 -
Devfile
、Dockerfile
、またはBuilder Image
が同じリポジトリーで検出された場合、デフォルトでDevfile
が選択されます。 -
Git リポジトリーで
func.yaml
が検出された場合、Import Strategy はServerless Function
に変更されます。 - または、Git リポジトリー URL を使用して +Add ビューでサーバー Create Serverless function をクリックして、サーバーレス関数を作成することもできます。
- ファイルのインポートタイプを編集して、別のストラテジーを選択し、Edit import strategy オプションをクリックします。
-
複数の
Devfiles
、Dockerfiles
、またはBuilder Images
が検出された場合、特定のインスタンスをインポートするには、コンテキストディレクトリーからの相対パスをそれぞれ指定します。
-
Git リポジトリーに
Git URL の検証後に、推奨されるビルダーイメージが選択されて星マークが付けられます。ビルダーイメージが自動検出されていない場合は、ビルダーイメージを選択します。
https://github.com/sclorg/nodejs-ex
Git URL の場合、Node.js ビルダーイメージがデフォルトで選択されます。- オプション:Builder Image Version ドロップダウンリストを使用してバージョンを指定します。
- オプション:Edit import strategy を使用して、別のストラテジーを選択します。
- オプション:Node.js ビルダーイメージの場合、Run command フィールドを使用して、アプリケーションを実行するためにコマンドを上書きします。
General セクションで、以下を実行します。
-
Application フィールドに、アプリケーションを分類するために一意の名前 (
myapp
など) を入力します。アプリケーション名が namespace で一意であることを確認します。 Name フィールドで、既存のアプリケーションが存在しない場合に、このアプリケーション用に作成されたリソースが Git リポジトリー URL をベースとして自動的に設定されることを確認します。既存のアプリケーションがある場合には、既存のアプリケーション内でそのコンポーネントをデプロイしたり、新しいアプリケーションを作成したり、またはコンポーネントをいずれにも割り当てない状態にしたりすることができます。
注記リソース名は namespace で一意である必要があります。エラーが出る場合はリソース名を変更します。
-
Application フィールドに、アプリケーションを分類するために一意の名前 (
Resources セクションで、以下を選択します。
- Deployment: 単純な Kubernetes スタイルのアプリケーションを作成します。
- デプロイメント Config: Red Hat OpenShift Service on AWS スタイルのアプリケーションを作成します。
Pipelines セクションで、Add Pipeline を選択してから Show Pipeline Visualization をクリックし、アプリケーションのパイプラインを表示します。デフォルトのパイプラインが選択されますが、アプリケーションで利用可能なパイプラインの一覧から必要なパイプラインを選択できます。
注記次の基準が満たされている場合、Add pipeline チェックボックスがオンになり、Configure PAC がデフォルトで選択されます。
- パイプラインオペレーターがインストールされています
-
pipelines-as-code
が有効になっています -
.tekton
ディレクトリーが Git リポジトリーで検出される
Webhook をリポジトリーに追加します。Configure PAC がオンになっており、GitHub アプリがセットアップされている場合は、Use GitHub App と Setup a webhook オプションが表示されます。GitHub アプリケーションがセットアップされていない場合は、Setup a webhook オプションのみが表示されます。
- Settings → Webhooks に移動し、Add webhook をクリックします。
- Payload URL を Pipelines as Code コントローラーのパブリック URL に設定します。
- コンテンツタイプを application/json として選択します。
-
Webhook シークレットを追加し、別の場所に書き留めます。
openssl
がローカルマシンにインストールされた状態で、ランダムなシークレットを生成します。 - Let me select individual events をクリックし、Commit comments、Issue comments、Pull request、および Pushes のイベントを選択します。
- Add webhook をクリックします。
オプション: Advanced Options セクションでは、Target port および Create a route to the application がデフォルトで選択されるため、公開されている URL を使用してアプリケーションにアクセスできます。
アプリケーションがデフォルトのパブリックポート 80 でデータを公開しない場合は、チェックボックスの選択を解除し、公開する必要のあるターゲットポート番号を設定します。
オプション: 以下の高度なオプションを使用してアプリケーションをさらにカスタマイズできます。
- Routing
Routing のリンクをクリックして、以下のアクションを実行できます。
- ルートのホスト名をカスタマイズします。
- ルーターが監視するパスを指定します。
- ドロップダウンリストから、トラフィックのターゲットポートを選択します。
Secure Route チェックボックスを選択してルートを保護します。必要な TLS 終端タイプを選択し、各ドロップダウンリストから非セキュアなトラフィックに関するポリシーを設定します。
注記サーバーレスアプリケーションの場合、Knative サービスが上記のすべてのルーティングオプションを管理します。ただし、必要に応じて、トラフィックのターゲットポートをカスタマイズできます。ターゲットポートが指定されていない場合、デフォルトポートの
8080
が使用されます。
- ヘルスチェック
Health Checks リンクをクリックして、Readiness、Liveness、および Startup プローブをアプリケーションに追加します。すべてのプローブに事前に設定されたデフォルトデータが実装され、必要に応じてデフォルトデータでプローブを追加したり、必要に応じてこれをカスタマイズしたりできます。
ヘルスプローブをカスタマイズするには、以下を実行します。
- Add Readiness Probe をクリックし、必要に応じてコンテナーが要求を処理する準備ができているかどうかを確認するためにパラメーターを変更し、チェックマークを選択してプローブを追加します。
- Add Liveness Probe をクリックし、必要に応じてコンテナーが実行中かどうかを確認するためにパラメーターを変更し、チェックマークを選択してプローブを追加します。
Add Startup Probe をクリックし、必要に応じてコンテナー内のアプリケーションが起動しているかどうかを確認するためにパラメーターを変更し、チェックマークを選択してプローブを追加します。
それぞれのプローブについて、ドロップダウンリストから要求タイプ (HTTP GET、Container Command、TCP Socket) を指定できます。選択した要求タイプに応じてフォームが変更されます。次に、プローブの成功および失敗のしきい値、コンテナーの起動後の最初のプローブ実行までの秒数、プローブの頻度、タイムアウト値など、他のパラメーターのデフォルト値を変更できます。
- ビルド設定およびデプロイメント
Build Configuration および Deployment リンクをクリックして、それぞれの設定オプションを表示します。オプションの一部はデフォルトで選択されています。必要なトリガーおよび環境変数を追加して、オプションをさらにカスタマイズできます。
サーバーレスアプリケーションの場合、Deployment オプションは表示されません。これは、Knative 設定リソースが
DeploymentConfig
リソースの代わりにデプロイメントの必要な状態を維持するためです。
- スケーリング
Scaling リンクをクリックして、最初にデプロイするアプリケーションの Pod 数またはインスタンス数を定義します。
サーバーレスデプロイメントを作成する場合、以下の設定を行うこともできます。
-
Min Pods は、Knative サービスである時点で実行する必要がある Pod 数の下限を決定します。これは、
minScale
設定としても知られています。 -
Max Pods は、Knative サービスである時点で実行できる Pod 数の上限を決定します。これは、
maxScale
設定としても知られています。 - Concurrency target は、ある時点でアプリケーションの各インスタンスに対して必要な同時リクエストの数を決定します。
- Concurrency limit は、ある時点でアプリケーションの各インスタンスに対して許容される同時リクエストの数の制限を決定します。
- Concurrency utilization は、Knative が追加のトラフィックを処理するために追加の Pod をスケールアップする際に満たす必要のある同時リクエストの制限のパーセンテージを決定します。
-
Autoscale window は、Autoscaler がパニックモードではない場合に、スケーリングの決定を行う際のインプットを提供するためにメトリクスの平均値を計算する期間を定義します。この期間中にリクエストが受信されなかった場合、サービスはゼロにスケーリングされます。Autoscale window のデフォルト期間は
60s
です。これは stable window としても知られています。
-
Min Pods は、Knative サービスである時点で実行する必要がある Pod 数の下限を決定します。これは、
- リソースの制限
- Resource Limit リンクをクリックして、コンテナーが実行時に保証または使用が許可されている CPU および メモリー リソースの量を設定します。
- ラベル
- Labels リンクをクリックして、カスタムラベルをアプリケーションに追加します。
- Create をクリックしてアプリケーションを作成し、成功の通知が表示されます。Topology ビューでアプリケーションのビルドステータスを確認できます。
3.2.5. コンテナーイメージをデプロイしてアプリケーションを作成
外部イメージレジストリーまたは内部レジストリーのイメージストリームタグを使用して、アプリケーションをクラスターにデプロイできます。
前提条件
- Red Hat OpenShift Service on AWS Web コンソールにログインしており、Developer パースペクティブを使用している。
手順
- +Add ビューで、Container images をクリックして、Deploy Images ページを表示します。
Image セクションで以下を行います。
- Image name from external registry を選択してパブリックレジストリーまたはプライベートレジストリーからイメージをデプロイメントするか、Image stream tag from internal registry を選択して内部レジストリーからイメージをデプロイメントします。
- Runtime icon タブでイメージのアイコンを選択します。
General セクションで、以下を実行します。
- Application name フィールドに、アプリケーションを分類するための一意の名前を入力します。
- Name フィールドに、このコンポーネント用に作成されたリソースを識別するための一意の名前を入力します。
Resource type セクションで、生成するリソースタイプを選択します。
-
Deployment を選択して、
Pod
およびReplicaSet
オブジェクトの宣言的更新を有効にします。 -
DeploymentConfig を選択して、
Pod
オブジェクトのテンプレートを定義し、新しいイメージと設定ソースのデプロイを管理します。
-
Deployment を選択して、
- Create をクリックします。Topology ビューでアプリケーションのビルドステータスを確認できます。
3.2.6. JAR ファイルをアップロードして Java アプリケーションをデプロイする
Web コンソールの Developer パースペクティブで、以下のオプションを使用して JAR ファイルをアップロードできます。
- Developer パースペクティブの +Add ビューに移動し、From Local Machine タイルで Upload JAR file をクリックします。JAR ファイルを参照および選択するか、JAR ファイルをドラッグしてアプリケーションをデプロイします。
- Topology ビューに移動し、Upload JAR file オプションを使用するか、JAR ファイルをドラッグしてアプリケーションをデプロイします。
- Topology ビューのコンテキストメニューで Upload JAR file オプションを使用して JAR ファイルをアップロードしてアプリケーションをデプロイします。
前提条件
-
dedicated-admin
ロールを持つユーザーが Cluster Samples Operator をインストールしている。 - Red Hat OpenShift Service on AWS Web コンソールにアクセスし、Developer パースペクティブを使用している。
手順
- Topology ビューで、任意の場所を右クリックして Add to Project メニューを表示します。
- Add to Project メニューにカーソルを置いてメニューオプションを表示し、Upload JAR file オプションを選択して Upload JAR file フォームを確認します。または、JAR ファイルを Topology ビューにドラッグできます。
- JAR file フィールドで、ローカルマシンで必要な JAR ファイルを参照し、これをアップロードします。または、JAR ファイルをフィールドにドラッグできます。互換性のないタイプのファイルが Topology ビューにドラッグされると、トーストアラートが右側に表示されます。互換性のないファイルタイプがアップロードフォームのフィールドにドロップされると、フィールドエラーが表示されます。
- デフォルトで、ランタイムアイコンとビルダーイメージが選択されています。ビルダーイメージが自動検出されていない場合は、ビルダーイメージを選択します。必要に応じて、Builder Image Version のドロップダウンリストを使用してバージョンを変更できます。
- オプション: Application Name フィールドに、リソースのラベル付けに使用する一意のアプリケーション名を入力します。
- Name フィールドに、関連付けられたリソースに名前を付けるために一意のコンポーネント名を入力します。
- オプション: Resource type ドロップダウンリストを使用して、リソースタイプを変更します。
- Advanced options メニューで Create a Route to the Application をクリックし、デプロイされたアプリケーションのパブリック URL を設定します。
- Create をクリックしてアプリケーションをデプロイします。JAR ファイルがアップロードされたことを通知するトースト通知が表示されます。トースト通知には、ビルドログを表示するリンクも含まれます。
ビルドの実行中にブラウザータブを閉じようとすると、Web アラートが表示されます。
JAR ファイルのアップロードとアプリケーションのデプロイメントが完了すると、Topology ビューにアプリケーションが表示されます。
3.2.7. Devfile レジストリーを使用した devfile へのアクセス
Developer パースペクティブの +Add フローで devfile を使用して、アプリケーションを作成できます。+Add フローは、devfile コミュニティーレジストリー との完全なインテグレーションを提供します。devfile は、ゼロから設定せずに開発環境を記述できる移植可能な YAML ファイルです。Devfile レジストリー を使用すると、事前に設定された devfile を使用してアプリケーションを作成できます。
手順
- Developer Perspective → +Add → Developer Catalog → All Services に移動します。Developer Catalog で利用可能なすべてのサービスの一覧が表示されます。
- Type で、Devfiles をクリックして、特定の言語またはフレームワークをサポートする devfiles を参照します。あるいは、キーワードフィルターを使用して、名前、タグ、または説明を使用して特定の devfile を検索できます。
- アプリケーションの作成に使用する devfile をクリックします。devfile タイルに、devfile の名前、説明、プロバイダー、ドキュメントなど、devfile の詳細が表示されます。
- Create をクリックしてアプリケーションを作成し、Topology ビューでアプリケーションを表示します。
3.2.8. Developer Catalog を使用したサービスまたはコンポーネントのアプリケーションへの追加
Developer Catalog を使用して、データベース、ビルダーイメージ、Helm チャートなどの Operator がサポートするサービスに基づいてアプリケーションとサービスをデプロイします。Developer Catalog には、プロジェクトに追加できるアプリケーションコンポーネント、サービス、イベントソース、または Source-to-Image ビルダーのコレクションが含まれます。クラスター管理者は、カタログで利用可能なコンテンツをカスタマイズできます。
手順
- Developer パースペクティブで、+Add に移動して、Developer Catalog タイルから All Services をクリックし、Developer Catalog で利用可能なすべてのサービスを表示します。
- All Services で、サービスの種類またはプロジェクトに追加する必要のあるコンポーネントを選択します。この例では、Databases を選択してすべてのデータベースサービスを一覧表示し、MariaDB をクリックしてサービスの詳細を表示します。
Instantiate Template をクリックして、MariaDB サービスの詳細情報を含む自動的に設定されたテンプレートを表示し、Create をクリックして Topology ビューで MariaDB サービスを作成し、これを表示します。
図3.1 トポロジーの MariaDB
3.2.9. 関連情報
- OpenShift Serverless の Knative ルーティング設定の詳細は、Routingを参照してください。
- OpenShift Serverless のドメインマッピング設定の詳細は、Configuring a custom domain for a Knative serviceを参照してください。
- OpenShift Serverless の Knative 自動スケーリング設定の詳細は、Autoscalingを参照してください。
- プロジェクトに新規ユーザーを追加する方法の詳細は、プロジェクトの使用 を参照してください。
- Helm チャートリポジトリーの作成の詳細は Helm Chart リポジトリーの作成 を参照してください。
3.3. インストールされた Operator からのアプリケーションの作成
Operator は、Kubernetes アプリケーションをパッケージ化、デプロイ、管理する方法です。クラスター管理者によってインストールされる Operator を使用して、アプリケーションを Red Hat OpenShift Service on AWS で作成できます。
以下では、開発者を対象に、Red Hat OpenShift Service on AWS Web コンソールを使用して、インストールされた Operator からアプリケーションを作成する例を示します。
3.3.1. Operator を使用した etcd クラスターの作成
この手順では、Operator Lifecycle Manager (OLM) で管理される etcd Operator を使用した新規 etcd クラスターの作成を説明します。
前提条件
- Red Hat OpenShift Service on AWS にアクセスできる。
- 管理者によってクラスター全体に etcd Operator がすでにインストールされている。
手順
-
この手順を実行するために Red Hat OpenShift Service on AWS Web コンソールで新規プロジェクトを作成します。この例では、
my-etcd
というプロジェクトを使用します。 Operators → Installed Operators ページに移動します。このページには、dedicated-admin によってクラスターにインストールされた使用可能な Operator が、クラスターサービスバージョン (CSV) のリストの形で表示されます。CSV は Operator によって提供されるソフトウェアを起動し、管理するために使用されます。
ヒント以下を使用して、CLI でこのリストを取得できます。
$ oc get csv
Installed Operators ページで、etcd Operator をクリックして詳細情報および選択可能なアクションを表示します。
Provided APIs に表示されているように、この Operator は 3 つの新規リソースタイプを利用可能にします。これには、etcd クラスター (
EtcdCluster
リソース) のタイプが含まれます。これらのオブジェクトは、Deployment
またはReplicaSet
などの組み込み済みのネイティブ Kubernetes オブジェクトと同様に機能しますが、これらには etcd を管理するための固有のロジックが含まれます。新規 etcd クラスターを作成します。
- etcd Cluster API ボックスで、Create instance をクリックします。
-
次のページでは、
EtcdCluster
オブジェクト (クラスターのサイズなど) のテンプレートを起動する最小条件を変更できます。ここでは Create をクリックして確定します。これにより、Operator がトリガーされ、Pod、サービス、および新規 etcd クラスターの他のコンポーネントが起動します。
example etcd クラスター、Resources タブの順にクリックし、Operator が自動的に作成および設定した多数のリソースが含まれていることを確認します。
Kubernetes サービスが作成され、プロジェクトの他の Pod からデータベースにアクセスできることを確認します。
所定プロジェクトで
edit
ロールを持つすべてのユーザーは、クラウドサービスのようにセルフサービス方式でプロジェクトにすでに作成されている Operator によって管理されるアプリケーションのインスタンス (この例では etcd クラスター) を作成し、管理し、削除することができます。この機能を持つ追加のユーザーを有効にする必要がある場合、プロジェクト管理者は以下のコマンドを使用してこのロールを追加できます。$ oc policy add-role-to-user edit <user> -n <target_project>
これで、etcd クラスターは Pod が正常でなくなったり、クラスターのノード間で移行する際の障害に対応し、データのリバランスを行います。最も重要なことは、適切なアクセス権を持つ dedicated-admin または開発者が、アプリケーションでデータベースを簡単に使用できるようになった点です。
3.4. CLI を使用したアプリケーションの作成
Red Hat OpenShift Service on AWS CLI を使用して、ソースまたはバイナリーコード、イメージおよびテンプレートを含むコンポーネントから Red Hat OpenShift Service on AWS アプリケーションを作成できます。
new-app
で作成したオブジェクトのセットは、ソースリポジトリー、イメージまたはテンプレートなどのインプットとして渡されるアーティファクトによって異なります。
3.4.1. ソースコードからのアプリケーションの作成
new-app
コマンドを使用して、ローカルまたはリモート Git リポジトリーのソースコードからアプリケーションを作成できます。
new-app
コマンドは、ビルド設定を作成し、これはソースコードから新規のアプリケーションイメージを作成します。new-app
コマンドは通常、Deployment
オブジェクトを作成して新規のイメージをデプロイするほか、サービスを作成してイメージを実行するデプロイメントへの負荷分散したアクセスを提供します。
Red Hat OpenShift Service on AWS は、パイプラインまたはソース、docker ビルドストラテジーのいずれを使用すべきかを自動的に検出します。また、ソースビルドの場合は、適切な言語のビルダーイメージを検出します。
3.4.1.1. Local
ローカルディレクトリーの Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app /<path to source code>
ローカル Git リポジトリーを使用する場合には、Red Hat OpenShift Service on AWS クラスターがアクセス可能な URL を参照する origin
という名前のリモートリポジトリーが必要です。認識されているリモートがない場合は、new-app
コマンドを実行してバイナリービルドを作成します。
3.4.1.2. リモート
リモート Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/sclorg/cakephp-ex
プライベートのリモート Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret
プライベートリモート Git リポジトリーを使用する場合には、--source-secret
フラグを使用して、既存のソースクローンのシークレットを指定できます。このシークレットは、ビルド設定に挿入され、リポジトリーにアクセスできるようになります。
--context-dir
フラグを指定することで、ソースコードリポジトリーのサブディレクトリーを使用できます。リモート Git リポジトリーおよびコンテキストサブディレクトリーを使用してアプリケーションを作成する場合は、以下を実行します。
$ oc new-app https://github.com/sclorg/s2i-ruby-container.git \ --context-dir=2.0/test/puma-test-app
また、リモート URL を指定する場合は、以下のように URL の最後に #<branch_name>
を追加することで、使用する Git ブランチを指定できます。
$ oc new-app https://github.com/openshift/ruby-hello-world.git#beta4
3.4.1.3. ビルドストラテジーの検出
Red Hat OpenShift Service on AWS は、特定のファイルを検出することで、使用するビルドストラテジーを自動的に決定します。
新規アプリケーションの作成時に Jenkins ファイルがソースリポジトリーのルートまたは指定されたコンテキストディレクトリーに存在する場合に、Red Hat OpenShift Service on AWS はパイプラインビルドストラテジーを生成します。
注記pipeline
ビルドストラテジーは非推奨になりました。代わりに Red Hat OpenShift Pipelines を使用することを検討してください。- 新しいアプリケーションの作成時に、ソースリポジトリーのルートまたは指定されたコンテキストディレクトリーに Dockerfile が存在する場合、Red Hat OpenShift Service on AWS は Docker ビルドストラテジーを生成します。
- Jenkins ファイルも Dockerfile も検出されない場合、Red Hat OpenShift Service on AWS はソースビルドストラテジーを生成します。
--strategy
フラグを docker
、pipeline
、または source
に設定して、自動的に検出されたビルドストラテジーを上書きします。
$ oc new-app /home/user/code/myapp --strategy=docker
oc
コマンドを使用するには、ビルドソースを含むファイルがリモートの git リポジトリーで利用可能である必要があります。すべてのソースビルドには、git remote -v
を使用する必要があります。
3.4.1.4. 言語の検出
ソースビルドストラテジーを使用する場合に、new-app
はリポジトリーのルートまたは指定したコンテキストディレクトリーに特定のファイルが存在するかどうかで、使用する言語ビルダーを判別しようとします。
言語 | ファイル |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
言語の検出後、new-app
は Red Hat OpenShift Service on AWS サーバーで、検出された言語と一致する supports
アノテーションが指定されたイメージストリームタグか、または検出された言語の名前に一致するイメージストリームを検索します。一致するものが見つからない場合には、new-app
は Docker Hub レジストリー で、名前をベースにした検出言語と一致するイメージの検索を行います。
~
をセパレーターとして使用し、イメージ (イメージストリームまたはコンテナーの仕様) とリポジトリーを指定して、ビルダーが特定のソースリポジトリーを使用するようにイメージを上書きすることができます。この方法を使用すると、ビルドストラテジーの検出および言語の検出は実行されない点に留意してください。
たとえば、リモートリポジトリーのソースを使用して myproject/my-ruby
イメージストリームを作成する場合は、以下を実行します。
$ oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git
ローカルリポジトリーのソースを使用して openshift/ruby-20-centos7:latest
コンテナーのイメージストリームを作成するには、以下を実行します。
$ oc new-app openshift/ruby-20-centos7:latest~/home/user/code/my-ruby-app
言語の検出では、リポジトリーのクローンを作成し、検査できるように Git クライアントをローカルにインストールする必要があります。Git が使用できない場合、<image>~<repository>
構文を指定し、リポジトリーで使用するビルダーイメージを指定して言語の検出手順を回避することができます。
-i <image> <repository>
呼び出しでは、アーティファクトのタイプを判別するために new-app
が repository
のクローンを試行する必要があります。そのため、これは Git が利用できない場合には失敗します。
-i <image> --code <repository>
呼び出しでは、image
がソースコードのビルダーとして使用されるか、データベースイメージの場合のように別個にデプロイされる必要があるかどうかを判別するために、new-app
が repository
のクローンを作成する必要があります。
3.4.2. イメージからアプリケーションを作成する方法
既存のイメージからアプリケーションのデプロイが可能です。イメージは、Red Hat OpenShift Service on AWS サーバー内のイメージストリーム、指定したレジストリー内のイメージ、またはローカルの Docker サーバー内のイメージから取得できます。
new-app
コマンドは、渡された引数に指定されたイメージの種類を判断しようとします。ただし、イメージが、--docker-image
引数を使用したコンテナーイメージなのか、または -i|--image-stream
引数を使用したイメージストリームなのかを、new-app
に明示的に指示できます。
ローカル Docker リポジトリーからイメージを指定した場合、同じイメージが Red Hat OpenShift Service on AWS のクラスターノードでも利用できることを確認する必要があります。
3.4.2.1. Docker Hub MySQL イメージ
たとえば、Docker Hub MySQL イメージからアプリケーションを作成するには、以下を実行します。
$ oc new-app mysql
3.4.2.2. プライベートレジストリーのイメージ
プライベートのレジストリーのイメージを使用してアプリケーションを作成し、コンテナーイメージの仕様全体を以下のように指定します。
$ oc new-app myregistry:5000/example/myimage
3.4.2.3. 既存のイメージストリームおよびオプションのイメージストリームタグ
既存のイメージストリームおよび任意のイメージストリームタグでアプリケーションを作成します。
$ oc new-app my-stream:v1
3.4.3. テンプレートからのアプリケーションの作成
テンプレート名を引数として指定することで、事前に保存したテンプレートまたはテンプレートファイルからアプリケーションを作成することができます。たとえば、サンプルアプリケーションテンプレートを保存し、これを利用してアプリケーションを作成できます。
現在のプロジェクトのテンプレートライブラリーにアプリケーションテンプレートをアップロードします。以下の例では、examples/sample-app/application-template-stibuild.json
というファイルからアプリケーションテンプレートをアップロードします。
$ oc create -f examples/sample-app/application-template-stibuild.json
次に、アプリケーションテンプレートを参照して新規アプリケーションを作成します。この例では、テンプレート名は ruby-helloworld-sample
です。
$ oc new-app ruby-helloworld-sample
Red Hat OpenShift Service on AWS にテンプレートファイルを保存せずに、ローカルファイルシステムでテンプレートファイルを参照して新規アプリケーションを作成するには、-f|--file
引数を使用します。以下は例になります。
$ oc new-app -f examples/sample-app/application-template-stibuild.json
3.4.3.1. テンプレートパラメーター
テンプレートをベースとするアプリケーションを作成する場合、以下の -p|--param
引数を使用してテンプレートで定義したパラメーター値を設定します。
$ oc new-app ruby-helloworld-sample \ -p ADMIN_USERNAME=admin -p ADMIN_PASSWORD=mypassword
パラメーターをファイルに保存しておいて、--param-file
を指定して、テンプレートをインスタンス化する時にこのファイルを使用することができます。標準入力からパラメーターを読み込む必要がある場合は、以下のように --param-file=-
を使用します。以下は、helloworld.params
というファイルの例です。
ADMIN_USERNAME=admin ADMIN_PASSWORD=mypassword
テンプレートをインスタンス化する時に、ファイルのパラメーターを参照します。
$ oc new-app ruby-helloworld-sample --param-file=helloworld.params
3.4.4. アプリケーション作成の変更
new-app
コマンドは、Red Hat OpenShift Service on AWS オブジェクトを生成します。このオブジェクトにより、作成されるアプリケーションがビルドされ、デプロイされ、実行されます。通常、これらのオブジェクトは現在のプロジェクトに作成され、これらのオブジェクトには入力ソースリポジトリーまたはインプットイメージから派生する名前が割り当てられます。ただし、new-app
でこの動作を変更することができます。
オブジェクト | 説明 |
---|---|
|
|
|
|
|
|
|
|
その他 | テンプレートのインスタンスを作成する際に、他のオブジェクトをテンプレートに基づいて生成できます。 |
3.4.4.1. 環境変数の指定
テンプレート、ソースまたはイメージからアプリケーションを生成する場合、-e|--env
引数を使用し、ランタイムに環境変数をアプリケーションコンテナーに渡すことができます。
$ oc new-app openshift/postgresql-92-centos7 \ -e POSTGRESQL_USER=user \ -e POSTGRESQL_DATABASE=db \ -e POSTGRESQL_PASSWORD=password
変数は、--env-file
引数を使用してファイルから読み取ることもできます。以下は、postgresql.env
というファイルの例です。
POSTGRESQL_USER=user POSTGRESQL_DATABASE=db POSTGRESQL_PASSWORD=password
ファイルから変数を読み取ります。
$ oc new-app openshift/postgresql-92-centos7 --env-file=postgresql.env
さらに --env-file=-
を使用することで、標準入力で環境変数を指定することもできます。
$ cat postgresql.env | oc new-app openshift/postgresql-92-centos7 --env-file=-
-e|--env
または --env-file
引数で渡される環境変数では、new-app
処理の一環として作成される BuildConfig
オブジェクトは更新されません。
3.4.4.2. ビルド環境変数の指定
テンプレート、ソースまたはイメージからアプリケーションを生成する場合、--build-env
引数を使用し、ランタイムに環境変数をビルドコンテナーに渡すことができます。
$ oc new-app openshift/ruby-23-centos7 \ --build-env HTTP_PROXY=http://myproxy.net:1337/ \ --build-env GEM_HOME=~/.gem
変数は、--build-env-file
引数を使用してファイルから読み取ることもできます。以下は、ruby.env
というファイルの例です。
HTTP_PROXY=http://myproxy.net:1337/ GEM_HOME=~/.gem
ファイルから変数を読み取ります。
$ oc new-app openshift/ruby-23-centos7 --build-env-file=ruby.env
さらに --build-env-file=-
を使用して、環境変数を標準入力で指定することもできます。
$ cat ruby.env | oc new-app openshift/ruby-23-centos7 --build-env-file=-
3.4.4.3. ラベルの指定
ソース、イメージ、またはテンプレートからアプリケーションを生成する場合、-l|--label
引数を使用し、作成されたオブジェクトにラベルを追加できます。ラベルを使用すると、アプリケーションに関連するオブジェクトを一括で選択、設定、削除することが簡単になります。
$ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world
3.4.4.4. 作成前の出力の表示
new-app
コマンドの実行に関するドライランを確認するには、yaml
または json
の値と共に -o|--output
引数を使用できます。次にこの出力を使用して、作成されるオブジェクトのプレビューまたは編集可能なファイルへのリダイレクトを実行できます。問題がなければ、oc create
を使用して Red Hat OpenShift Service on AWS オブジェクトを作成できます。
new-app
アーティファクトをファイルに出力するには、以下を実行します。
$ oc new-app https://github.com/openshift/ruby-hello-world \ -o yaml > myapp.yaml
ファイルを編集します。
$ vi myapp.yaml
ファイルを参照して新規アプリケーションを作成します。
$ oc create -f myapp.yaml
3.4.4.5. 別名でのオブジェクトの作成
通常 new-app
で作成されるオブジェクトの名前はソースリポジトリーまたは生成に使用されたイメージに基づいて付けられます。コマンドに --name
フラグを追加することで、生成されたオブジェクトの名前を設定できます。
$ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp
3.4.4.6. 別のプロジェクトでのオブジェクトの作成
通常 new-app
は現在のプロジェクトにオブジェクトを作成します。ただし、-n|--namespace
引数を使用して、別のプロジェクトにオブジェクトを作成することができます。
$ oc new-app https://github.com/openshift/ruby-hello-world -n myproject
3.4.4.7. 複数のオブジェクトの作成
new-app
コマンドは、複数のパラメーターを new-app
に指定して複数のアプリケーションを作成できます。コマンドラインで指定するラベルは、単一コマンドで作成されるすべてのオブジェクトに適用されます。環境変数は、ソースまたはイメージから作成されたすべてのコンポーネントに適用されます。
ソースリポジトリーおよび Docker Hub イメージからアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/openshift/ruby-hello-world mysql
ソースコードリポジトリーおよびビルダーイメージが別個の引数として指定されている場合、new-app
はソースコードリポジトリーのビルダーとしてそのビルダーイメージを使用します。これを意図していない場合は、~
セパレーターを使用してソースに必要なビルダーイメージを指定します。
3.4.4.8. 単一 Pod でのイメージとソースのグループ化
new-app
コマンドにより、単一 Pod に複数のイメージをまとめてデプロイできます。グループ化するイメージを指定するには +
セパレーターを使用します。--group
コマンドライン引数をグループ化する必要のあるイメージを指定する際に使用することもできます。ソースリポジトリーからビルドされたイメージを別のイメージと共にグループ化するには、そのビルダーイメージをグループで指定します。
$ oc new-app ruby+mysql
ソースからビルドされたイメージと外部のイメージをまとめてデプロイするには、以下を実行します。
$ oc new-app \ ruby~https://github.com/openshift/ruby-hello-world \ mysql \ --group=ruby+mysql
3.4.4.9. イメージ、テンプレート、および他の入力の検索
イメージ、テンプレート、および oc new-app
コマンドの他の入力内容を検索するには、--search
フラグおよび --list
フラグを追加します。たとえば、PHP を含むすべてのイメージまたはテンプレートを検索するには、以下を実行します。
$ oc new-app --search php
3.4.4.10. インポートモードの設定
oc new-app
を使用するときにインポートモードを設定するには、--import-mode
フラグを追加します。このフラグには Legacy
または PreserveOriginal
を追加できます。これにより、それぞれ単一のサブマニフェストまたはすべてのマニフェストを使用してイメージストリームを作成するオプションがユーザーに提供されます。
$ oc new-app --image=registry.redhat.io/ubi8/httpd-24:latest --import-mode=Legacy --name=test
$ oc new-app --image=registry.redhat.io/ubi8/httpd-24:latest --import-mode=PreserveOriginal --name=test
3.5. Ruby on Rails を使用したアプリケーションの作成
Ruby on Rails は Ruby で記述される Web フレームワークです。このガイドでは、Red Hat OpenShift Service on AWS での Rails 4 の使用を説明します。
チュートリアル全体をチェックして、Red Hat OpenShift Service on AWS でアプリケーションを実行するために必要なすべての手順を概観してください。問題に直面した場合には、チュートリアル全体を振り返り、もう一度問題に対応してください。またチュートリアルは、実行済みの手順を確認し、すべての手順が適切に実行されていることを確認するのに役立ちます。
3.5.1. 前提条件
- Ruby および Rails の基本知識
- Ruby 2.0.0+、Rubygems、Bundler のローカルにインストールされたバージョン
- Git の基本知識
- Red Hat OpenShift Service on AWS 4 のインスタンスの実行
-
Red Hat OpenShift Service on AWS のインスタンスが実行中であり、利用可能であることを確認してください。さらに、
oc
CLI クライアントがインストールされており、コマンドがコマンドシェルからアクセスできることを確認し、メールアドレスおよびパスワードを使用してログインする際にこれを使用できるようにします。
3.5.2. データベースの設定
Rails アプリケーションはほぼ常にデータベースと併用されます。ローカル開発の場合は、PostgreSQL データベースを使用します。
手順
データベースをインストールします。
$ sudo yum install -y postgresql postgresql-server postgresql-devel
データベースを初期化します。
$ sudo postgresql-setup initdb
このコマンドで
/var/lib/pgsql/data
ディレクトリーが作成され、このディレクトリーにデータが保存されます。データベースを起動します。
$ sudo systemctl start postgresql.service
データベースが実行されたら、
rails
ユーザーを作成します。$ sudo -u postgres createuser -s rails
作成をしたユーザーのパスワードは作成されていない点に留意してください。
3.5.3. アプリケーションの作成
Rails アプリケーションをゼロからビルドするには、Rails gem を先にインストールする必要があります。その後に、アプリケーションを作成することができます。
手順
Rails gem をインストールします。
$ gem install rails
出力例
Successfully installed rails-4.3.0 1 gem installed
Rails gem のインストール後に、PostgreSQL をデータベースとして指定して新規アプリケーションを作成します。
$ rails new rails-app --database=postgresql
新規アプリケーションディレクトリーに切り替えます。
$ cd rails-app
アプリケーションがすでにある場合には
pg
(postgresql) gem がGemfile
に配置されていることを確認します。配置されていない場合には、gem を追加してGemfile
を編集します。gem 'pg'
すべての依存関係を含む
Gemfile.lock
を新たに生成します。$ bundle install
pg
gem でpostgresql
データベースを使用するほか、config/database.yml
がpostgresql
アダプターを使用していることを確認する必要があります。config/database.yml
ファイルのdefault
セクションを以下のように更新するようにしてください。default: &default adapter: postgresql encoding: unicode pool: 5 host: localhost username: rails password: <password>
アプリケーションの開発およびテスト用のデータベースを作成します。
$ rake db:create
これで PostgreSQL サーバーに
development
およびtest
データベースが作成されます。
3.5.3.1. Welcome ページの作成
Rails 4 では静的な public/index.html
ページが実稼働環境で提供されなくなったので、新たに root ページを作成する必要があります。
Welcome ページをカスタマイズするには、以下の手順を実行する必要があります。
- index アクションでコントローラーを作成します。
- welcome コントローラーの index アクションの view ページを作成します。
- 作成したコントローラーとビューと共にアプリケーションの root ページを提供するルートを作成します。
Rails には、これらの必要な手順をすべて実行するジェネレーターがあります。
手順
Rails ジェネレーターを実行します。
$ rails generate controller welcome index
すべての必要なファイルが作成されます。
以下のように
config/routes.rb
ファイルの 2 行目を編集します。root 'welcome#index'
rails server を実行して、ページが利用できることを確認します。
$ rails server
ブラウザーで http://localhost:3000 に移動してページを表示してください。このページが表示されない場合は、サーバーに出力されるログを確認してデバッグを行ってください。
3.5.3.2. Red Hat OpenShift Service on AWS のアプリケーションの設定
アプリケーションが Red Hat OpenShift Service on AWS で実行されている PostgreSQL データベースサービスと通信できるようにするには、データベースサービスの作成時に、config/database.yml
の default
セクションを、環境変数を使用するように編集する必要があります。この環境変数は後で定義する必要があります。
手順
以下のように事前に定義した変数で、
config/database.yml
のdefault
セクションを編集します。config/database
YAML ファイルのサンプル<% user = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? "root" : ENV["POSTGRESQL_USER"] %> <% password = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? ENV["POSTGRESQL_ADMIN_PASSWORD"] : ENV["POSTGRESQL_PASSWORD"] %> <% db_service = ENV.fetch("DATABASE_SERVICE_NAME","").upcase %> default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV["POSTGRESQL_MAX_CONNECTIONS"] || 5 %> username: <%= user %> password: <%= password %> host: <%= ENV["#{db_service}_SERVICE_HOST"] %> port: <%= ENV["#{db_service}_SERVICE_PORT"] %> database: <%= ENV["POSTGRESQL_DATABASE"] %>
3.5.3.3. アプリケーションの Git への保存
通常 Red Hat OpenShift Service on AWS でアプリケーションをビルドする場合、ソースコードを git リポジトリーに保存する必要があるため、git
がない場合にはインストールしてください。
前提条件
- git をインストールします。
手順
ls -1
コマンドを実行して、Rails アプリケーションのディレクトリーで操作を行っていることを確認します。コマンドの出力は以下のようになります。$ ls -1
出力例
app bin config config.ru db Gemfile Gemfile.lock lib log public Rakefile README.rdoc test tmp vendor
Rails app ディレクトリーで以下のコマンドを実行して、コードを初期化し、git にコミットします。
$ git init
$ git add .
$ git commit -m "initial commit"
アプリケーションがコミットされたら、これをリモートリポジトリーにプッシュする必要があります。新規リポジトリーを作成する GitHub アカウントです。
お使いの
git
リポジトリーを参照するリモートを設定します。$ git remote add origin git@github.com:<namespace/repository-name>.git
アプリケーションをリモートの git リポジトリーにプッシュします。
$ git push
3.5.4. Red Hat OpenShift Service on AWS へのアプリケーションのデプロイ
アプリケーションを Red Hat OpenShift Service on AWS にデプロイできます。
rails-app
プロジェクトの作成後、新規プロジェクトの namespace に自動的に切り替えられます。
Red Hat OpenShift Service on AWS へのアプリケーションのデプロイでは 3 つの手順を実行します。
- Red Hat OpenShift Service on AWS の PostgreSQL イメージからデータベースサービスを作成します。
- データベースサービスと連動する Red Hat OpenShift Service on AWS の Ruby 2.0 ビルダーイメージおよび Ruby on Rails ソースコードのフロントエンドサービスを作成します。
- アプリケーションのルートを作成します。
3.5.4.1. データベースサービスの作成
手順
Rails アプリケーションには実行中のデータベースサービスが必要です。このサービスには、PostgreSQL データベースイメージを使用します。
データベースサービスを作成するために、oc new-app
コマンドを使用します。このコマンドには、必要な環境変数を渡す必要があります。この環境変数は、データベースコンテナー内で使用します。これらの環境変数は、ユーザー名、パスワード、およびデータベースの名前を設定するために必要です。これらの環境変数の値を任意の値に変更できます。変数は以下のようになります。
- POSTGRESQL_DATABASE
- POSTGRESQL_USER
- POSTGRESQL_PASSWORD
これらの変数を設定すると、以下を確認できます。
- 指定の名前のデータベースが存在する
- 指定の名前のユーザーが存在する
- ユーザーは指定のパスワードで指定のデータベースにアクセスできる
手順
データベースサービスを作成します。
$ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password
データベース管理者のパスワードを設定するには、直前のコマンドに以下を追加します。
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
進行状況を確認します。
$ oc get pods --watch
3.5.4.2. フロントエンドサービスの作成
アプリケーションを Red Hat OpenShift Service on AWS にデプロイするには、アプリケーションが置かれるリポジトリーを指定する必要があります。
手順
フロントエンドサービスを作成し、データベースサービスの作成時に設定されたデータベース関連の環境変数を指定します。
$ oc new-app path/to/source/code --name=rails-app -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password -e POSTGRESQL_DATABASE=db_name -e DATABASE_SERVICE_NAME=postgresql
このコマンドを実行すると、Red Hat OpenShift Service on AWS が指定された環境変数を使用して、ソースコードの取得、ビルダーのセットアップ、アプリケーションイメージのビルド、新しく作成されたイメージのデプロイを実行します。このアプリケーションには
rails-app
という名前を指定します。rails-app
デプロイメント設定の JSON ドキュメントを参照して、環境変数が追加されたかどうかを確認できます。$ oc get dc rails-app -o json
以下のセクションが表示されるはずです。
出力例
env": [ { "name": "POSTGRESQL_USER", "value": "username" }, { "name": "POSTGRESQL_PASSWORD", "value": "password" }, { "name": "POSTGRESQL_DATABASE", "value": "db_name" }, { "name": "DATABASE_SERVICE_NAME", "value": "postgresql" } ],
ビルドプロセスを確認します。
$ oc logs -f build/rails-app-1
ビルドが完了したら、Red Hat OpenShift Service on AWS で実行中の Pod を確認します。
$ oc get pods
myapp-<number>-<hash>
で始まる行が表示されますが、これは Red Hat OpenShift Service on AWS で実行中のアプリケーションです。データベースの移行スクリプトを実行してデータベースを初期化してからでないと、アプリケーションは機能しません。これを実行する 2 種類の方法があります。
実行中のフロントエンドコンテナーから手動で実行する
rsh
コマンドでフロントエンドコンテナーに exec を実行します。$ oc rsh <frontend_pod_id>
コンテナー内から移行を実行します。
$ RAILS_ENV=production bundle exec rake db:migrate
development
またはtest
環境で Rails アプリケーションを実行する場合には、RAILS_ENV
の環境変数を指定する必要はありません。
- デプロイメント前のライフサイクルフックをテンプレートに追する
3.5.4.3. アプリケーションのルートの作成
アプリケーションのルートを作成するためにサービスを公開できます。
指定するホスト名がルーターの IP アドレスに解決することを確認します。
第4章 Topology ビューを使用したアプリケーション構成の表示
Web コンソールの Developer パースペクティブにある Topology ビューは、プロジェクト内のすべてのアプリケーション、それらのビルドステータスおよびアプリケーションに関連するコンポーネントとサービスを視覚的に表示します。
4.1. 前提条件
Topology ビューでアプリケーションを表示し、それらと対話するには、以下を確認します。
- Web コンソールにログインしている。
- Developer パースペクティブを使用している。
4.2. アプリケーションのトポロジーの表示
Developer パースペクティブの左側のナビゲーションパネルを使用すると、Topology ビューに移動できます。アプリケーションをデプロイしたら、Graph view に自動的に移動します。ここでは、アプリケーション Pod のステータスの確認、パブリック URL でのアプリケーションへの迅速なアクセス、ソースコードへのアクセスとその変更、最終ビルドのステータスの確認ができます。ズームインおよびズームアウトにより、特定のアプリケーションの詳細を表示することができます。
Topology ビューは、List ビューを使用してアプリケーションを監視するオプションも提供します。List view アイコン ( ) を使用してすべてのアプリケーションの一覧を表示し、Graph view アイコン ( ) を使用してグラフビューに戻します。
以下を使用して、必要に応じてビューをカスタマイズできます。
- Find by name フィールドを使用して、必要なコンポーネントを見つけます。検索結果は表示可能な領域外に表示される可能性があります。その場合、画面の左下のツールバーで Fit to Screen をクリックし、Topology ビューのサイズを変更して、すべてのコンポーネントを表示します。
Display Options ドロップダウンリストを使用して、各種アプリケーショングループの Topology ビューを設定します。選択可能なオプションは、プロジェクトにデプロイされるコンポーネントのタイプによって異なります。
Expand グループ
- Virtual Machines: 仮想マシンを表示または非表示にするためにこれを切り替えます。
- Application Groupings: アプリケーショングループとそれに関連するアラートの概要を使用して、アプリケーショングループをカードにまとめるには、これをクリアします。
- Helm Releases: 指定のリリースの概要を使用して、Helm リリースとしてデプロイされたコンポーネントをカードにまとめるには、これをクリアします。
- Operator Groupings: 指定のグループの概要を使用して Operator でデプロイされたコンポーネントをカードにまとめるには、これをクリアします。
Pod 数 または ラベルに基づく Show の要素
- Pod Count: コンポーネントアイコンでコンポーネントの Pod 数を表示するためにこれを選択します。
- Labels: コンポーネントラベルを表示または非表示にするためにこれを選択します。
4.3. アプリケーションおよびコンポーネントとの対話
Web コンソールの Developer パースペクティブの Topology ビューでは、Graph view に、アプリケーションおよびコンポーネントと対話するための次のオプションが提供されます。
- Open URL ( ) をクリックして、パブリック URL のルートで公開されるアプリケーションを表示します。
Edit Source code をクリックして、ソースコードにアクセスし、これを変更します。
注記この機能は、From Git、From Catalog、および From Dockerfile オプションを使用してアプリケーションを作成する場合にのみ利用できます。
- カーソルを Pod の左下のアイコンの上に置き、最新ビルドおよびそのステータスを確認します。アプリケーションビルドのステータスは、New ( )、Pending ()、Running ( )、Completed ( )、Failed ( )、および Canceled ( ) と表示されます。
Pod のステータスまたはフェーズは、色で区別され、ツールチップで次のように表示されます。
- Running ( ): Pod はノードにバインドされ、すべてのコンテナーが作成されます。1 つ以上のコンテナーが実行中か、起動または再起動のプロセスが実行中です。
- Not Ready( ): 複数のコンテナーを実行している Pod。すべてのコンテナーが準備状態にある訳ではありません。
- Warning( ): Pod のコンテナーは終了されていますが、正常に終了しませんでした。一部のコンテナーは、他の状態にある場合があります。
- Failed( ): Pod 内のすべてのコンテナーは終了しますが、少なくとも 1 つのコンテナーが終了に失敗しました。つまり、コンテナーはゼロ以外のステータスで終了するか、システムによって終了された状態であるかのいずれかになります。
- Pending( ): Pod は Kubernetes クラスターによって受け入れられますが、1 つ以上のコンテナーが設定されておらず、実行される準備が整っていません。これには、Pod がスケジュールされるのを待機する時間や、ネットワーク経由でコンテナーイメージのダウンロードに費やされた時間が含まれます。
- Succeeded( ): Pod のすべてのコンテナーが正常に終了し、再起動されません。
- Terminating( ): Pod が削除されている場合に、一部の kubectl コマンドによって Terminating と表示されます。Terminating ステータスは Pod フェーズのいずれにもありません。Pod には正常な終了期間が付与されます。これはデフォルトで 30 秒に設定されます。
- Unknown( ): Pod の状態を取得できませんでした。このフェーズは、通常、Pod が実行されているノードとの通信でエラーが発生するために生じます。
アプリケーションを作成し、イメージがデプロイされると、ステータスは Pending と表示されます。アプリケーションをビルドすると、Runningと表示されます。
図4.1 Application トポロジー
以下のように、異なるタイプのリソースオブジェクトのインジケーターと共に、アプリケーションリソース名が追加されます。
-
CJ:
CronJob
-
D:
Deployment
-
DC:
DeploymentConfig
-
DS:
DaemonSet
-
J:
Job
-
P:
Pod
-
SS:
StatefulSet
(Knative): サーバーレスアプリケーション
注記サーバーレスアプリケーションでは、Graph view での読み込みおよび表示にしばらく時間がかかります。サーバーレスアプリケーションをデプロイすると、これは最初にサービスリソースを作成し、次にリビジョンを作成します。続いて、これは Graph view にデプロイされ、表示されます。これが唯一のワークロードの場合には、Add ページにリダイレクトされる可能性があります。リビジョンがデプロイされると、サーバーレスアプリケーションは Graph view ビューに表示されます。
-
CJ:
4.4. アプリケーション Pod のスケーリングおよびビルドとルートの確認
Topology ビューは、Overview パネルでデプロイ済みのコンポーネントの詳細を提供します。次のように、Overview タブと Details タブを使用して、アプリケーション Pod をスケーリングし、ビルドステータス、サービス、およびルートを確認できます。
コンポーネントノードをクリックし、右側の Overview パネルを確認します。Details タブを使用して以下を行います。
- 上下の矢印を使用して Pod をスケーリングし、アプリケーションのインスタンス数の増減を手動で調整します。サーバーレスアプリケーションの場合、Pod は、チャネルのトラフィックに基づいてアイドルおよびスケールアップ時に自動的にゼロにスケーリングされます。
- アプリケーションの ラベル、アノテーション および ステータス を確認します。
Resources タブをクリックして、以下を実行します。
- すべての Pod のリストを確認し、それらのステータスを表示し、ログにアクセスし、Pod をクリックして Pod の詳細を表示します。
- ビルド、ステータスを確認し、ログにアクセスし、必要に応じて新規ビルドを開始します。
- コンポーネントによって使用されるサービスとルートを確認します。
サーバーレスアプリケーションの場合、Resources タブは、そのコンポーネントに使用されるリビジョン、ルート、および設定に関する情報を提供します。
4.5. コンポーネントの既存プロジェクトへの追加
プロジェクトにコンポーネントを追加できます。
手順
- +Add ビューに移動します。
- Add to Project ( ) をクリックし、左側のナビゲーションペインまたは Ctrl+Spaceを押します。
コンポーネントを検索し、Start/Create/Install ボタンをクリックするか、Enter をクリックしてコンポーネントをプロジェクトに追加し、トポロジー Graph view で確認します。
図4.2 クイック検索を使用したコンポーネントの追加
あるいは、トポロジーの Graph view を右クリックして、Import from Git、Container Image、Database、From Catalog、Operator Backed、Helm Charts、Samples または Upload JAR file などのコンテキストメニューの利用可能なオプションを使用して、プロジェクトにコンポーネントを追加することもできます。
図4.3 サービスを追加するコンテキストメニュー
4.6. アプリケーション内での複数コンポーネントのグループ化
+Add ビューを使用して、複数のコンポーネントまたはサービスをプロジェクトに追加し、Topology ビューを使用してアプリケーショングループ内のアプリケーションとリソースをグループ化できます。
前提条件
- Developer パースペクティブを使用して、Red Hat OpenShift Service on AWS に少なくとも 2 つ以上のコンポーネントが作成、デプロイされている。
手順
サービスを既存のアプリケーショングループに追加するには、Shift+ を既存のアプリケーショングループに追加します。コンポーネントをドラッグし、これをアプリケーショングループに追加すると、必要なラベルがコンポーネントに追加されます。
図4.4 アプリケーションのグループ化
または、以下のようにコンポーネントをアプリケーションに追加することもできます。
- サービス Pod をクリックし、右側の Overview パネルを確認します。
- Actions ドロップダウンメニューをクリックし、Edit Application Grouping を選択します。
- Edit Application Grouping ダイアログボックスで、Application ドロップダウンリストをクリックし、適切なアプリケーショングループを選択します。
- Save をクリックしてサービスをアプリケーショングループに追加します。
アプリケーショングループからコンポーネントを削除するには、コンポーネントを選択し、Shift+ ドラッグでこれをアプリケーショングループからドラッグします。
4.7. サービスのアプリケーションへの追加
アプリケーションにサービスを追加するには、トポロジー Graph view のコンテキストメニューで+Add アクションを使用します。
コンテキストメニュー以外に、サイドバーを使用するか、アプリケーショングループから矢印の上にマウスをかざしてドラッグしてサービスを追加できます。
手順
トポロジー Graph view でアプリケーショングループを右クリックし、コンテキストメニューを表示します。
図4.5 リソースコンテキストメニューの追加
- Add to Application を使用して、From Git、Container Image、From Dockerfile、From Devfile、Upload JAR file、Event Source、Channel、または Broker など、アプリケーショングループにサービスを追加する手法を選択します。
- 選択した手法のフォームに入力して、Create をクリックします。たとえば、Git リポジトリーのソースコードに基づいてサービスを追加するには、From Git の手法を選択し、Import from Git フォームに入力して、Create をクリックします。
4.8. アプリケーションからのサービスの削除
トポロジー Graph view のコンテキストメニューでアプリケーションからサービスを削除します。
手順
- トポロジー Graph view でアプリケーショングループのサービスを右クリックし、コンテキストメニューを表示します。
Delete Deployment を選択してサービスを削除します。
図4.6 デプロイメントオプションの削除
4.9. Topology ビューに使用するラベルとアノテーション
Topology ビューは、以下のラベルおよびアノテーションを使用します。
- ノードに表示されるアイコン
-
ノードのアイコンは、最初に
app.openshift.io/runtime
ラベルを使用してからapp.kubernetes.io/name
ラベルを使用して一致するアイコンを検索して定義されます。このマッチングは、事前定義されたアイコンセットを使用して行われます。 - ソースコードエディターまたはソースへのリンク
-
app.openshift.io/vcs-uri
アノテーションは、ソースコードエディターへのリンクを作成するために使用されます。 - ノードコネクター
-
app.openshift.io/connects-to
アノテーションは、ノードに接続するために使用されます。 - アプリケーションのグループ化
-
app.kubernetes.io/part-of=<appname>
ラベルは、アプリケーション、サービス、およびコンポーネントをグループ化するために使用されます。
Red Hat OpenShift Service on AWS アプリケーションで使用する必要のあるラベルとアノテーションの詳細は、Guidelines for labels and annotations for OpenShift applications を参照してください。
4.10. 関連情報
- Git からアプリケーションを作成する方法は、Git のコードベースのインポートおよびアプリケーションの作成を参照してください。
第5章 Helm チャートの使用
5.1. Helm について
Helm は、アプリケーションやサービスの Red Hat OpenShift Service on AWS クラスターへのデプロイメントを単純化するソフトウェアパッケージマネージャーです。
Helm は charts というパッケージ形式を使用します。Helm チャートは、Red Hat OpenShift Service on AWS リソースを記述するファイルのコレクションです。
char クラスターでチャートを作成すると、release と呼ばれるチャートの実行中のインスタンスが作成されます。
チャートが作成されるか、リリースがアップグレードまたはロールバックされるたびに、増分リビジョンが作成されます。
5.1.1. 主な特長
Helm は以下を行う機能を提供します。
- チャートリポジトリーに保存したチャートの大規模なコレクションの検索。
- 既存のチャートの変更。
- Red Hat OpenShift Service on AWS または Kubernetes リソースの使用による独自のチャートの作成。
- アプリケーションのチャートとしてのパッケージ化および共有。
5.1.2. OpenShift の Helm チャートの Red Hat 認定
Red Hat OpenShift Service on AWS にデプロイする全コンポーネントに対して、Red Hat による Helm チャートの検証と認定を受けることができます。チャートは、自動化の Red Hat OpenShift 認定ワークフローを経て、セキュリティーコンプライアンスを確保し、プラットフォームとの統合とサービス全般が最適であることを保証します。認定はチャートの整合性を確保し、Helm チャートが Red Hat OpenShift クラスターでシームレスに機能することを確認します。
5.1.3. 関連情報
- Red Hat パートナーとしての Helm チャートの認定方法は、OpenShift の Helm チャートの Red Hat 認定 を参照してください。
- Red Hat パートナー向けの OpenShift および Container 認定に関する情報は、Partner Guide for OpenShift and Container Certification を参照してください。
-
チャートのリストについては、Red Hat
Helm インデックス
ファイルを参照してください。 - Red Hat Marketplace で利用可能なチャートを確認できます。詳細は、Red Hat Marketplace の使用 を参照してください。
5.2. Helm のインストール
以下のセクションでは、CLI を使用して各種の異なるプラットフォームに Helm をインストールする方法を説明します。
また、Red Hat OpenShift Service on AWS Web コンソールから最新のバイナリーへの URL を見つけるには、右上隅の ? アイコンをクリックし、Command Line Tools を選択します。
前提条件
- Go バージョン 1.13 以降がインストールされている。
5.2.1. Linux の場合
Linux x86_64 または Linux amd64 Helm バイナリーをダウンロードし、これをパスに追加します。
# curl -L https://mirror.openshift.com/pub/openshift-v4/clients/helm/latest/helm-linux-amd64 -o /usr/local/bin/helm
バイナリーファイルを実行可能にします。
# chmod +x /usr/local/bin/helm
インストールされたバージョンを確認します。
$ helm version
出力例
version.BuildInfo{Version:"v3.0", GitCommit:"b31719aab7963acf4887a1c1e6d5e53378e34d93", GitTreeState:"clean", GoVersion:"go1.13.4"}
5.2.2. Windows 7/8 の場合
-
最新の
.exe
ファイル をダウンロードし、希望のディレクトリーに配置します。 - Start を右クリックし、Control Panel をクリックします。
- System and Security を選択してから System をクリックします。
- 左側のメニューから、Advanced systems settings を選択し、下部にある Environment Variables をクリックします。
- Variable セクションから Path を選択し、Edit をクリックします。
-
New をクリックして、
.exe
ファイルのあるフォルダーへのパスをフィールドに入力するか、Browse をクリックし、ディレクトリーを選択して OK をクリックします。
5.2.3. Windows 10 の場合
-
最新の
.exe
ファイル をダウンロードし、希望のディレクトリーに配置します。 -
Search クリックして、
env
またはenvironment
を入力します。 - Edit environment variables for your account を選択します。
- Variable セクションから Path を選択し、Edit をクリックします。
- New をクリックし、exe ファイルのあるディレクトリーへのパスをフィールドに入力するか、Browse をクリックし、ディレクトリーを選択して OK をクリックします。
5.2.4. MacOS の場合
Helm バイナリーをダウンロードし、これをパスに追加します。
# curl -L https://mirror.openshift.com/pub/openshift-v4/clients/helm/latest/helm-darwin-amd64 -o /usr/local/bin/helm
バイナリーファイルを実行可能にします。
# chmod +x /usr/local/bin/helm
インストールされたバージョンを確認します。
$ helm version
出力例
version.BuildInfo{Version:"v3.0", GitCommit:"b31719aab7963acf4887a1c1e6d5e53378e34d93", GitTreeState:"clean", GoVersion:"go1.13.4"}
5.3. カスタム Helm チャートリポジトリーの設定
Web コンソールの Developer パースペクティブの Developer Catalog には、クラスターで利用可能な Helm チャートが表示されます。デフォルトで、これは Red Hat Helm チャートリポジトリーの OpenShift Helm チャートのリストを表示します。チャートの一覧は、Red Hat Helm インデックス
ファイルを参照してください。
クラスター管理者は、デフォルトのクラスタースコープの Helm リポジトリーとは別に、複数のクラスタースコープおよび namespace スコープの Helm チャートリポジトリーを追加し、Developer Catalog でこれらのリポジトリーから Helm チャートを表示できます。
適切なロールベースアクセス制御 (RBAC) パーミッションを持つ通常のユーザーまたはプロジェクトメンバーとして、デフォルトのクラスタースコープの Helm リポジトリーとは別に、複数の namespace スコープの Helm チャートリポジトリーを追加し、Developer Catalog でこれらのリポジトリーから Helm チャートを表示できます。
Web コンソールの Developer パースペクティブでは、Helm ページを使用して次のことができます。
- 作成 ボタンを使用して、Helm リリースとリポジトリーを作成します。
- クラスタースコープまたは namespace スコープの Helm チャートリポジトリーを作成、更新、または削除します。
- リポジトリータブで既存の Helm チャートリポジトリーのリストを表示します。これも、クラスタースコープまたは namespace スコープのいずれかとして簡単に区別できます。
5.3.1. 開発者パースペクティブを使用した Helm リリースの作成
Web コンソールの Developer パースペクティブまたは CLI を使用して、Developer Catalog にリストされている Helm チャートからリリースを選択して作成できます。Helm チャートをインストールして Helm リリースを作成し、Web コンソールの Developer パースペクティブに表示できます。
前提条件
- Web コンソールにログインしており、Developer パースペクティブに切り替えている。
手順
Developer Catalog で提供される Helm チャートから Helm リリースを作成するには、以下を実行します。
- Developer パースペクティブで、+Add ビューに移動し、プロジェクトを選択します。次に、Helm Chart オプションをクリックし、Developer Catalog にすべての Helm チャートを表示します。
- チャートを選択し、チャートの説明、README、チャートに関するその他の詳細を確認します。
Create をクリックします。
図5.1 Developer カタログの Helm チャート
Create Helm Release ページで:
- リリースの固有の名前を Release Name フィールドに入力します。
- Chart Version ドロップダウンリストから必要なチャートのバージョンを選択します。
Form View または YAML View を使用して Helm チャートを設定します。
注記利用可能な場合は、YAML View と Form View 間で切り替えることができます。ビューの切り替え時に、データは永続化されます。
Create をクリックして Helm リリースを作成します。Web コンソールは、Topology ビューに新しいリリースを表示します。
Helm チャートにリリースノートがある場合は、Web コンソールに表示されます。
Helm チャートがワークロードを作成する場合、Web コンソールはそれらを Topology または Helm リリース詳細 ページに表示します。ワークロードは、
DaemonSet
、CronJob
、Pod
、Deployment
、およびDeploymentConfig
です。- Helm Releases ページで、新しく作成された Helm リリースを表示します。
サイドパネルの Actions ボタンを使用するか、Helm リリースを右クリックして、Helm リリースをアップグレード、ロールバック、または削除できます。
5.3.2. Web 端末での Helm の使用
Web コンソールの Developer パースペクティブで Web ターミナルにアクセスすると、Helm を使用できます。
5.3.3. Red Hat OpenShift Service on AWS でのカスタム Helm チャートの作成
手順
新しいプロジェクトを作成します。
$ oc new-project nodejs-ex-k
Red Hat OpenShift Service on AWS オブジェクトを含むサンプル Node.js チャートをダウンロードします。
$ git clone https://github.com/redhat-developer/redhat-helm-charts
サンプルチャートを含むディレクトリーに移動します。
$ cd redhat-helm-charts/alpha/nodejs-ex-k/
Chart.yaml
ファイルを編集し、チャートの説明を追加します。apiVersion: v2 1 name: nodejs-ex-k 2 description: A Helm chart for OpenShift 3 icon: https://static.redhat.com/libs/redhat/brand-assets/latest/corp/logo.svg 4 version: 0.2.1 5
チャートが適切にフォーマットされていることを確認します。
$ helm lint
出力例
[INFO] Chart.yaml: icon is recommended 1 chart(s) linted, 0 chart(s) failed
直前のディレクトリーレベルに移動します。
$ cd ..
チャートをインストールします。
$ helm install nodejs-chart nodejs-ex-k
チャートが正常にインストールされたことを確認します。
$ helm list
出力例
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nodejs-chart nodejs-ex-k 1 2019-12-05 15:06:51.379134163 -0500 EST deployed nodejs-0.1.0 1.16.0
5.3.4. 証明書レベルでの Helm チャートのフィルタリング
Developer Catalog の認定レベルに基づいて Helm チャートをフィルターできます。
手順
- Developer パースペクティブで、+Add ビューに移動し、プロジェクトを選択します。
- Developer Catalog タイルから、Helm Chart オプションを選択して Developer Catalog ですべての Helm チャートを表示します。
Helm チャートのリストの左側にあるフィルターを使用して、必要なチャートをフィルターします。
- Chart Repositories フィルターを使用して、Red Hat Certification Charts または OpenShift Helm Charts が提供したチャートをフィルターします。
- Source フィルターを使用して、Partners、Community または Red Hat から提供されるチャートをフィルターします。認定チャートはアイコン ( ) で表示されます。
プロバイダータイプが 1 つしかない場合は、Source フィルターは表示されません。
必要なチャートを選択してインストールできるようになりました。
5.4. Helm リリースの使用
Web コンソールの Developer パースペクティブを使用して、Helm リリースを更新、ロールバック、または削除できます。
5.4.1. 前提条件
- Web コンソールにログインしており、Developer パースペクティブに切り替えている。
5.4.2. Helm リリースのアップグレード
Helm リリースをアップグレードして、新規チャートバージョンにアップグレードしたり、リリース設定を更新したりできます。
手順
- Topology ビューで Helm リリースを選択し、サイドパネルを表示します。
- Actions → Upgrade Helm Release をクリックします。
- Upgrade Helm Release ページで、アップグレード先とする Chart Version を選択してから Upgrade をクリックし、別の Helm リリースを作成します。Helm Releases ページには 2 つのリビジョンが表示されます。
5.4.3. Helm リリースのロールバック
リリースに失敗する場合、Helm リリースを直前のバージョンにロールバックできます。
手順
Helm ビューを使用してリリースをロールバックするには、以下を実行します。
- Developer パースペクティブで Helm ビューに移動し、namespace の Helm Releases を表示します。
- リスト表示されているリソースに隣接する Options メニュー をクリックし、Rollback を選択します。
- Rollback Helm Release ページで、ロールバックする Revision を選択し、Rollback をクリックします。
- Helm Releases ページで、チャートをクリックし、リリースの詳細およびリソースを表示します。
Revision History タブに移動し、チャートのすべてのリビジョンを表示します。
図5.2 Helm リビジョン履歴
- 必要な場合は、さらに特定のリビジョンに隣接する Options メニュー を使用して、ロールバックするリビジョンを選択します。
5.4.4. Helm リリースの削除
手順
- Topology ビューで Helm リリースを右クリックし、Delete Helm Release を選択します。
- 確認プロンプトで、グラフの名前を入力し、Delete をクリックします。
第6章 デプロイメント
6.1. アプリケーションのカスタムドメイン
Red Hat OpenShift Service on AWS 4.14 以降、Custom Domain Operator は非推奨になりました。Red Hat OpenShift Service on AWS 4.14 で Ingress を管理するには、Ingress Operator を使用します。Red Hat OpenShift Service on AWS 4.13 以前のバージョンでは機能に変更はありません。
アプリケーションのカスタムドメインを設定できます。カスタムドメインは、Red Hat OpenShift Service on AWS アプリケーションで使用できる特定のワイルドカードドメインです。
6.1.1. アプリケーションのカスタムドメインの設定
トップレベルのドメイン (TLD) は、Red Hat OpenShift Service on AWS クラスターを運用しているお客様が所有しています。カスタムドメイン Operator は、2 日目の操作としてカスタム証明書を使用して新規イングレスコントローラーを設定します。次に、このイングレスコントローラーのパブリック DNS レコードを外部 DNS で使用して、カスタムドメインで使用するワイルドカード CNAME レコードを作成できます。
Red Hat は API ドメインを制御するため、カスタム API ドメインはサポートされません。ただし、お客様はアプリケーションドメインを変更することができます。プライベート IngressController
があるプライベートカスタムドメインの場合は、CustomDomain
CR で .spec.scope
を Internal
に設定します。
前提条件
-
dedicated-admin
権限を持つユーザーアカウント -
*.apps.<company_name>.io
などの一意のドメインまたはワイルドカードドメイン -
CN=*.apps.<company_name>.io
などのカスタム証明書またはワイルドカードカスタム証明書 -
最新バージョンの
oc
CLI がインストールされているクラスターへのアクセス
CustomDomain
CR の metadata/name:
セクションで、予約された名前 default
または apps*
(apps
や apps2
など) を使用しないでください。
手順
秘密鍵および公開証明書から新しい TLS シークレットを作成します。ここで、
fullchain.pem
およびprivkey.pem
は、公開または秘密のワイルドカード証明書です。例
$ oc create secret tls <name>-tls --cert=fullchain.pem --key=privkey.pem -n <my_project>
新規の
CustomDomain
カスタムリソース (CR) を作成します。例:
<company_name>-custom-domain.yaml
apiVersion: managed.openshift.io/v1alpha1 kind: CustomDomain metadata: name: <company_name> spec: domain: apps.<company_name>.io 1 scope: External loadBalancerType: Classic 2 certificate: name: <name>-tls 3 namespace: <my_project> routeSelector: 4 matchLabels: route: acme namespaceSelector: 5 matchLabels: type: sharded
- 1
- カスタムドメイン。
- 2
- カスタムドメインのロードバランサーのタイプ。このタイプは、ネットワークロードバランサーを使用する場合は、デフォルトの
classic
またはNLB
にすることができます。 - 3
- 前の手順で作成されたシークレット
- 4
- オプション: CustomDomain イングレスによって提供されるルートのセットをフィルタリングします。値が指定されていない場合、デフォルトはフィルタリングなしです。
- 5
- オプション: CustomDomain イングレスによって提供される namespace のセットをフィルタリングします。値が指定されていない場合、デフォルトはフィルタリングなしです。
CR を適用します。
例
$ oc apply -f <company_name>-custom-domain.yaml
新規に作成された CR のステータスを取得します。
$ oc get customdomains
出力例
NAME ENDPOINT DOMAIN STATUS <company_name> xxrywp.<company_name>.cluster-01.opln.s1.openshiftapps.com *.apps.<company_name>.io Ready
エンドポイント値を使用して、Route53 などのマネージド DNS プロバイダーに新しいワイルドカード CNAME レコードセットを追加します。
例
*.apps.<company_name>.io -> xxrywp.<company_name>.cluster-01.opln.s1.openshiftapps.com
新規アプリケーションを作成し、これを公開します。
例
$ oc new-app --docker-image=docker.io/openshift/hello-openshift -n my-project
$ oc create route <route_name> --service=hello-openshift hello-openshift-tls --hostname hello-openshift-tls-my-project.apps.<company_name>.io -n my-project
$ oc get route -n my-project
$ curl https://hello-openshift-tls-my-project.apps.<company_name>.io Hello OpenShift!
6.1.2. カスタムドメインの証明書の更新
oc
CLI ツールを使用して、Custom Domains Operator (CDO) で証明書を更新できます。
前提条件
-
最新バージョンの
oc
CLI ツールがインストールされている。
手順
新しいシークレットを作成します。
$ oc create secret tls <secret-new> --cert=fullchain.pem --key=privkey.pem -n <my_project>
CustomDomain CR にパッチを適用します。
$ oc patch customdomain <company_name> --type='merge' -p '{"spec":{"certificate":{"name":"<secret-new>"}}}'
古いシークレットを削除します。
$ oc delete secret <secret-old> -n <my_project>
トラブルシューティング
6.2. デプロイメントの理解
Red Hat OpenShift Service on AWS の Deployment
および DeploymentConfig
API オブジェクトは、一般的なユーザーアプリケーションに対する詳細な管理を行うためのよく似ているものの、異なる 2 つの方法を提供します。これらは、以下の個別の API オブジェクトで構成されています。
-
アプリケーションの特定のコンポーネントの必要な状態を記述する、Pod テンプレートとしての
Deployment
またはDeploymentConfig
。 -
Deployment
オブジェクトには、1 つ以上の レプリカセット が使用され、これには Pod テンプレートとしてのデプロイメントの特定の時点の状態のレコードが含まれます。同様に、DeploymentConfig
オブジェクトには、1 つ以上の レプリケーションコントローラー (以前はレプリカセットでした) が含まれます。 - 1 つまたは複数の Pod。特定バージョンのアプリケーションのインスタンスを表します。
DeploymentConfig
オブジェクトで特定の機能または動作を指定する必要がない場合、Deployment
オブジェクトを使用します。
Red Hat OpenShift Service on AWS 4.14 では、DeploymentConfig
オブジェクトは非推奨になりました。DeploymentConfig
オブジェクトは引き続きサポートされていますが、新規インストールには推奨されません。セキュリティー関連の重大な問題のみが修正されます。
代わりに、Deployment
オブジェクトまたは別の代替手段を使用して、Pod の宣言的更新を提供します。
6.2.1. デプロイメントのビルディングブロック
デプロイメントおよびデプロイメント設定は、それぞれビルディングブロックとして、ネイティブ Kubernetes API オブジェクトの ReplicaSet
および ReplicationController
の使用によって有効にされます。
ユーザーは、Deployment
または DeploymentConfig
オブジェクトによって所有されるレプリカセット、レプリケーションコントローラー、または Pod を操作する必要はありません。デプロイメントシステムは変更を適切に伝播します。
既存のデプロイメントストラテジーが特定のユースケースに適さない場合で、デプロイメントのライフサイクル期間中に複数の手順を手動で実行する必要がある場合は、カスタムデプロイメントストラテジーを作成することを検討してください。
以下のセクションでは、これらのオブジェクトの詳細情報を提供します。
6.2.1.1. レプリカセット
ReplicaSet
は、指定された数の Pod レプリカが特定の時点で実行されるようにするネイティブの Kubernetes API オブジェクトです。
カスタム更新のオーケストレーションが必要な場合や、更新が全く必要のない場合にのみレプリカセットを使用します。それ以外はデプロイメントを使用します。レプリカセットは個別に使用できますが、Pod 作成/削除/更新のオーケストレーションにはデプロイメントでレプリカセットを使用します。デプロイメントは、自動的にレプリカセットを管理し、Pod に宣言的更新を加えるので、作成するレプリカセットを手動で管理する必要はありません。
以下は、ReplicaSet
定義の例になります。
apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend-1 labels: tier: frontend spec: replicas: 3 selector: 1 matchLabels: 2 tier: frontend matchExpressions: 3 - {key: tier, operator: In, values: [frontend]} template: metadata: labels: tier: frontend spec: containers: - image: openshift/hello-openshift name: helloworld ports: - containerPort: 8080 protocol: TCP restartPolicy: Always
6.2.1.2. レプリケーションコントローラー
レプリカセットと同様に、レプリケーションコントローラーは、Pod の指定された数のレプリカが常に実行されるようにします。Pod が終了または削除された場合に、レプリケーションコントローラーは定義した数になるまでインスタンス化する数を増やします。同様に、必要以上の数の Pod が実行されている場合には、定義された数に一致させるために必要な数の Pod を削除します。レプリカセットとレプリケーションコントローラーの相違点は、レプリカセットではセットベースのセレクター要件をサポートし、レプリケーションコントローラーは等価ベースのセレクター要件のみをサポートする点です。
レプリケーションコントローラー設定は以下で構成されています。
- 必要なレプリカ数 (これはランタイム時に調整可能)。
-
レプリケートされた Pod の作成時に使用する
Pod
定義。 - 管理された Pod を識別するためのセレクター。
セレクターは、レプリケーションコントローラーが管理する Pod に割り当てられるラベルセットです。これらのラベルは、Pod
定義に組み込まれ、レプリケーションコントローラーがインスタンス化します。レプリケーションコントローラーは、必要に応じて調節するために、セレクターを使用して、すでに実行中の Pod 数を判断します。
レプリケーションコントローラーは、追跡もしませんが、負荷またはトラフィックに基づいて自動スケーリングを実行することもありません。この場合は、レプリカ数を外部の自動スケーラーで調整する必要があります。
レプリケーションコントローラーを直接作成するのではなく、DeploymentConfig
を使用してレプリケーションコントローラーを作成します。
カスタムオーケストレーションが必要な場合や、更新が必要ない場合は、レプリケーションコントローラーの代わりにレプリカセットを使用します。
以下は、レプリケーションコントローラー定義の例です。
apiVersion: v1 kind: ReplicationController metadata: name: frontend-1 spec: replicas: 1 1 selector: 2 name: frontend template: 3 metadata: labels: 4 name: frontend 5 spec: containers: - image: openshift/hello-openshift name: helloworld ports: - containerPort: 8080 protocol: TCP restartPolicy: Always
6.2.2. デプロイメント
Kubernetes は、Deployment
と呼ばれるファーストクラスのネイティブ API オブジェクトタイプを Red Hat OpenShift Service on AWS に提供します。Deployment
オブジェクトは、Pod テンプレートとして、アプリケーションの特定のコンポーネントで希望する状態を記述します。デプロイメントは、Pod のライフサイクルをオーケストレーションするレプリカセットを作成します。
たとえば、以下のデプロイメント定義はレプリカセットを作成し、1 つの hello-openshift
Pod を起動します。
デプロイメントの定義
apiVersion: apps/v1 kind: Deployment metadata: name: hello-openshift spec: replicas: 1 selector: matchLabels: app: hello-openshift template: metadata: labels: app: hello-openshift spec: containers: - name: hello-openshift image: openshift/hello-openshift:latest ports: - containerPort: 80
6.2.3. DeploymentConfig オブジェクト
Red Hat OpenShift Service on AWS 4.14 では、DeploymentConfig
オブジェクトは非推奨になりました。DeploymentConfig
オブジェクトは引き続きサポートされていますが、新規インストールには推奨されません。セキュリティー関連の重大な問題のみが修正されます。
代わりに、Deployment
オブジェクトまたは別の代替手段を使用して、Pod の宣言的更新を提供します。
レプリケーションコントローラーでビルドする Red Hat OpenShift Service on AWS は、DeploymentConfig
オブジェクトの概念を使用したソフトウェアの開発およびデプロイメントライフサイクルの拡張サポートを追加します。最も単純な場合に、DeploymentConfig
オブジェクトは新規レプリケーションコントローラーを作成し、それに Pod を起動させます。
ただし、DeploymentConfig
オブジェクトの Red Hat OpenShift Service on AWS デプロイメントは、イメージの既存デプロイメントから新規デプロイメントに移行する機能を提供し、レプリケーションコントローラーの作成前後におけるフックの実行も定義します。
DeploymentConfig
デプロイメントシステムは以下の機能を提供します。
-
アプリケーションを実行するためのテンプレートである
DeploymentConfig
オブジェクト。 - イベントへの対応として自動化されたデプロイメントを駆動するトリガー。
- 直前のバージョンから新規バージョンに移行するためのユーザーによるカスタマイズが可能なデプロイメントストラテジー。ストラテジーは、デプロイメントプロセスと一般的に呼ばれる Pod 内で実行されます。
- デプロイメントのライフサイクル中の異なる時点でカスタム動作を実行するためのフックのセット (ライフサイクルフック)。
- デプロイメントの失敗時に手動または自動でロールバックをサポートするためのアプリケーションのバージョン管理。
- レプリケーションの手動および自動スケーリング。
DeploymentConfig
オブジェクトを作成すると、レプリケーションコントローラーが、DeploymentConfig
オブジェクトの Pod テンプレートとして作成されます。デプロイメントが変更されると、最新の Pod テンプレートで新しいレプリケーションコントローラーが作成され、デプロイメントプロセスが実行されて以前のレプリケーションコントローラーのスケールダウン、および新規レプリケーションコントーラーのスケールアップが行われます。
アプリケーションのインスタンスは、作成時にサービスローダーバランサーやルーターに対して自動的に追加/削除されます。アプリケーションが正常なシャットダウン機能をサポートしている限り、アプリケーションが TERM
シグナルを受け取ると、実行中のユーザー接続は確実に通常通りに完了することができます。
Red Hat OpenShift Service on AWS DeploymentConfig
オブジェクトは、以下の詳細を定義します。
-
ReplicationController
定義の要素。 - 新規デプロイメントの自動作成のトリガー。
- デプロイメント間の移行ストラテジー。
- ライフサイクルフック。
デプロイヤー Pod は、デプロイメントがトリガーされるたびに、手動または自動であるかを問わず、(古いレプリケーションコントローラーの縮小、新規レプリケーションコントローラーの拡大およびフックの実行などの) デプロイメントを管理します。デプロイメント Pod は、デプロイメントのログを維持するためにデプロイメントの完了後は無期限で保持されます。デプロイメントが別のものに置き換えられる場合、以前のレプリケーションコントローラーは必要に応じて簡単なロールバックを有効にできるように保持されます。
DeploymentConfig
定義の例
apiVersion: apps.openshift.io/v1 kind: DeploymentConfig metadata: name: frontend spec: replicas: 5 selector: name: frontend template: { ... } triggers: - type: ConfigChange 1 - imageChangeParams: automatic: true containerNames: - helloworld from: kind: ImageStreamTag name: hello-openshift:latest type: ImageChange 2 strategy: type: Rolling 3
6.2.4. Deployment および DeploymentConfig オブジェクトの比較
Kubernetes Deployment
オブジェクトおよび Red Hat OpenShift Service on AWS に提供される DeploymentConfig
オブジェクトの両方が Red Hat OpenShift Service on AWS でサポートされていますが、DeploymentConfig
オブジェクトで提供される特定の機能または動作が必要でない場合は、Deployment
オブジェクトを使用することが推奨されます。
以下のセクションでは、使用するタイプの決定に役立つ 2 つのオブジェクト間の違いを詳述します。
Red Hat OpenShift Service on AWS 4.14 では、DeploymentConfig
オブジェクトは非推奨になりました。DeploymentConfig
オブジェクトは引き続きサポートされていますが、新規インストールには推奨されません。セキュリティー関連の重大な問題のみが修正されます。
代わりに、Deployment
オブジェクトまたは別の代替手段を使用して、Pod の宣言的更新を提供します。
6.2.4.1. 設計
Deployment
と DeploymentConfig
オブジェクトの重要な違いの 1 つとして、ロールアウトプロセスで各設計で選択される CAP theorem (原則) のプロパティーがあります。DeploymentConfig
オブジェクトは整合性を優先しますが、Deployments
オブジェクトは整合性よりも可用性を優先します。
DeploymentConfig
オブジェクトの場合、デプロヤー Pod を実行するノードがダウンする場合、ノードの置き換えは行われません。プロセスは、ノードが再びオンラインになるまで待機するか、手動で削除されます。ノードを手動で削除すると、対応する Pod も削除されます。つまり、kubelet は関連付けられた Pod も削除するため、Pod を削除してロールアウトの固定解除を行うことはできません。
一方、Deployment ロールアウトはコントローラーマネージャーから実行されます。コントローラーマネージャーはマスター上で高可用性モードで実行され、リーダー選択アルゴリズムを使用して可用性を整合性よりも優先するように設定します。障害の発生時には、他の複数のマスターが同時に同じデプロイメントに対して作用する可能性がありますが、この問題は障害の発生直後に調整されます。
6.2.4.2. デプロイメント固有の機能
ロールオーバー
Deployment
オブジェクトのデプロイメントプロセスは、すべての新規ロールアウトにデプロイヤー Pod を使用する DeploymentConfig
オブジェクトとは対照的に、コントローラーループで実行されます。つまり、Deployment
オブジェクトにはできるだけ多くのアクティブなレプリカセットを指定することができ、最終的にデプロイメントコントローラーが以前のすべてのレプリカセットをスケールダウンし、最新のものをスケールアップします。
DeploymentConfig
オブジェクトでは、実行できるデプロイヤー Pod は最大 1 つとなっています。複数のデプロイヤーがある場合は競合が生じ、それぞれが最新のレプリケーションコントローラーであると考えるコントローラーをスケールアップしようとします。これにより、2 つのレプリケーションコントローラーのみを一度にアクティブにできます。最終的には、Deployment
オブジェクトのロールアウトが速くなります。
比例スケーリング
デプロイメントコントローラーのみが Deployment
オブジェクトが所有する新旧のレプリカセットのサイズに関する信頼できる情報源であるため、継続中のロールアウトのスケーリングが可能です。追加のレプリカはレプリカセットのサイズに比例して分散されます。
DeploymentConfig
オブジェクトは、コントローラーが新規レプリケーションコントローラーのサイズに関してデプロイヤープロセスと競合するためにロールアウトが続行されている場合にスケーリングできません。
ロールアウト中の一時停止
Deployment はいつでも一時停止できます。つまり、継続中のロールアウトも一時停止できます。ただし、現時点ではデプロイヤー Pod を一時停止できません。ロールアウトの途中でデプロイメントを一時停止しようとすると、デプロイヤープロセスは影響を受けず、完了するまで続行されます。
6.2.4.3. DeploymentConfig オブジェクト固有の機能
自動ロールバック
現時点で、デプロイメントでは、問題の発生時の最後に正常にデプロイされたレプリカセットへの自動ロールバックをサポートしていません。
トリガー
Deployment の場合、デプロイメントの Pod テンプレートに変更があるたびに新しいロールアウトが自動的にトリガーされるので、暗黙的な設定変更トリガーが含まれます。Pod テンプレートの変更時に新たなロールアウトが不要な場合には、デプロイメントを以下のように停止します。
$ oc rollout pause deployments/<name>
ライフサイクルフック
Deployment ではライフサイクルフックをサポートしていません。
カスタムストラテジー
デプロイメントでは、ユーザーが指定するカスタムデプロイメントストラテジーをサポートしていません。
6.3. デプロイメントプロセスの管理
6.3.1. DeploymentConfig オブジェクトの管理
Red Hat OpenShift Service on AWS 4.14 では、DeploymentConfig
オブジェクトは非推奨になりました。DeploymentConfig
オブジェクトは引き続きサポートされていますが、新規インストールには推奨されません。セキュリティー関連の重大な問題のみが修正されます。
代わりに、Deployment
オブジェクトまたは別の代替手段を使用して、Pod の宣言的更新を提供します。
DeploymentConfig
オブジェクトは、Red Hat OpenShift Service on AWS Web コンソールの Workloads ページからか、または oc
CLI を使用して管理できます。以下の手順は、特に指定がない場合の CLI の使用法を示しています。
6.3.1.1. デプロイメントの開始
アプリケーションのデプロイメントプロセスを開始するために、ロールアウトを開始できます。
手順
既存の
DeploymentConfig
から新規デプロイメントプロセスを開始するには、以下のコマンドを実行します。$ oc rollout latest dc/<name>
注記デプロイメントプロセスが進行中の場合には、このコマンドを実行すると、メッセージが表示され、新規レプリケーションコントローラーはデプロイされません。
6.3.1.2. デプロイメントの表示
アプリケーションの利用可能なすべてのリビジョンに関する基本情報を取得するためにデプロイメントを表示できます。
手順
現在実行中のデプロイメントプロセスを含む、指定した
DeploymentConfig
オブジェクトに関する最近作成されたすべてのレプリケーションコントローラーの詳細を表示するには、以下を実行します。$ oc rollout history dc/<name>
リビジョンに固有の詳細情報を表示するには、
--revision
フラグを追加します。$ oc rollout history dc/<name> --revision=1
DeploymentConfig
オブジェクトおよびその最新バージョンの詳細は、oc describe
コマンドを使用します。$ oc describe dc <name>
6.3.1.3. デプロイメントの再試行
現行リビジョンの DeploymentConfig
がデプロイに失敗した場合、デプロイメントプロセスを再起動することができます。
手順
失敗したデプロイメントプロセスを再起動するには、以下を実行します。
$ oc rollout retry dc/<name>
最新リビジョンのデプロイメントに成功した場合には、このコマンドによりメッセージが表示され、デプロイメントプロセスは試行されません。
注記デプロイメントを再試行すると、デプロイメントプロセスが再起動され、新しいデプロイメントリビジョンは作成されません。再起動されたレプリケーションコントローラーは、失敗したときと同じ設定を使用します。
6.3.1.4. デプロイメントのロールバック
ロールバックすると、アプリケーションを以前のリビジョンに戻します。この操作は、REST API、CLI または Web コンソールで実行できます。
手順
最後にデプロイして成功した設定のリビジョンにロールバックするには、以下を実行します。
$ oc rollout undo dc/<name>
DeploymentConfig
オブジェクトのテンプレートは、undo コマンドで指定されたデプロイメントのリビジョンと一致するように元に戻され、新規レプリケーションコントローラーが起動します。--to-revision
でリビジョンが指定されない場合には、最後に成功したデプロイメントのリビジョンが使用されます。ロールバックの完了直後に新規デプロイメントプロセスが誤って開始されないように、
DeploymentConfig
オブジェクトのイメージ変更トリガーがロールバックの一部として無効にされます。イメージ変更トリガーを再度有効にするには、以下を実行します。
$ oc set triggers dc/<name> --auto
デプロイメント設定は、最新のデプロイメントプロセスが失敗した場合の、設定の最後に成功したリビジョンへの自動ロールバックもサポートします。この場合、デプロイに失敗した最新のテンプレートはシステムで修正されないので、ユーザーがその設定の修正を行う必要があります。
6.3.1.5. コンテナー内でのコマンドの実行
コマンドをコンテナーに追加して、イメージの ENTRYPOINT
を却下してコンテナーの起動動作を変更することができます。これは、指定したタイミングでデプロイメントごとに 1 回実行できるライフサイクルフックとは異なります。
手順
command
パラメーターを、DeploymentConfig
オブジェクトのspec
フィールドを追加します。command
コマンドを変更するargs
フィールドも追加できます (またはcommand
が存在しない場合には、ENTRYPOINT
)。kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example-dc # ... spec: template: # ... spec: containers: - name: <container_name> image: 'image' command: - '<command>' args: - '<argument_1>' - '<argument_2>' - '<argument_3>'
たとえば、
-jar
および/opt/app-root/springboots2idemo.jar
引数を指定して、java
コマンドを実行するには、以下を実行します。kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example-dc # ... spec: template: # ... spec: containers: - name: example-spring-boot image: 'image' command: - java args: - '-jar' - /opt/app-root/springboots2idemo.jar # ...
6.3.1.6. デプロイメントログの表示
手順
指定の
DeploymentConfig
オブジェクトに関する最新リビジョンのログをストリームするには、以下を実行します。$ oc logs -f dc/<name>
最新のリビジョンが実行中または失敗した場合には、コマンドが、Pod のデプロイを行うプロセスのログを返します。成功した場合には、アプリケーションの Pod からのログを返します。
以前に失敗したデプロイメントプロセスからのログを表示することも可能です。ただし、これらのプロセス (以前のレプリケーションコントローラーおよびデプロイヤーの Pod) が存在し、手動でプルーニングまたは削除されていない場合に限ります。
$ oc logs --version=1 dc/<name>
6.3.1.7. デプロイメントトリガー
DeploymentConfig
オブジェクトには、クラスター内のイベントに対応する新規デプロイメントプロセスの作成を駆動するトリガーを含めることができます。
トリガーが DeploymentConfig
オブジェクトに定義されていない場合は、設定変更トリガーがデフォルトで追加されます。トリガーが空のフィールドとして定義されている場合には、デプロイメントは手動で起動する必要があります。
設定変更デプロイメントトリガー
設定変更トリガーにより、DeploymentConfig
オブジェクトの Pod テンプレートで設定の変更が検出されるたびに、新規のレプリケーションコントローラーが作成されます。
設定変更トリガーが DeploymentConfig
オブジェクトに定義されている場合は、DeploymentConfig
オブジェクト自体が作成された直後に、最初のレプリケーションコントローラーが自動的に作成され、一時停止されません。
設定変更デプロイメントトリガー
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example-dc # ... spec: # ... triggers: - type: "ConfigChange"
イメージ変更デプロイメントトリガー
イメージ変更トリガーにより、イメージストリームタグの内容が変更されるたびに、(イメージの新規バージョンがプッシュされるタイミングで) 新規レプリケーションコントローラーが作成されます。
イメージ変更デプロイメントトリガー
kind: DeploymentConfig
apiVersion: apps.openshift.io/v1
metadata:
name: example-dc
# ...
spec:
# ...
triggers:
- type: "ImageChange"
imageChangeParams:
automatic: true 1
from:
kind: "ImageStreamTag"
name: "origin-ruby-sample:latest"
namespace: "myproject"
containerNames:
- "helloworld"
- 1
imageChangeParams.automatic
フィールドがfalse
に設定されると、トリガーが無効になります。
上記の例では、origin-ruby-sample
イメージストリームの latest
タグの値が変更され、新しいイメージの値が DeploymentConfig
オブジェクトの helloworld
コンテナーに指定されている現在のイメージと異なる場合に、helloworld
コンテナーの新規イメージを使用して、新しいレプリケーションコントローラーが作成されます。
イメージ変更トリガーが DeploymentConfig
で定義され (設定変更トリガーおよび automatic=false
が指定されるか、automatic=true
が指定される)、イメージ変更トリガーで参照されているイメージストリームタグがまだ存在していない場合、ビルドによりイメージがイメージストリームタグにインポートまたはプッシュされた直後に初回のデプロイメントプロセスが自動的に開始されます。
6.3.1.7.1. デプロイメントトリガーの設定
手順
oc set triggers
コマンドを使用して、DeploymentConfig
オブジェクトにデプロイメントトリガーを設定することができます。たとえば、イメージ変更トリガーを設定するには、以下のコマンドを使用します。$ oc set triggers dc/<dc_name> \ --from-image=<project>/<image>:<tag> -c <container_name>
6.3.1.8. デプロイメントリソースの設定
デプロイメントは、ノードでリソース (メモリーおよび一時ストレージ) を消費する Pod を使用して完了します。デフォルトで、Pod はバインドされていないノードのリソースを消費します。ただし、プロジェクトにデフォルトのコンテナー制限が指定されている場合には、Pod はその上限までリソースを消費します。
デプロイメントの最小メモリー制限は 12 MB です。Cannot allocate memory
Pod イベントのためにコンテナーの起動に失敗すると、メモリー制限は低くなります。メモリー制限を引き上げるか、これを削除します。制限を削除すると、Pod は制限のないノードのリソースを消費できるようになります。
デプロイメントストラテジーの一部としてリソース制限を指定して、リソースの使用を制限することも可能です。デプロイメントリソースは、Recreate、Rolling または Custom のデプロイメントストラテジーで使用できます。
手順
以下の例では、
resources
、cpu
、memory
、およびephemeral-storage
はそれぞれオプションです。kind: Deployment apiVersion: apps/v1 metadata: name: hello-openshift # ... spec: # ... type: "Recreate" resources: limits: cpu: "100m" 1 memory: "256Mi" 2 ephemeral-storage: "1Gi" 3
ただし、クォータがプロジェクトに定義されている場合には、以下の 2 つの項目のいずれかが必要です。
明示的な
requests
で設定したresources
セクション:kind: Deployment apiVersion: apps/v1 metadata: name: hello-openshift # ... spec: # ... type: "Recreate" resources: requests: 1 cpu: "100m" memory: "256Mi" ephemeral-storage: "1Gi"
- 1
requests
オブジェクトは、クォータ内のリソースリストに対応するリソースリストを含みます。
-
プロジェクトで定義される制限の範囲。
LimitRange
オブジェクトのデフォルト値がデプロイメントプロセス時に作成される Pod に適用されます。
デプロイメントリソースを設定するには、上記のいずれかのオプションを選択してください。それ以外の場合は、デプロイ Pod の作成は、クォータ基準を満たしていないことを示すメッセージを出して失敗します。
6.3.1.9. 手動のスケーリング
ロールバック以外に、手動スケーリングにより、レプリカの数を詳細に管理できます。
Pod は oc autoscale
コマンドを使用して自動スケーリングすることも可能です。
手順
DeploymentConfig
オブジェクトを手動でスケーリングするには、oc scale
コマンドを使用します。たとえば、以下のコマンドは、frontend
DeploymentConfig
オブジェクトを3
に設定します。$ oc scale dc frontend --replicas=3
レプリカの数は最終的に、
DeploymentConfig
オブジェクトのfrontend
で設定した希望のデプロイメントの状態と現在のデプロイメントの状態に伝播されます。
6.3.1.10. DeploymentConfig オブジェクトからのプライベートリポジトリーへのアクセス
シークレットを DeploymentConfig
オブジェクトに追加し、プライベートリポジトリーからイメージにアクセスできるようにします。この手順では、Red Hat OpenShift Service on AWS Web コンソールを使用する方法を示します。
手順
- 新しいプロジェクトを作成する。
- Workloads → Secrets に移動します。
- プライベートのイメージリポジトリーにアクセスするための認証情報が含まれるシークレットを作成します。
- Workloads → DeploymentConfigs に移動します。
-
DeploymentConfig
オブジェクトを作成します。 -
DeploymentConfig
オブジェクトエディターページで、Pull Secret を設定し、変更を保存します。
6.3.1.11. 異なるサービスアカウントでの Pod の実行
デフォルト以外のサービスアカウントで Pod を実行できます。
手順
DeploymentConfig
オブジェクトを編集します。$ oc edit dc/<deployment_config>
serviceAccount
とserviceAccountName
パラメーターをspec
フィールドに追加し、使用するサービスアカウントを指定します。apiVersion: apps.openshift.io/v1 kind: DeploymentConfig metadata: name: example-dc # ... spec: # ... securityContext: {} serviceAccount: <service_account> serviceAccountName: <service_account>
6.4. デプロイメントストラテジーの使用
デプロイメントストラテジー は、ユーザーが変更にほとんど気付かないように、ダウンタイムなしでアプリケーションを変更またはアップグレードするために使用されます。
ユーザーは通常、ルーターによって処理されるルートを介してアプリケーションにアクセスするため、デプロイメント戦略は DeploymentConfig
オブジェクト機能またはルーティング機能に重点を置くことができます。DeploymentConfig
オブジェクトの機能に焦点を当てた戦略は、アプリケーションを使用するすべてのルートに影響を与えます。ルーター機能を使用するストラテジーは個別のルートにターゲットを設定します。
デプロイメントストラテジーの多くは、DeploymentConfig
オブジェクトでサポートされ、追加のストラテジーはルーター機能でサポートされます。
6.4.1. デプロイメントストラテジーの選択
デプロイメントストラテジーを選択する場合に、以下を考慮してください。
- 長期間実行される接続は正しく処理される必要があります。
- データベースの変換は複雑になる可能性があり、アプリケーションと共に変換し、ロールバックする必要があります。
- アプリケーションがマイクロサービスと従来のコンポーネントを使用するハイブリッドの場合には、移行の完了時にダウンタイムが必要になる場合があります。
- これを実行するためのインフラストラクチャーが必要です。
- テスト環境が分離されていない場合は、新規バージョンと以前のバージョン両方が破損してしまう可能性があります。
デプロイメントストラテジーは、readiness チェックを使用して、新しい Pod の使用準備ができているかを判断します。readiness チェックに失敗すると、DeploymentConfig
オブジェクトは、タイムアウトするまで Pod の実行を再試行します。デフォルトのタイムアウトは、10m
で、値は dc.spec.strategy.*params
の TimeoutSeconds
で設定します。
6.4.2. ローリングストラテジー
ローリングデプロイメントは、以前のバージョンのアプリケーションインスタンスを、新しいバージョンのアプリケーションインスタンスに徐々に置き換えます。ローリングストラテジーは、DeploymentConfig
オブジェクトにストラテジーが指定されていない場合に使用されるデフォルトのデプロイメントストラテジーです。
ローリングデプロイメントは通常、新規 Pod が readiness チェックによって ready
になるのを待機してから、古いコンポーネントをスケールダウンします。重大な問題が生じる場合、ローリングデプロイメントは中止される場合があります。
ローリングデプロイメントの使用のタイミング
- ダウンタイムを発生させずに、アプリケーションの更新を行う場合
- 以前のコードと新しいコードの同時実行がアプリケーションでサポートされている場合
ローリングデプロイメントとは、以前のバージョンと新しいバージョンのコードを同時に実行するという意味です。これは通常、アプリケーションで N-1 互換性に対応する必要があります。
ローリングストラテジー定義の例
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example-dc # ... spec: # ... strategy: type: Rolling rollingParams: updatePeriodSeconds: 1 1 intervalSeconds: 1 2 timeoutSeconds: 120 3 maxSurge: "20%" 4 maxUnavailable: "10%" 5 pre: {} 6 post: {}
- 1
- 各 Pod が次に更新されるまで待機する時間。指定されていない場合、デフォルト値は
1
となります。 - 2
- 更新してからデプロイメントステータスをポーリングするまでの間待機する時間。指定されていない場合、デフォルト値は
1
となります。 - 3
- イベントのスケーリングを中断するまでの待機時間。この値はオプションです。デフォルトは
600
です。ここでの 中断 とは、自動的に以前の完全なデプロイメントにロールバックされるという意味です。 - 4
maxSurge
はオプションで、指定されていない場合には、デフォルト値は25%
となります。以下の手順の次にある情報を参照してください。- 5
maxUnavailable
はオプションで、指定されていない場合には、デフォルト値は25%
となります。以下の手順の次にある情報を参照してください。- 6
pre
およびpost
はどちらもライフサイクルフックです。
ローリングストラテジー:
-
pre
ライフサイクルフックを実行します。 - サージ数に基づいて新しいレプリケーションコントローラーをスケールアップします。
- 最大利用不可数に基づいて以前のレプリケーションコントローラーをスケールダウンします。
- 新しいレプリケーションコントローラーが希望のレプリカ数に到達して、以前のレプリケーションコントローラーの数がゼロになるまで、このスケーリングを繰り返します。
-
post
ライフサイクルフックを実行します。
スケールダウン時には、ローリングストラテジーは Pod の準備ができるまで待機し、スケーリングを行うことで可用性に影響が出るかどうかを判断します。Pod をスケールアップしたにもかかわらず、準備が整わない場合には、デプロイメントプロセスは最終的にタイムアウトして、デプロイメントに失敗します。
maxUnavailable
パラメーターは、更新時に利用できない Pod の最大数です。maxSurge
パラメーターは、元の Pod 数を超えてスケジュールできる Pod の最大数です。どちらのパラメーターも、パーセント (例: 10%
) または絶対値 (例: 2
) のいずれかに設定できます。両方のデフォルト値は 25%
です。
以下のパラメーターを使用して、デプロイメントの可用性やスピードを調整できます。以下に例を示します。
-
maxUnavailable*=0
およびmaxSurge*=20%
が指定されていると、更新時および急速なスケールアップ時に完全なキャパシティーが維持されるようになります。 -
maxUnavailable*=10%
およびmaxSurge*=0
が指定されていると、追加のキャパシティーを使用せずに更新を実行します (インプレース更新)。 -
maxUnavailable*=10%
およびmaxSurge*=10%
の場合は、キャパシティーが失われる可能性がありますが、迅速にスケールアップおよびスケールダウンします。
一般的に、迅速にロールアウトする場合は maxSurge
を使用します。リソースのクォータを考慮して、一部に利用不可の状態が発生してもかまわない場合には、maxUnavailable
を使用します。
Red Hat OpenShift Service on AWS のすべてのマシン設定プールにおける maxUnavailable
のデフォルト設定は 1
です。この値を変更せず、一度に 1 つのコントロールプレーンノードを更新することを推奨します。コントロールプレーンプールのこの値を 3
に変更しないでください。
6.4.2.1. canary デプロイメント
Red Hat OpenShift Service on AWS におけるすべてのローリングデプロイメントは カナリアデプロイメント です。新規バージョン (カナリア) はすべての古いインスタンスが置き換えられる前にテストされます。readiness チェックが成功しない場合、カナリアインスタンスは削除され、DeploymentConfig
オブジェクトは自動的にロールバックされます。
readiness チェックはアプリケーションコードの一部であり、新規インスタンスが使用できる状態にするために必要に応じて高度な設定をすることができます。(実際のユーザーワークロードを新規インスタンスに送信するなどの) アプリケーションのより複雑なチェックを実装する必要がある場合、カスタムデプロイメントや blue-green デプロイメントストラテジーの実装を検討してください。
6.4.2.2. ローリングデプロイメントの作成
ローリングデプロイメントは Red Hat OpenShift Service on AWS のデフォルトタイプです。CLI を使用してローリングデプロイメントを作成できます。
手順
Quay.io にあるデプロイメントイメージのサンプルに基づいてアプリケーションを作成します。
$ oc new-app quay.io/openshifttest/deployment-example:latest
注記このイメージはポートを公開しません。外部 LoadBalancer サービスでアプリケーションを公開するか、パブリックインターネット経由でアプリケーションにアクセスできるようにする必要がある場合は、この手順を完了した後に
oc expose dc/deployment-example --port=<port>
コマンドを使用してサービスを作成します。ルーターをインストールしている場合は、ルートを使用してアプリケーションを利用できるようにするか、サービス IP を直接使用してください。
$ oc expose svc/deployment-example
-
deployment-example.<project>.<router_domain>
でアプリケーションを参照し、v1
イメージが表示されることを確認します。 レプリカが最大 3 つになるまで、
DeploymentConfig
オブジェクトをスケーリングします。$ oc scale dc/deployment-example --replicas=3
新しいバージョンの例を
latest
とタグ付けして、新規デプロイメントを自動的にトリガーします。$ oc tag deployment-example:v2 deployment-example:latest
-
ブラウザーで、
v2
イメージが表示されるまでページを更新します。 CLI を使用している場合は、以下のコマンドで、バージョン 1 に Pod がいくつあるか、バージョン 2 にはいくつあるかを表示します。Web コンソールでは、Pod が徐々に v2 に追加され、v1 から削除されます。
$ oc describe dc deployment-example
デプロイメントプロセスで、新しいレプリケーションコントローラーが漸増的にスケールアップします。(rediness チェックをパスした後に) 新規 Pod に ready
のマークが付けられると、デプロイメントプロセスは継続されます。
Pod が準備状態にならない場合、プロセスは中止し、デプロイメントは直前のバージョンにロールバックします。
6.4.2.3. 開発者パースペクティブを使用したデプロイメントの編集
Developer パースペクティブを使用して、デプロイメントのデプロイメントストラテジー、イメージ設定、環境変数、詳細オプションを編集できます。
前提条件
- Web コンソールの Developer パースペクティブを使用している。
- アプリケーションを作成している。
手順
- Topology ビューに移動します。
- アプリケーションをクリックして、Details パネルを表示します。
- Actions ドロップダウンメニューで Edit Deployment を選択し、Edit Deployment ページを表示します。
デプロイメントの以下の Advanced options を編集できます。
オプション: Pause rollouts をクリックして Pause rollouts for this deployment チェックボックスを選択すると、ロールアウトを一時停止できます。
ロールアウトを一時停止すると、ロールアウトをトリガーせずにアプリケーションを変更できます。ロールアウトはいつでも再開できます。
- オプション: Scaling をクリックし、Replicas のカズを変更することでイメージのインスタンス数を変更できます。
- Save をクリックします。
6.4.2.4. 開発者パースペクティブを使用したローリングデプロイメントの開始
ローリングデプロイメントを開始することで、アプリケーションをアップグレードできます。
前提条件
- Web コンソールの Developer パースペクティブを使用している。
- アプリケーションを作成している。
手順
- Topology ビューでアプリケーションノードをクリックすると、サイドパネルに Overview タブが表示されます。Update Strategy がデフォルトの Rolling ストラテジーに設定されていることに注意してください。
Actions ドロップダウンメニューで、Start Rollout を選択し、ローリング更新を開始します。ローリングデプロイメントは、新しいバージョンのアプリケーションを起動してから、古いバージョンを終了します。
図6.1 ローリング更新
6.4.3. 再作成ストラテジー
再作成ストラテジーは、基本的なロールアウト動作で、デプロイメントプロセスにコードを挿入するためのライフサイクルフックをサポートします。
再作成ストラテジー定義の例
kind: Deployment apiVersion: apps/v1 metadata: name: hello-openshift # ... spec: # ... strategy: type: Recreate recreateParams: 1 pre: {} 2 mid: {} post: {}
再作成ストラテジー:
-
pre
ライフサイクルフックを実行します。 - 以前のデプロイメントをゼロにスケールダウンします。
-
任意の
mid
ライフサイクルフックを実行します。 - 新規デプロイメントをスケールアップします。
-
post
ライフサイクルフックを実行します。
スケールアップ中に、デプロイメントのレプリカ数が複数ある場合は、デプロイメントの最初のレプリカが準備できているかどうかが検証されてから、デプロイメントが完全にスケールアップされます。最初のレプリカの検証に失敗した場合には、デプロイメントは失敗とみなされます。
再作成デプロイメントの使用のタイミング:
- 新規コードを起動する前に、移行または他のデータの変換を行う必要がある場合
- 以前のバージョンと新しいバージョンのアプリケーションコードの同時使用をサポートしていない場合
- 複数のレプリカ間での共有がサポートされていない、RWO ボリュームを使用する場合
再作成デプロイメントでは、短い期間にアプリケーションのインスタンスが実行されなくなるので、ダウンタイムが発生します。ただし、以前のコードと新しいコードは同時には実行されません。
6.4.3.1. 開発者パースペクティブを使用したデプロイメントの編集
Developer パースペクティブを使用して、デプロイメントのデプロイメントストラテジー、イメージ設定、環境変数、詳細オプションを編集できます。
前提条件
- Web コンソールの Developer パースペクティブを使用している。
- アプリケーションを作成している。
手順
- Topology ビューに移動します。
- アプリケーションをクリックして、Details パネルを表示します。
- Actions ドロップダウンメニューで Edit Deployment を選択し、Edit Deployment ページを表示します。
デプロイメントの以下の Advanced options を編集できます。
オプション: Pause rollouts をクリックして Pause rollouts for this deployment チェックボックスを選択すると、ロールアウトを一時停止できます。
ロールアウトを一時停止すると、ロールアウトをトリガーせずにアプリケーションを変更できます。ロールアウトはいつでも再開できます。
- オプション: Scaling をクリックし、Replicas のカズを変更することでイメージのインスタンス数を変更できます。
- Save をクリックします。
6.4.3.2. 開発者パースペクティブを使用した再作成デプロイメントの開始
Web コンソールの Developer パースペクティブを使用して、デプロイメントストラテジーをデフォルトのローリング更新から再作成更新に切り替えることができます。
前提条件
- Web コンソールの Developer パースペクティブにいることを確認します。
- Add ビューを使用してアプリケーションを作成し、これが Topology ビューにデプロイされていることを確認します。
手順
再作成更新ストラテジーに切り替え、アプリケーションをアップグレードするには、以下を実行します。
- アプリケーションをクリックして、Details パネルを表示します。
- Actions ドロップダウンメニューで、Edit Deployment Config を選択し、アプリケーションのデプロイメント設定の詳細を確認します。
-
YAML エディターで
spec.strategy.type
をRecreate
に変更し、Save をクリックします。 - Topology ビューでノードを選択し、サイドパネルの Overview タブを表示します。これで、Update Strategy は Recreate に設定されます。
Actions ドロップダウンメニューを使用し、Start Rollout を選択し、再作成ストラテジーを使用して更新を開始します。再作成ストラテジーはまず、アプリケーションの古いバージョンの Pod を終了してから、新規バージョンの Pod を起動します。
図6.2 再作成更新
6.4.4. カスタムストラテジー
カスタムストラテジーでは、独自のデプロイメントの動作を提供できるようになります。
カスタムストラテジー定義の例
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example-dc # ... spec: # ... strategy: type: Custom customParams: image: organization/strategy command: [ "command", "arg1" ] environment: - name: ENV_1 value: VALUE_1
上記の例では、organization/strategy
コンテナーイメージにより、デプロイメントの動作が提供されます。オプションの command
配列は、イメージの Dockerfile
で指定した CMD
ディレクティブを上書きします。指定したオプションの環境変数は、ストラテジープロセスの実行環境に追加されます。
さらに、Red Hat OpenShift Service on AWS は以下の環境変数をデプロイメントプロセスに提供します。
環境変数 | 説明 |
---|---|
| 新規デプロイメント名 (レプリケーションコントローラー) |
| 新規デプロイメントの namespace |
新規デプロイメントのレプリカ数は最初はゼロです。ストラテジーの目的は、ユーザーのニーズに最適な仕方で対応するロジックを使用して新規デプロイメントをアクティブにすることにあります。
または customParams
オブジェクトを使用して、カスタムのデプロイメントロジックを、既存のデプロイメントストラテジーに挿入します。カスタムのシェルスクリプトロジックを指定して、openshift-deploy
バイナリーを呼び出します。カスタムのデプロイヤーコンテナーイメージを用意する必要はありません。ここでは、代わりにデフォルトの Red Hat OpenShift Service on AWS デプロイヤーイメージが使用されます。
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example-dc # ... spec: # ... strategy: type: Rolling customParams: command: - /bin/sh - -c - | set -e openshift-deploy --until=50% echo Halfway there openshift-deploy echo Complete
この設定により、以下のようなデプロイメントになります。
Started deployment #2 --> Scaling up custom-deployment-2 from 0 to 2, scaling down custom-deployment-1 from 2 to 0 (keep 2 pods available, don't exceed 3 pods) Scaling custom-deployment-2 up to 1 --> Reached 50% (currently 50%) Halfway there --> Scaling up custom-deployment-2 from 1 to 2, scaling down custom-deployment-1 from 2 to 0 (keep 2 pods available, don't exceed 3 pods) Scaling custom-deployment-1 down to 1 Scaling custom-deployment-2 up to 2 Scaling custom-deployment-1 down to 0 --> Success Complete
カスタムデプロイメントストラテジーのプロセスでは、Red Hat OpenShift Service on AWS API または Kubernetes API へのアクセスが必要な場合には、ストラテジーを実行するコンテナーは、認証用のコンテナーで利用可能なサービスアカウントのトークンを使用できます。
6.4.4.1. 開発者パースペクティブを使用したデプロイメントの編集
Developer パースペクティブを使用して、デプロイメントのデプロイメントストラテジー、イメージ設定、環境変数、詳細オプションを編集できます。
前提条件
- Web コンソールの Developer パースペクティブを使用している。
- アプリケーションを作成している。
手順
- Topology ビューに移動します。
- アプリケーションをクリックして、Details パネルを表示します。
- Actions ドロップダウンメニューで Edit Deployment を選択し、Edit Deployment ページを表示します。
デプロイメントの以下の Advanced options を編集できます。
オプション: Pause rollouts をクリックして Pause rollouts for this deployment チェックボックスを選択すると、ロールアウトを一時停止できます。
ロールアウトを一時停止すると、ロールアウトをトリガーせずにアプリケーションを変更できます。ロールアウトはいつでも再開できます。
- オプション: Scaling をクリックし、Replicas のカズを変更することでイメージのインスタンス数を変更できます。
- Save をクリックします。
6.4.5. ライフサイクルフック
ローリングおよび再作成ストラテジーは、ストラテジーで事前に定義したポイントでデプロイメントプロセスに動作を挿入できるようにする ライフサイクルフック またはデプロイメントフックをサポートします。
pre
ライフサイクルフックの例
pre:
failurePolicy: Abort
execNewPod: {} 1
- 1
execNewPod
は Pod ベースのライフサイクルフックです。
フックにはすべて、フックに問題が発生した場合にストラテジーが取るべきアクションを定義する 失敗ポリシー が含まれます。
| フックに失敗すると、デプロイメントプロセスも失敗とみなされます。 |
| フックの実行は、成功するまで再試行されます。 |
| フックの失敗は無視され、デプロイメントは続行されます。 |
フックには、フックの実行方法を記述するタイプ固有のフィールドがあります。現在、フックタイプとしてサポートされているのは Pod ベースのフックのみで、このフックは execNewPod
フィールドで指定されます。
Pod ベースのライフサイクルフック
Pod ベースのライフサイクルフックは、DeploymentConfig
オブジェクトのテンプレートをベースとする新しい Pod でフックコードを実行します。
以下のデプロイメントの例は簡素化されており、この例ではローリングストラテジーを使用します。簡潔にまとめられるように、トリガーおよびその他の詳細は省略しています。
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: frontend spec: template: metadata: labels: name: frontend spec: containers: - name: helloworld image: openshift/origin-ruby-sample replicas: 5 selector: name: frontend strategy: type: Rolling rollingParams: pre: failurePolicy: Abort execNewPod: containerName: helloworld 1 command: [ "/usr/bin/command", "arg1", "arg2" ] 2 env: 3 - name: CUSTOM_VAR1 value: custom_value1 volumes: - data 4
この例では、pre
フックは、helloworld
コンテナーからの openshift/origin-ruby-sample
イメージを使用して新規 Pod で実行されます。フック Pod には以下のプロパティーが設定されます。
-
フックコマンドは
/usr/bin/command arg1 arg2
です。 -
フックコンテナーには、
CUSTOM_VAR1=custom_value1
環境変数が含まれます。 -
フックの失敗ポリシーは
Abort
で、フックが失敗するとデプロイメントプロセスも失敗します。 -
フック Pod は、
DeploymentConfig
オブジェクト Pod からdata
ボリュームを継承します。
6.4.5.1. ライフサイクルフックの設定
CLI を使用してデプロイメント用に、ライフサイクルフックまたはデプロイメントフックを設定できます。
手順
oc set deployment-hook
コマンドを使用して、必要なフックのタイプを設定します (--pre
、--mid
、または--post
)。たとえば、デプロイメント前のフックを設定するには、以下を実行します。$ oc set deployment-hook dc/frontend \ --pre -c helloworld -e CUSTOM_VAR1=custom_value1 \ --volumes data --failure-policy=abort -- /usr/bin/command arg1 arg2
6.5. ルートベースのデプロイメントストラテジーの使用
デプロイメントストラテジーは、アプリケーションを進化させる手段として使用します。一部のストラテジーは Deployment
オブジェクトを使用して、アプリケーションに解決されるすべてのルートのユーザーが確認できる変更を実行します。このセクションで説明される他の高度なストラテジーでは、ルーターを Deployment
オブジェクトと併用して特定のルートに影響を与えます。
最も一般的なルートベースのストラテジーとして blue-green デプロイメント を使用します。新規バージョン (green バージョン) を、テストと評価用に起動しつつ、安定版 (blue バージョン) をユーザーが継続して使用します。準備が整ったら、green バージョンに切り替えられます。問題が発生した場合には、blue バージョンに戻すことができます。
あるいは、両方のバージョンが同時にアクティブになる A/B バージョン ストラテジーを使用することもできます。このストラテジーでは、一部のユーザーは バージョン A を使用し、他のユーザーは バージョン B を使用できます。このストラテジーを使用すると、ユーザーインターフェイスの変更やその他の機能を試して、ユーザーからのフィードバックを得ることができます。また、ユーザーに対する問題の影響が限られている場合に、実稼働のコンテキストで操作が正しく行われていることを検証するのに使用することもできます。
カナリアデプロイメントでは、新規バージョンをテストしますが、問題が検出されると、すぐに以前のバージョンにフォールバックされます。これは、上記のストラテジーどちらでも実行できます。
ルートベースのデプロイメントストラテジーでは、サービス内の Pod 数はスケーリングされません。希望とするパフォーマンスの特徴を維持するには、デプロイメント設定をスケーリングする必要がある場合があります。
6.5.1. プロキシーシャードおよびトラフィック分割
実稼働環境で、特定のシャードに到達するトラフィックの分散を正確に制御できます。多くのインスタンスを扱う場合は、各シャードに相対的なスケールを使用して、割合ベースのトラフィックを実装できます。これは、他の場所で実行中の別のサービスやアプリケーションに転送または分割する プロキシーシャード とも適切に統合されます。
最も単純な設定では、プロキシーは要求を変更せずに転送します。より複雑な設定では、受信要求を複製して、別のクラスターだけでなく、アプリケーションのローカルインスタンスにも送信して、結果を比較することができます。他のパターンとしては、DR のインストールのキャッシュを保持したり、分析目的で受信トラフィックをサンプリングすることができます。
TCP (または UDP) のプロキシーは必要なシャードで実行できます。oc scale
コマンドを使用して、プロキシーシャードで要求に対応するインスタンスの相対数を変更してください。より複雑なトラフィックを管理する場合には、Red Hat OpenShift Service on AWS ルーターを比例分散機能でカスタマイズすることを検討してください。
6.5.2. N-1 互換性
新規コードと以前のコードが同時に実行されるアプリケーションの場合は、新規コードで記述されたデータが、以前のバージョンのコードで読み込みや処理 (または正常に無視) できるように注意する必要があります。これは、スキーマの進化と呼ばれる複雑な問題です。
これは、ディスクに保存したデータ、データベース、一時的なキャッシュ、ユーザーのブラウザーセッションの一部など、多数の形式を取ることができます。多くの Web アプリケーションはローリングデプロイメントをサポートできますが、アプリケーションをテストし、設計してこれに対応させることが重要です。
アプリケーションによっては、新旧のコードが並行的に実行されている期間が短いため、バグやユーザーのトランザクションに失敗しても許容範囲である場合があります。別のアプリケーションでは失敗したパターンが原因で、アプリケーション全体が機能しなくなる場合もあります。
N-1 互換性を検証する 1 つの方法として、A/B デプロイメントを使用できます。制御されたテスト環境で、以前のコードと新しいコードを同時に実行して、新規デプロイメントに流れるトラフィックが以前のデプロイメントで問題を発生させないかを確認します。
6.5.3. 正常な終了
Red Hat OpenShift Service on AWS および Kubernetes は、負荷分散のローテーションから削除する前にアプリケーションインスタンスがシャットダウンする時間を設定します。ただし、アプリケーションでは、終了前にユーザー接続も正常に終了されていることを確認する必要があります。
シャットダウン時に、Red Hat OpenShift Service on AWS はコンテナーのプロセスに TERM
シグナルを送信します。SIGTERM
を受信すると、アプリケーションコードは、新規接続の受け入れを停止します。これにより、ロードバランサーによって他のアクティブなインスタンスにトラフィックがルーティングされるようになります。アプリケーションコードは、開放されている接続がすべて終了するか、次の機会に個別接続が正常に終了されるまで待機してから終了します。
正常に終了する期間が終わると、終了されていないプロセスに KILL
シグナルが送信され、プロセスが即座に終了されます。Pod の terminationGracePeriodSeconds
属性または Pod テンプレートは正常に終了する期間 (デフォルトの 30 秒) を制御し、必要に応じてこれらをアプリケーションごとにカスタマイズすることができます。
6.5.4. Blue-Green デプロイメント
Blue-green デプロイメントでは、同時にアプリケーションの 2 つのバージョンを実行し、実稼働版 (blue バージョン) からより新しいバージョン (green バージョン) にトラフィックを移動します。ルートでは、ローリングストラテジーまたは切り替えサービスを使用できます。
多くのアプリケーションは永続データに依存するので、N-1 互換性 をサポートするアプリケーションが必要です。つまり、データを共有して、データ層を 2 つ作成し、データベース、ストアまたはディスク間のライブマイグレーションを実装します。
新規バージョンのテストに使用するデータについて考えてみてください。実稼働データの場合には、新規バージョンのバグにより、実稼働版を破損してしまう可能性があります。
6.5.4.1. Blue-Green デプロイメントの設定
Blue-green デプロイメントでは 2 つの Deployment
を使用します。どちらも実行され、実稼働のデプロイメントはルートが指定するサービスによって変わります。この際、各 Deployment
オブジェクトは異なるサービスに公開されます。
ルートは、Web (HTTP および HTTPS) トラフィックを対象としているので、この手法は Web アプリケーションに最適です。
新規バージョンに新規ルートを作成し、これをテストすることができます。準備ができたら、実稼働ルートのサービスが新規サービスを参照するように変更します。新規 (green) バージョンは有効になります。
必要に応じて以前のバージョンにサービスを切り替えて、以前の (blue) バージョンにロールバックすることができます。
手順
2 つの独立したアプリケーションコンポーネントを作成します。
v1
イメージをexample-blue
サービスで実行するサンプルアプリケーションのコピーを作成します。$ oc new-app openshift/deployment-example:v1 --name=example-blue
example-green
サービスでv2
イメージを使用する 2 つ目のコピーを作成します。$ oc new-app openshift/deployment-example:v2 --name=example-green
以前のサービスを参照するルートを作成します。
$ oc expose svc/example-blue --name=bluegreen-example
-
bluegreen-example-<project>.<router_domain>
でアプリケーションを参照し、v1
イメージが表示されることを確認します。 ルートを編集して、サービス名を
example-green
に変更します。$ oc patch route/bluegreen-example -p '{"spec":{"to":{"name":"example-green"}}}'
-
ルートが変更されたことを確認するには、
v2
イメージが表示されるまで、ブラウザーを更新します。
6.5.5. A/B デプロイメント
A/B デプロイメントストラテジーでは、新しいバージョンのアプリケーションを実稼働環境での制限された方法で試すことができます。実稼働バージョンは、ユーザーの要求の大半に対応し、要求の一部が新しいバージョンに移動されるように指定できます。
各バージョンへの要求の割合を制御できるので、テストが進むにつれ、新しいバージョンへの要求を増やし、最終的に以前のバージョンの使用を停止することができます。各バージョン要求負荷を調整する際に、期待どおりのパフォーマンスを出せるように、各サービスの Pod 数もスケーリングする必要が生じる場合があります。
ソフトウェアのアップグレードに加え、この機能を使用してユーザーインターフェイスのバージョンを検証することができます。以前のバージョンを使用するユーザーと、新しいバージョンを使用するユーザーが出てくるので、異なるバージョンに対するユーザーの反応を評価して、設計上の意思決定を知らせることができます。
このデプロイメントを有効にするには、以前のバージョンと新しいバージョンは同時に実行できるほど類似している必要があります。これは、バグ修正リリースや新機能が以前の機能と干渉しないようにする場合の一般的なポイントになります。これらのバージョンが正しく連携するには N-1 互換性が必要です。
Red Hat OpenShift Service on AWS は、Web コンソールと CLI で N-1 互換性をサポートします。
6.5.5.1. A/B テスト用の負荷分散
ユーザーは複数のサービスでルートを設定します。各サービスは、アプリケーションの 1 つのバージョンを処理します。
各サービスには weight
が割り当てられ、各サービスへの要求の部分については service_weight
を sum_of_weights
で除算します。エンドポイントの weights
の合計がサービスの weight
になるように、サービスごとの weight
がサービスのエンドポイントに分散されます。
ルートにはサービスを最大で 4 つ含めることができます。サービスの weight
は、0
から 256
の間で指定してください。weight
が 0
の場合は、サービスはロードバランシングに参加せず、既存の持続する接続を継続的に提供します。サービスの weight
が 0
でない場合は、エンドポイントの最小 weight
は 1
となります。これにより、エンドポイントが多数含まれるサービスでは、最終的に weight
は意図される値よりも大きくなる可能性があります。このような場合は、予想される負荷分散の weight
を得るために Pod の数を減らします。
手順
A/B 環境を設定するには、以下を実行します。
2 つのアプリケーションを作成して、異なる名前を指定します。それぞれが
Deployment
オブジェクトを作成します。これらのアプリケーションは同じプログラムのバージョンであり、通常 1 つは現在の実稼働バージョンで、もう 1 つは提案される新規バージョンとなります。最初のアプリケーションを作成します。以下の例では、
ab-example-a
という名前のアプリケーションを作成します。$ oc new-app openshift/deployment-example --name=ab-example-a
2 番目のアプリケーションを作成します。
$ oc new-app openshift/deployment-example:v2 --name=ab-example-b
どちらのアプリケーションもデプロイされ、サービスが作成されます。
ルート経由でアプリケーションを外部から利用できるようにします。この時点でサービスを公開できます。現在の実稼働バージョンを公開してから、後でルートを編集して新規バージョンを追加すると便利です。
$ oc expose svc/ab-example-a
ab-example-a.<project>.<router_domain>
でアプリケーションを参照して、予想されるバージョンが表示されていることを確認します。ルートをデプロイする場合には、ルーターはサービスに指定した
weights
に従ってトラフィックを分散します。この時点では、デフォルトのweight=1
と指定されたサービスが 1 つ存在するので、すべての要求がこのサービスに送られます。他のサービスをalternateBackends
として追加し、weights
を調整すると、A/B 設定が機能するようになります。これは、oc set route-backends
コマンドを実行するか、ルートを編集して実行できます。注記また、
alternateBackends
を使用する場合は、roundrobin
ロードバランシング戦略を使用して、重みに基づいてリクエストが想定どおりにサービスに分散されるようにします。roundrobin
は、ルートアノテーションを使用してルートに設定できます。ルートアノテーションの詳細は、関連情報 セクションを参照してください。oc set route-backend
を0
に設定することは、サービスがロードバランシングに参加しないが、既存の持続する接続を提供し続けることを意味します。注記ルートに変更を加えると、さまざまなサービスへのトラフィックの部分だけが変更されます。デプロイメントをスケーリングして、必要な負荷を処理できるように Pod 数を調整する必要がある場合があります。
ルートを編集するには、以下を実行します。
$ oc edit route <route_name>
出力例
apiVersion: route.openshift.io/v1 kind: Route metadata: name: route-alternate-service annotations: haproxy.router.openshift.io/balance: roundrobin # ... spec: host: ab-example.my-project.my-domain to: kind: Service name: ab-example-a weight: 10 alternateBackends: - kind: Service name: ab-example-b weight: 15 # ...
6.5.5.1.1. Web コンソールを使用した既存ルートの重みの管理
手順
- Networking → Routes ページに移動します。
- 編集するルートの横にある Options メニュー をクリックし、Edit Route を選択します。
-
YAML ファイルを編集します。
weight
を0
から256
の間の整数になるように更新します。これは、他のターゲット参照オブジェクトに対するターゲットの相対的な重みを指定します。値0
はこのバックエンドへの要求を抑制します。デフォルトは100
です。オプションの詳細は、oc explain routes.spec.alternateBackends
を実行します。 - Save をクリックします。
6.5.5.1.2. Web コンソールを使用した新規ルートの重みの管理
- Networking → Routes ページに移動します。
- Create Route をクリックします。
- ルートの Name を入力します。
- Service を選択します。
- Add Alternate Service をクリックします。
-
Weight および Alternate Service Weight の値を入力します。他のターゲットとの相対的な重みを示す
0
から255
の間の数字を入力します。デフォルトは100
です。 - Target Port を選択します。
- Create をクリックします。
6.5.5.1.3. CLI を使用した重みの管理
手順
サービスおよび対応する重みのルートによる負荷分散を管理するには、
oc set route-backends
コマンドを使用します。$ oc set route-backends ROUTENAME \ [--zero|--equal] [--adjust] SERVICE=WEIGHT[%] [...] [options]
たとえば、以下のコマンドは
ab-example-a
にweight=198
を指定して主要なサービスとし、ab-example-b
にweight=2
を指定して 1 番目の代用サービスとして設定します。$ oc set route-backends ab-example ab-example-a=198 ab-example-b=2
つまり、99% のトラフィックはサービス
ab-example-a
に、1% はサービスab-example-b
に送信されます。このコマンドでは、デプロイメントはスケーリングされません。要求の負荷を処理するのに十分な Pod がある状態でこれを実行する必要があります。
フラグなしのコマンドを実行して、現在の設定を確認します。
$ oc set route-backends ab-example
出力例
NAME KIND TO WEIGHT routes/ab-example Service ab-example-a 198 (99%) routes/ab-example Service ab-example-b 2 (1%)
負荷分散アルゴリズムのデフォルト値を上書きするには、アルゴリズムを
roundrobin
に設定してルートのアノテーションを調整します。Red Hat OpenShift Service on AWS のルートの場合、デフォルトの負荷分散アルゴリズムはrandom
値またはsource
値に設定されます。アルゴリズムを
roundrobin
に設定するには、次のコマンドを実行します。$ oc annotate routes/<route-name> haproxy.router.openshift.io/balance=roundrobin
Transport Layer Security (TLS) パススルールートの場合、デフォルト値は
source
です。他のすべてのルートの場合、デフォルトはrandom
です。--adjust
フラグを使用すると、個別のサービスの重みを、それ自体に対して、または主要なサービスに対して相対的に変更できます。割合を指定すると、主要サービスまたは 1 番目の代用サービス (主要サービスを設定している場合) に対して相対的にサービスを調整できます。他にバックエンドがある場合には、重みは変更に比例した状態になります。以下の例では、
ab-example-a
およびab-example-b
サービスの重みを変更します。$ oc set route-backends ab-example --adjust ab-example-a=200 ab-example-b=10
または、パーセンテージを指定してサービスの重みを変更します。
$ oc set route-backends ab-example --adjust ab-example-b=5%
パーセンテージ宣言の前に
+
を指定すると、現在の設定に対して重み付けを調整できます。以下に例を示します。$ oc set route-backends ab-example --adjust ab-example-b=+15%
--equal
フラグでは、全サービスのweight
が100
になるように設定します。$ oc set route-backends ab-example --equal
--zero
フラグは、全サービスのweight
を0
に設定します。すべての要求に対して 503 エラーが返されます。注記ルートによっては、複数のバックエンドまたは重みが設定されたバックエンドをサポートしないものがあります。
6.5.5.1.4. 1 サービス、複数の Deployment
オブジェクト
手順
すべてのシャードに共通の
ab-example=true
ラベルを追加して新規アプリケーションを作成します。$ oc new-app openshift/deployment-example --name=ab-example-a --as-deployment-config=true --labels=ab-example=true --env=SUBTITLE\=shardA
$ oc delete svc/ab-example-a
アプリケーションがデプロイされ、サービスが作成されます。これは最初のシャードです。
ルートを使用してアプリケーションを利用できるようにしてください (または、サービス IP を直接使用してください)。
$ oc expose deployment ab-example-a --name=ab-example --selector=ab-example\=true
$ oc expose service ab-example
-
ab-example-<project_name>.<router_domain>
でアプリケーションを参照し、v1
イメージが表示されることを確認します。 1 つ目のシャードと同じソースイメージおよびラベルに基づくが、別のバージョンがタグ付けされたバージョンと一意の環境変数を指定して 2 つ目のシャードを作成します。
$ oc new-app openshift/deployment-example:v2 \ --name=ab-example-b --labels=ab-example=true \ SUBTITLE="shard B" COLOR="red" --as-deployment-config=true
$ oc delete svc/ab-example-b
この時点で、いずれの Pod のセットもルートで提供されます。しかし、両ブラウザー (接続を開放) とルーター (デフォルトでは cookie を使用) で、バックエンドサーバーへの接続を維持しようとするので、シャードが両方返されない可能性があります。
1 つのまたは他のシャードに対してブラウザーを強制的に実行するには、以下を実行します。
oc scale
コマンドを使用して、ab-example-a
のレプリカを0
に減らします。$ oc scale dc/ab-example-a --replicas=0
ブラウザーを更新して、
v2
およびshard B
(赤) を表示させます。ab-example-a
を1
レプリカに、ab-example-b
を0
にスケーリングします。$ oc scale dc/ab-example-a --replicas=1; oc scale dc/ab-example-b --replicas=0
ブラウザーを更新して、
v1
およびshard A
(青) を表示します。
いずれかのシャードでデプロイメントをトリガーする場合、そのシャードの Pod のみが影響を受けます。どちらかの
Deployment
オブジェクトでSUBTITLE
環境変数を変更してデプロイメントをトリガーできます。$ oc edit dc/ab-example-a
または
$ oc edit dc/ab-example-b
6.5.6. 追加リソース
第7章 クォータ
7.1. プロジェクトごとのリソースクォータ
ResourceQuota
オブジェクトで定義される リソースクォータ は、プロジェクトごとにリソース消費量の総計を制限する制約を指定します。これは、タイプ別にプロジェクトで作成できるオブジェクトの数量を制限すると共に、そのプロジェクトのリソースが消費する可能性のあるコンピュートリソースおよびストレージの合計量を制限することができます。
このガイドでは、リソースクォータの仕組みや、クラスター管理者がリソースクォータはプロジェクトごとにどのように設定し、管理できるか、および開発者やクラスター管理者がそれらをどのように表示できるかを説明します。
7.1.1. クォータで管理されるリソース
以下では、クォータで管理できる一連のコンピュートリソースとオブジェクトタイプを説明します。
status.phase in (Failed、Succeeded)
が true の場合、Pod は終了状態にあります。
リソース名 | 説明 |
---|---|
|
非終了状態のすべての Pod での CPU 要求の合計はこの値を超えることができません。 |
|
非終了状態のすべての Pod でのメモリー要求の合計はこの値を超えることができません。 |
|
非終了状態のすべての Pod での CPU 要求の合計はこの値を超えることができません。 |
|
非終了状態のすべての Pod でのメモリー要求の合計はこの値を超えることができません。 |
| 非終了状態のすべての Pod での CPU 制限の合計はこの値を超えることができません。 |
| 非終了状態のすべての Pod でのメモリー制限の合計はこの値を超えることができません。 |
リソース名 | 説明 |
---|---|
| 任意の状態のすべての永続ボリューム要求でのストレージ要求の合計は、この値を超えることができません。 |
| プロジェクトに存在できる永続ボリューム要求の合計数です。 |
| 一致するストレージクラスを持つ、任意の状態のすべての永続ボリューム要求でのストレージ要求の合計はこの値を超えることができません。 |
| プロジェクトに存在できる、一致するストレージクラスを持つ永続ボリューム要求の合計数です。 |
|
非終了状態のすべての Pod におけるローカルの一時ストレージ要求の合計は、この値を超えることができません。 |
|
非終了状態のすべての Pod における一時ストレージ要求の合計は、この値を超えることができません。 |
| 非終了状態のすべての Pod における一時ストレージ制限の合計は、この値を超えることができません。 |
リソース名 | 説明 |
---|---|
| プロジェクトに存在できる非終了状態の Pod の合計数です。 |
| プロジェクトに存在できる ReplicationController の合計数です。 |
| プロジェクトに存在できるリソースクォータの合計数です。 |
| プロジェクトに存在できるサービスの合計数です。 |
|
プロジェクトに存在できるタイプ |
|
プロジェクトに存在できるタイプ |
| プロジェクトに存在できるシークレットの合計数です。 |
|
プロジェクトに存在できる |
| プロジェクトに存在できる永続ボリューム要求の合計数です。 |
| プロジェクトに存在できるイメージストリームの合計数です。 |
7.1.2. クォータのスコープ
各クォータには スコープ のセットが関連付けられます。クォータは、列挙されたスコープの交差部分に一致する場合にのみリソースの使用状況を測定します。
スコープをクォータに追加すると、クォータが適用されるリソースのセットを制限できます。許可されるセット以外のリソースを設定すると、検証エラーが発生します。
スコープ | 説明 |
|
|
|
|
BestEffort
スコープは、以下のリソースに制限するようにクォータを制限します。
-
pods
NotBestEffort
スコープは、以下のリソースを追跡するようにクォータを制限します。
-
pods
-
memory
-
requests.memory
-
limits.memory
-
cpu
-
requests.cpu
-
limits.cpu
7.1.3. クォータの実施
プロジェクトのリソースクォータが最初に作成されると、プロジェクトは、更新された使用状況の統計が計算されるまでクォータ制約の違反を引き起こす可能性のある新規リソースの作成機能を制限します。
クォータが作成され、使用状況の統計が更新されると、プロジェクトは新規コンテンツの作成を許可します。リソースを作成または変更する場合、クォータの使用量はリソースの作成または変更要求があるとすぐに増分します。
リソースを削除する場合、クォータの使用量は、プロジェクトのクォータ統計の次回の完全な再計算時に減分されます。設定可能な時間を指定して、クォータ使用量の統計値を現在確認されるシステム値まで下げるのに必要な時間を決定します。
プロジェクト変更がクォータ使用制限を超える場合、サーバーはそのアクションを拒否し、クォータ制約を違反していること、およびシステムで現在確認される使用量の統計値を示す適切なエラーメッセージがユーザーに返されます。
7.1.4. 要求 vs 制限
コンピュートリソースの割り当て時に、各コンテナーは CPU、メモリー、一時ストレージのそれぞれに要求値と制限値を指定できます。クォータはこれらの値のいずれも制限できます。
クォータに requests.cpu
または requests.memory
の値が指定されている場合、すべての着信コンテナーがそれらのリソースを明示的に要求することが求められます。クォータに limits.cpu
または limits.memory
の値が指定されている場合、すべての着信コンテナーがそれらのリソースの明示的な制限を指定することが求められます。
7.1.5. リソースクォータ定義の例
core-object-counts.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: core-object-counts spec: hard: configmaps: "10" 1 persistentvolumeclaims: "4" 2 replicationcontrollers: "20" 3 secrets: "10" 4 services: "10" 5 services.loadbalancers: "2" 6
openshift-object-counts.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: openshift-object-counts
spec:
hard:
openshift.io/imagestreams: "10" 1
- 1
- プロジェクトに存在できるイメージストリームの合計数です。
compute-resources.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources spec: hard: pods: "4" 1 requests.cpu: "1" 2 requests.memory: 1Gi 3 limits.cpu: "2" 4 limits.memory: 2Gi 5
besteffort.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: besteffort spec: hard: pods: "1" 1 scopes: - BestEffort 2
compute-resources-long-running.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources-long-running spec: hard: pods: "4" 1 limits.cpu: "4" 2 limits.memory: "2Gi" 3 scopes: - NotTerminating 4
compute-resources-time-bound.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources-time-bound spec: hard: pods: "2" 1 limits.cpu: "1" 2 limits.memory: "1Gi" 3 scopes: - Terminating 4
storage-consumption.yaml
apiVersion: v1 kind: ResourceQuota metadata: name: storage-consumption spec: hard: persistentvolumeclaims: "10" 1 requests.storage: "50Gi" 2 gold.storageclass.storage.k8s.io/requests.storage: "10Gi" 3 silver.storageclass.storage.k8s.io/requests.storage: "20Gi" 4 silver.storageclass.storage.k8s.io/persistentvolumeclaims: "5" 5 bronze.storageclass.storage.k8s.io/requests.storage: "0" 6 bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "0" 7 requests.ephemeral-storage: 2Gi 8 limits.ephemeral-storage: 4Gi 9
- 1
- プロジェクト内の永続ボリューム要求の合計数です。
- 2
- プロジェクトのすべての永続ボリューム要求において、要求されるストレージの合計はこの値を超えることができません。
- 3
- プロジェクトのすべての永続ボリューム要求において、gold ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 4
- プロジェクトのすべての永続ボリューム要求において、silver ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 5
- プロジェクトのすべての永続ボリューム要求において、silver ストレージクラスの要求の合計数はこの値を超えることができません。
- 6
- プロジェクトのすべての永続ボリューム要求において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。これが
0
に設定される場合、bronze ストレージクラスはストレージを要求できないことを意味します。 - 7
- プロジェクトのすべての永続ボリューム要求において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。これが
0
に設定される場合は、bronze ストレージクラスでは要求を作成できないことを意味します。 - 8
- 非終了状態のすべての Pod において、一時ストレージ要求の合計は 2 Gi を超えることができません。
- 9
- 非終了状態のすべての Pod において、一時ストレージ制限の合計は 4 Gi を超えることができません。
7.1.6. クォータの作成
特定のプロジェクトでリソースの使用を制限するためにクォータを作成することができます。
手順
- ファイルにクォータを定義します。
クォータを作成し、これをプロジェクトに適用するためにファイルを使用します。
$ oc create -f <file> [-n <project_name>]
以下に例を示します。
$ oc create -f core-object-counts.yaml -n demoproject
7.1.6.1. オブジェクトカウントクォータの作成
BuildConfig
および DeploymentConfig
オブジェクトなどの、Red Hat OpenShift Service on AWS の標準的な namespace を使用しているリソースタイプのすべてにオブジェクトカウントクォータを作成できます。オブジェクトクォータカウントは、定義されたクォータをすべての標準的な namespace を使用しているリソースタイプに設定します。
リソースクォータを使用する際に、オブジェクトは作成時クォータに基づいてチャージされます。以下のクォータのタイプはリソースが使い切られることから保護するのに役立ちます。クォータは、プロジェクト内に余分なリソースが十分にある場合にのみ作成できます。
手順
リソースのオブジェクトカウントクォータを設定するには、以下を実行します。
以下のコマンドを実行します。
$ oc create quota <name> \ --hard=count/<resource>.<group>=<quota>,count/<resource>.<group>=<quota> 1
- 1
<resource>
変数はリソースの名前であり、<group>
は API グループです (該当する場合)。リソースおよびそれらの関連付けられた API グループのリストにoc api-resources
コマンドを使用します。
以下に例を示します。
$ oc create quota test \ --hard=count/deployments.extensions=2,count/replicasets.extensions=4,count/pods=3,count/secrets=4
出力例
resourcequota "test" created
この例では、リスト表示されたリソースをクラスター内の各プロジェクトのハード制限に制限します。
クォータが作成されていることを確認します。
$ oc describe quota test
出力例
Name: test Namespace: quota Resource Used Hard -------- ---- ---- count/deployments.extensions 0 2 count/pods 0 3 count/replicasets.extensions 0 4 count/secrets 0 4
7.1.6.2. 拡張リソースのリソースクォータの設定
リソースのオーバーコミットは拡張リソースには許可されません。そのため、クォータで同じ拡張リソースについて requests
および limits
を指定する必要があります。現時点で、接頭辞 requests.
のあるクォータ項目のみが拡張リソースに許可されます。以下は、GPU リソース nvidia.com/gpu
のリソースクォータを設定する方法に関するシナリオ例です。
手順
クラスター内のノードで利用可能な GPU の数を判別します。以下に例を示します。
# oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'
出力例
openshift.com/gpu-accelerator=true Capacity: nvidia.com/gpu: 2 Allocatable: nvidia.com/gpu: 2 nvidia.com/gpu 0 0
この例では、2 つの GPU が利用可能です。
ResourceQuota
オブジェクトを作成して、namespacenvidia
にクォータを設定します。この例では、クォータは1
です。出力例
apiVersion: v1 kind: ResourceQuota metadata: name: gpu-quota namespace: nvidia spec: hard: requests.nvidia.com/gpu: 1
クォータを作成します。
# oc create -f gpu-quota.yaml
出力例
resourcequota/gpu-quota created
namespace に正しいクォータが設定されていることを確認します。
# oc describe quota gpu-quota -n nvidia
出力例
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1
単一 GPU を要求する Pod を定義します。以下の定義ファイルのサンプルの名前は
gpu-pod.yaml
です。apiVersion: v1 kind: Pod metadata: generateName: gpu-pod- namespace: nvidia spec: restartPolicy: OnFailure containers: - name: rhel7-gpu-pod image: rhel7 env: - name: NVIDIA_VISIBLE_DEVICES value: all - name: NVIDIA_DRIVER_CAPABILITIES value: "compute,utility" - name: NVIDIA_REQUIRE_CUDA value: "cuda>=5.0" command: ["sleep"] args: ["infinity"] resources: limits: nvidia.com/gpu: 1
Pod を作成します。
# oc create -f gpu-pod.yaml
Pod が実行されていることを確認します。
# oc get pods
出力例
NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m
クォータ
Used
のカウンターが正しいことを確認します。# oc describe quota gpu-quota -n nvidia
出力例
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1
nvidia
namespace で 2 番目の GPU Pod の作成を試行します。2 つの GPU があるので、これをノード上で実行することは可能です。# oc create -f gpu-pod.yaml
出力例
Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1
クォータが 1 GPU であり、この Pod がそのクォータを超える 2 つ目の GPU の割り当てを試行したため、Forbidden エラーメッセージが表示されることが予想されます。
7.1.7. クォータの表示
Web コンソールでプロジェクトの Quota ページに移動し、プロジェクトのクォータで定義されるハード制限に関連する使用状況の統計を表示できます。
CLI を使用してクォータの詳細を表示することもできます。
手順
プロジェクトで定義されるクォータのリストを取得します。たとえば、
demoproject
というプロジェクトの場合、以下を実行します。$ oc get quota -n demoproject
出力例
NAME AGE REQUEST LIMIT besteffort 4s pods: 1/2 compute-resources-time-bound 10m pods: 0/2 limits.cpu: 0/1, limits.memory: 0/1Gi core-object-counts 109s configmaps: 2/10, persistentvolumeclaims: 1/4, replicationcontrollers: 1/20, secrets: 9/10, services: 2/10
関連するクォータについて記述します。たとえば、
core-object-counts
クォータの場合、以下を実行します。$ oc describe quota core-object-counts -n demoproject
出力例
Name: core-object-counts Namespace: demoproject Resource Used Hard -------- ---- ---- configmaps 3 10 persistentvolumeclaims 0 4 replicationcontrollers 3 20 secrets 9 10 services 2 10
7.1.8. 明示的なリソースクォータの設定
プロジェクト要求テンプレートで明示的なリソースクォータを設定し、新規プロジェクトに特定のリソースクォータを適用します。
前提条件
- cluster-admin ロールを持つユーザーとしてのクラスターへのアクセスがあること。
-
OpenShift CLI (
oc
) がインストールされている。
手順
プロジェクト要求テンプレートにリソースクォータ定義を追加します。
プロジェクト要求テンプレートがクラスターに存在しない場合:
ブートストラッププロジェクトテンプレートを作成し、これを
template.yaml
というファイルに出力します。$ oc adm create-bootstrap-project-template -o yaml > template.yaml
リソースクォータの定義を
template.yaml
に追加します。以下の例では、'storage-consumption' という名前のリソースクォータを定義します。テンプレートのparameters:
セクションの前に定義を追加する必要があります。- apiVersion: v1 kind: ResourceQuota metadata: name: storage-consumption namespace: ${PROJECT_NAME} spec: hard: persistentvolumeclaims: "10" 1 requests.storage: "50Gi" 2 gold.storageclass.storage.k8s.io/requests.storage: "10Gi" 3 silver.storageclass.storage.k8s.io/requests.storage: "20Gi" 4 silver.storageclass.storage.k8s.io/persistentvolumeclaims: "5" 5 bronze.storageclass.storage.k8s.io/requests.storage: "0" 6 bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "0" 7
- 1
- プロジェクト内の永続ボリューム要求の合計数です。
- 2
- プロジェクトのすべての永続ボリューム要求において、要求されるストレージの合計はこの値を超えることができません。
- 3
- プロジェクトのすべての永続ボリューム要求において、gold ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 4
- プロジェクトのすべての永続ボリューム要求において、silver ストレージクラスで要求されるストレージの合計はこの値を超えることができません。
- 5
- プロジェクトのすべての永続ボリューム要求において、silver ストレージクラスの要求の合計数はこの値を超えることができません。
- 6
- プロジェクトのすべての永続ボリューム要求において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。この値が
0
に設定される場合、bronze ストレージクラスはストレージを要求できません。 - 7
- プロジェクトのすべての永続ボリューム要求において、bronze ストレージクラスで要求されるストレージの合計はこの値を超えることができません。この値が
0
に設定される場合、bronze ストレージクラスは要求を作成できません。
openshift-config
namespace の変更されたtemplate.yaml
ファイルでプロジェクト要求テンプレートを作成します。$ oc create -f template.yaml -n openshift-config
注記設定を
kubectl.kubernetes.io/last-applied-configuration
アノテーションとして追加するには、--save-config
オプションをoc create
コマンドに追加します。デフォルトでは、テンプレートは
project-request
という名前になります。
プロジェクト要求テンプレートがクラスター内にすでに存在する場合は、以下を実行します。
注記設定ファイルを使用してクラスター内のオブジェクトを宣言的または命令的に管理する場合は、これらのファイルを使用して既存のプロジェクト要求テンプレートを編集します。
openshift-config
namespace のテンプレートをリスト表示します。$ oc get templates -n openshift-config
既存のプロジェクト要求テンプレートを編集します。
$ oc edit template <project_request_template> -n openshift-config
-
前述の
storage-consumption
の例などのリソースクォータ定義を既存のテンプレートに追加します。テンプレートのparameters:
セクションの前に定義を追加する必要があります。
プロジェクト要求テンプレートを作成した場合は、クラスターのプロジェクト設定リソースでこれを参照します。
編集するプロジェクト設定リソースにアクセスします。
Web コンソールの使用
- Administration → Cluster Settings ページに移動します。
- Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
CLI の使用
project.config.openshift.io/cluster
リソースを編集します。$ oc edit project.config.openshift.io/cluster
プロジェクト設定リソースの
spec
セクションを更新し、projectRequestTemplate
およびname
パラメーターを追加します。以下の例は、project-request
というデフォルトのプロジェクト要求テンプレートを参照します。apiVersion: config.openshift.io/v1 kind: Project metadata: # ... spec: projectRequestTemplate: name: project-request
プロジェクトの作成時にリソースクォータが適用されていることを確認します。
プロジェクトを作成します。
$ oc new-project <project_name>
プロジェクトのリソースクォータをリスト表示します。
$ oc get resourcequotas
リソースクォータを詳細に記述します。
$ oc describe resourcequotas <resource_quota_name>
7.2. 複数のプロジェクト間のリソースクォータ
ClusterResourceQuota
オブジェクトで定義される複数プロジェクトのクォータは、複数プロジェクト間でクォータを共有できるようにします。それぞれの選択されたプロジェクトで使用されるリソースは集計され、その集計は選択したすべてのプロジェクトでリソースを制限するために使用されます。
以下では、クラスター管理者が複数のプロジェクトでリソースクォータを設定および管理する方法を説明します。
デフォルトプロジェクトでワークロードを実行したり、デフォルトプロジェクトへのアクセスを共有したりしないでください。デフォルトのプロジェクトは、コアクラスターコンポーネントを実行するために予約されています。
デフォルトプロジェクトである default
、kube-public
、kube-system
、openshift
、openshift-infra
、openshift-node
、および openshift.io/run-level
ラベルが 0
または 1
に設定されているその他のシステム作成プロジェクトは、高い特権があるとみなされます。Pod セキュリティーアドミッション、Security Context Constraints、クラスターリソースクォータ、イメージ参照解決などのアドミッションプラグインに依存する機能は、高い特権を持つプロジェクトでは機能しません。
7.2.1. クォータ作成時の複数プロジェクトの選択
クォータの作成時に、アノテーションの選択、ラベルの選択、またはその両方に基づいて複数のプロジェクトを選択することができます。
手順
アノテーションに基づいてプロジェクトを選択するには、以下のコマンドを実行します。
$ oc create clusterquota for-user \ --project-annotation-selector openshift.io/requester=<user_name> \ --hard pods=10 \ --hard secrets=20
これにより、以下の
ClusterResourceQuota
オブジェクトが作成されます。apiVersion: quota.openshift.io/v1 kind: ClusterResourceQuota metadata: name: for-user spec: quota: 1 hard: pods: "10" secrets: "20" selector: annotations: 2 openshift.io/requester: <user_name> labels: null 3 status: namespaces: 4 - namespace: ns-one status: hard: pods: "10" secrets: "20" used: pods: "1" secrets: "9" total: 5 hard: pods: "10" secrets: "20" used: pods: "1" secrets: "9"
この複数プロジェクトのクォータの記述は、デフォルトのプロジェクト要求エンドポイントを使用して
<user_name>
によって要求されるすべてのプロジェクトを制御します。ここでは、10 Pod および 20 シークレットに制限されます。同様にラベルに基づいてプロジェクトを選択するには、以下のコマンドを実行します。
$ oc create clusterresourcequota for-name \1 --project-label-selector=name=frontend \2 --hard=pods=10 --hard=secrets=20
これにより、以下の
ClusterResourceQuota
オブジェクト定義が作成されます。apiVersion: quota.openshift.io/v1 kind: ClusterResourceQuota metadata: creationTimestamp: null name: for-name spec: quota: hard: pods: "10" secrets: "20" selector: annotations: null labels: matchLabels: name: frontend
7.2.2. 該当するクラスターリソースクォータの表示
プロジェクト管理者は、各自のプロジェクトを制限する複数プロジェクトのクォータを作成したり、変更したりすることはできませんが、それぞれのプロジェクトに適用される複数プロジェクトのクォータを表示することはできます。プロジェクト管理者は、AppliedClusterResourceQuota
リソースを使用してこれを実行できます。
手順
プロジェクトに適用されているクォータを表示するには、以下を実行します。
$ oc describe AppliedClusterResourceQuota
出力例
Name: for-user Namespace: <none> Created: 19 hours ago Labels: <none> Annotations: <none> Label Selector: <null> AnnotationSelector: map[openshift.io/requester:<user-name>] Resource Used Hard -------- ---- ---- pods 1 10 secrets 9 20
7.2.3. 選択における粒度
クォータの割り当てを要求する際にロックに関して考慮する必要があるため、複数プロジェクトのクォータで選択されるアクティブなプロジェクトの数は重要な考慮点になります。単一の複数プロジェクトクォータで 100 を超えるプロジェクトを選択すると、それらのプロジェクトの API サーバーの応答に負の影響が及ぶ可能性があります。
第8章 アプリケーションでの設定マップの使用
設定マップにより、設定アーティファクトをイメージコンテンツから切り離し、コンテナー化されたアプリケーションを移植可能な状態に保つことができます。
以下のセクションでは、設定マップおよびそれらを作成し、使用する方法を定義します。
8.1. 設定マップについて
数多くのアプリケーションには、設定ファイル、コマンドライン引数、および環境変数の組み合わせを使用した設定が必要です。Red Hat OpenShift Service on AWS では、これらの設定アーティファクトは、コンテナー化されたアプリケーションを移植可能な状態に保つためにイメージコンテンツから切り離されます。
ConfigMap
オブジェクトは、コンテナーを Red Hat OpenShift Service on AWS に依存させないようにする一方で、コンテナーに設定データを挿入するメカニズムを提供します。設定マップは、個々のプロパティーなどの粒度の細かい情報や、設定ファイル全体または JSON Blob などの粒度の荒い情報を保存するために使用できます。
ConfigMap
オブジェクトは、Pod で使用したり、コントローラーなどのシステムコンポーネントの設定データを保存するために使用できる設定データのキーと値のペアを保持します。以下に例を示します。
ConfigMap
オブジェクト定義
kind: ConfigMap apiVersion: v1 metadata: creationTimestamp: 2016-02-18T19:14:38Z name: example-config namespace: my-namespace data: 1 example.property.1: hello example.property.2: world example.property.file: |- property.1=value-1 property.2=value-2 property.3=value-3 binaryData: bar: L3Jvb3QvMTAw 2
イメージなどのバイナリーファイルから設定マップを作成する場合に、binaryData
フィールドを使用できます。
設定データはさまざまな方法で Pod 内で使用できます。設定マップは以下を実行するために使用できます。
- コンテナーへの環境変数値の設定
- コンテナーのコマンドライン引数の設定
- ボリュームの設定ファイルの設定
ユーザーとシステムコンポーネントの両方が設定データを設定マップに保存できます。
設定マップはシークレットに似ていますが、機密情報を含まない文字列の使用をより効果的にサポートするように設計されています。
設定マップの制限
設定マップは、コンテンツを Pod で使用される前に作成する必要があります。
コントローラーは、設定データが不足していても、その状況を許容して作成できます。ケースごとに設定マップを使用して設定される個々のコンポーネントを参照してください。
ConfigMap
オブジェクトはプロジェクト内にあります。
それらは同じプロジェクトの Pod によってのみ参照されます。
Kubelet は、API サーバーから取得する Pod の設定マップの使用のみをサポートします。
これには、CLI を使用して作成された Pod、またはレプリケーションコントローラーから間接的に作成された Pod が含まれます。これには、Red Hat OpenShift Service on AWS ノードの --manifest-url
フラグ、--config
フラグ、REST API を使用して作成された Pod は含まれません。これらは Pod を作成する一般的な方法ではないためです。
関連情報
8.2. ユースケース: Pod で設定マップを使用する
以下のセクションでは、Pod で ConfigMap
オブジェクトを使用する際のいくつかのユースケースを説明します。
8.2.1. 設定マップの使用によるコンテナーでの環境変数の設定
config map を使用して、コンテナーで個別の環境変数を設定するために使用したり、有効な環境変数名を生成するすべてのキーを使用してコンテナーで環境変数を設定するために使用したりすることができます。
例として、以下の設定マップについて見てみましょう。
2 つの環境変数を含む ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: special-config 1 namespace: default 2 data: special.how: very 3 special.type: charm 4
1 つの環境変数を含む ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: env-config 1 namespace: default data: log_level: INFO 2
手順
configMapKeyRef
セクションを使用して、Pod のこのConfigMap
のキーを使用できます。特定の環境変数を挿入するように設定されている
Pod
仕様のサンプルapiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: 1 - name: SPECIAL_LEVEL_KEY 2 valueFrom: configMapKeyRef: name: special-config 3 key: special.how 4 - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config 5 key: special.type 6 optional: true 7 envFrom: 8 - configMapRef: name: env-config 9 securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] restartPolicy: Never
この Pod が実行されると、Pod のログには以下の出力が含まれます。
SPECIAL_LEVEL_KEY=very log_level=INFO
SPECIAL_TYPE_KEY=charm
は出力例にリスト表示されません。optional: true
が設定されているためです。
8.2.2. 設定マップを使用したコンテナーコマンドのコマンドライン引数の設定
config map を使用すると、Kubernetes 置換構文 $(VAR_NAME)
を使用してコンテナー内のコマンドまたは引数の値を設定できます。
例として、以下の設定マップについて見てみましょう。
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
手順
コンテナー内のコマンドに値を挿入するには、環境変数として使用するキーを使用する必要があります。次に、
$(VAR_NAME)
構文を使用してコンテナーのコマンドでそれらを参照することができます。特定の環境変数を挿入するように設定されている Pod 仕様のサンプル
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] 1 env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] restartPolicy: Never
- 1
- 環境変数として使用するキーを使用して、コンテナーのコマンドに値を挿入します。
この Pod が実行されると、test-container コンテナーで実行される echo コマンドの出力は以下のようになります。
very charm
8.2.3. 設定マップの使用によるボリュームへのコンテンツの挿入
設定マップを使用して、コンテンツをボリュームに挿入することができます。
ConfigMap
カスタムリソース (CR) の例
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
手順
設定マップを使用してコンテンツをボリュームに挿入するには、2 つの異なるオプションを使用できます。
設定マップを使用してコンテンツをボリュームに挿入するための最も基本的な方法は、キーがファイル名であり、ファイルの内容がキーの値になっているファイルでボリュームを設定する方法です。
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "cat", "/etc/config/special.how" ] volumeMounts: - name: config-volume mountPath: /etc/config securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] volumes: - name: config-volume configMap: name: special-config 1 restartPolicy: Never
- 1
- キーを含むファイル。
この Pod が実行されると、cat コマンドの出力は以下のようになります。
very
設定マップキーが投影されるボリューム内のパスを制御することもできます。
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "cat", "/etc/config/path/to/special-key" ] volumeMounts: - name: config-volume mountPath: /etc/config securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] volumes: - name: config-volume configMap: name: special-config items: - key: special.how path: path/to/special-key 1 restartPolicy: Never
- 1
- 設定マップキーへのパス。
この Pod が実行されると、cat コマンドの出力は以下のようになります。
very
第9章 開発者パースペクティブを使用したプロジェクトおよびアプリケーションメトリクスのモニタリング
Developer パースペクティブの Observe ビューは、CPU、メモリー、帯域幅の使用状況、ネットワーク関連の情報などのプロジェクトまたはアプリケーションのメトリクスを監視するオプションを提供します。
9.1. 前提条件
- Red Hat OpenShift Service on AWS にアプリケーションを作成し、デプロイ している。
- Web コンソールにログインしており、Developer パースペクティブに切り替えている。
9.2. プロジェクトメトリクスのモニタリング
プロジェクトでアプリケーションを作成し、それらをデプロイした後に、Web コンソールで Developer パースペクティブを使用し、プロジェクトのメトリックを表示できます。
手順
- Observe に移動して、プロジェクトの Dashboard、Metrics、Alerts、および Events を表示します。
オプション: Dashboard タブを使用して、次のアプリケーションメトリックを示すグラフを表示します:
- CPU usage (CPU の使用率)
- メモリー使用量
- 帯域幅の使用
- 送受信パケットのレートやドロップされたパケットのレートなど、ネットワーク関連の情報。
Dashboard タブで、Kubernetes コンピュートリソースダッシュボードにアクセスできます。
注記Dashboard リストでは、デフォルトで Kubernetes / Compute Resources / Namespace (Pods) ダッシュボードが選択されています。
詳細は、以下のオプションを使用します。
- Dashboard リストからダッシュボードを選択し、フィルタリングされたメトリクスを表示します。すべてのダッシュボードは、Kubernetes / Compute Resources / Namespace(Pod) を除く、選択時に追加のサブメニューを生成します。
- Time Range 一覧からオプションを選択し、キャプチャーされるデータの期間を判別します。
- Time Range リストで Custom time range を選択して、カスタムの時間範囲を設定します。From および To の日付と時間を入力または選択します。Save をクリックして、カスタムの時間範囲を保存します。
- Refresh Interval 一覧からオプションを選択し、データの更新後の期間を判別します。
- カーソルをグラフの上に置き、Pod の特定の詳細を表示します。
- 各グラフの右上隅にある Inspect をクリックして、特定のグラフの詳細を表示します。グラフの詳細は Metrics タブに表示されます。
オプション: Metrics タブを使用して、必要なプロジェクトメトリックについてクエリーします。
図9.1 メトリクスのモニタリング
- Select Query リストで、プロジェクトに必要な詳細をフィルターするオプションを選択します。プロジェクト内のすべてのアプリケーション Pod のフィルターされたメトリックがグラフに表示されます。プロジェクトの Pod も以下に記載されています。
- Pod のリストから色の付いた四角のボックスをクリアし、特定の Pod のメトリックを削除してクエリーの結果をさらに絞り込みます。
- Show PromQL をクリックし、Prometheus クエリーを表示します。このクエリーをプロンプトのヘルプを使用してさらに変更し、クエリーをカスタマイズして、該当する namespace に表示するメトリックをフィルターすることができます。
- ドロップダウンリストを使用して、表示されるデータの時間の範囲を設定します。Reset Zoom をクリックして、これをデフォルトの時間の範囲にリセットできます。
- オプションで、Select Query 一覧で Custom Query を選択し、カスタム Prometheus クエリーを作成し、関連するメトリクスをフィルターします。
オプション: Alerts タブを使用して、次のタスクを実行します:
- プロジェクト内のアプリケーションのアラートをトリガーするルールを確認します。
- プロジェクトで発生しているアラートを特定します。
- 必要に応じて、そのようなアラートを解除します。
図9.2 アラートのモニタリング
詳細は、以下のオプションを使用します。
- Filter 一覧を使用して Alert State および Severity でアラートをフィルターします。
- アラートをクリックして、そのアラートの詳細ページに移動します。Alerts Details ページで、View Metrics をクリックし、アラートのメトリクスを表示できます。
- アラートルールに隣接する Notifications トグルを使用して、そのルールのすべてのアラートをサイレンスにし、Silence for 一覧からアラートをサイレンスにする期間を選択します。Notifications トグルを表示するには、アラートを編集するパーミッションが必要です。
- アラートルールに隣接する Options メニュー を使用して、アラートルールの詳細を表示します。
オプション: Events タブを使用してプロジェクトのイベントを表示します。
図9.3 イベントのモニタリング
以下のオプションを使用して、表示されるイベントをフィルターできます。
- Resources リストで、リソースを選択し、そのリソースのイベントを表示します。
- All Types リストで、イベントのタイプを選択し、そのタイプに関連するイベントを表示します。
- Filter events by names or messages フィールドを使用して特定のイベントを検索します。
9.3. アプリケーションメトリクスのモニタリング
プロジェクトでアプリケーションを作成し、それらをデプロイした後に、Developer ペースペクティブで Topology ビューを使用し、アプリケーションのアラートおよびメトリックを表示できます。アプリケーションの重大な問題および警告のアラートは、Topology ビューでワークロードノードについて示されます。
手順
ワークロードのアラートを表示するには、以下を実行します。
- Topology ビューで、ワークロードをクリックし、ワークロードの詳細を右側のパネルに表示します。
Observe タブをクリックして、アプリケーションの重大な問題および警告のアラート、CPU、メモリー、および帯域幅の使用状況などのメトリクスのグラフ、およびアプリケーションのすべてのイベントを表示します。
注記Firing 状態の重大な問題および警告のアラートのみが Topology ビューに表示されます。Silenced、Pending および Not Firing 状態のアラートは表示されません。
図9.4 アプリケーションメトリクスのモニタリング
- 右側のパネルにリスト表示されるアラートをクリックし、アラートの詳細を Alert Details ページに表示します。
- チャートのいずれかをクリックして Metrics タブに移動し、アプリケーションの詳細なメトリックを表示します。
- View monitoring dashboard をクリックし、そのアプリケーションのモニタリングダッシュボードを表示します。
9.4. イメージの脆弱性の内訳
Developer パースペクティブでは、プロジェクトダッシュボードの Status セクションに Image Vulnerabilities リンクが表示されます。このリンクを使用すると、脆弱なコンテナーイメージと修正可能なコンテナーイメージに関する詳細を含む、Image Vulnerabilities breakdown ウィンドウを表示できます。アイコンの色は重大度を示します。
- 赤: 高優先度。すぐに修正してください。
- オレンジ: 中優先度。優先度の高い脆弱性の後に修正できます。
- 黄色: 低優先度。高優先度および中優先度の脆弱性の後に修正できます。
重大度レベルに基づいて、脆弱性に優先順位を付け、系統立てて修正できます。
図9.5 イメージ脆弱性の表示
9.5. アプリケーションとイメージの脆弱性メトリックの監視
プロジェクトでアプリケーションを作成してデプロイしたら、Web コンソールの Developer パースペクティブを使用して、クラスター全体におけるアプリケーションの依存関係の脆弱性に関するメトリックを表示します。メトリックは、次のイメージの脆弱性を詳しく分析するのに役立ちます。
- 選択したプロジェクト内の脆弱なイメージの総数
- 選択したプロジェクト内のすべての脆弱なイメージの重大度別の数
- 脆弱性の数、修正可能な脆弱性の数、各脆弱なイメージの影響を受ける Pod の数など、重大度をドリルダウンした詳細
前提条件
Operator Hub から Red Hat Quay Container Security Operator をインストールしている。
注記Red Hat Quay Container Security Operator は、quay レジストリーにあるイメージをスキャンして脆弱性を検出します。
手順
- イメージの脆弱性の一般的な概要は、Developer パースペクティブのナビゲーションパネルで Project をクリックして、プロジェクトダッシュボードを表示します。
- Status セクションで Image Vulnerabilities をクリックします。開いたウィンドウには、Vulnerable Container Images や Fixable Container Images などの詳細が表示されます。
脆弱性の詳細な概要は、プロジェクトダッシュボードの Vulnerabilities タブをクリックしてください。
- イメージの詳細を表示するには、その名前をクリックします。
- Details タブで、すべてのタイプの脆弱性のデフォルトグラフを表示します。
- オプション: 切り替えボタンをクリックして、特定のタイプの脆弱性を表示します。たとえば、App dependency をクリックすると、アプリケーションの依存関係に固有の脆弱性が表示されます。
- オプション: Severity および Type に基づき脆弱性一覧をフィルタリングするか、Severity、Package、Type、Source、Current Version、Fixed in Version でソートできます。
Vulnerability をクリックして、関連する詳細を取得します。
- Base image の脆弱性には、Red Hat Security Advisory (RHSA) からの情報が表示されます。
- App dependency の脆弱性には、Snyk セキュリティーアプリケーションからの情報が表示されます。
9.6. 関連情報
第10章 ヘルスチェックの使用によるアプリケーションの正常性の監視
ソフトウェアのシステムでは、コンポーネントは一時的な問題 (一時的に接続が失われるなど)、設定エラー、または外部の依存関係に関する問題などにより正常でなくなることがあります。Red Hat OpenShift Service on AWS アプリケーションには、正常でないコンテナーを検出し、これに対応するための数多くのオプションがあります。
10.1. ヘルスチェックについて
ヘルスチェックは、readiness、liveness、および startup ヘルスチェックの組み合わせを使用して、実行中のコンテナーで診断を定期的に実行します。
ヘルスチェックを実行するコンテナーが含まれる Pod の仕様に、1 つ以上のプローブを含めることができます。
既存の Pod でヘルスチェックを追加または編集する必要がある場合、Pod の DeploymentConfig
オブジェクトを編集するか、Web コンソールで Developer パースペクティブを使用する必要があります。CLI を使用して既存の Pod のヘルスチェックを追加したり、編集したりすることはできません。
- readiness プローブ
readiness プローブ はコンテナーがサービス要求を受け入れることができるかどうかを判別します。コンテナーの readiness プローブが失敗すると、kubelet は利用可能なサービスエンドポイントのリストから Pod を削除します。
失敗後、プローブは Pod の検証を継続します。Pod が利用可能になると、kubelet は Pod を利用可能なサービスエンドポイントのリストに追加します。
- liveness ヘルスチェック
liveness プローブ は、コンテナーが実行中かどうかを判別します。デッドロックなどの状態のために liveness プローブが失敗する場合、kubelet はコンテナーを強制終了します。その後、Pod は再起動ポリシーに基づいて応答します。
たとえば、
restartPolicy
としてAlways
またはOnFailure
が設定されている Pod での liveness プローブは、コンテナーを強制終了してから再起動します。- スタートアッププローブ
スタートアッププローブ は、コンテナー内のアプリケーションが起動しているかどうかを示します。その他のプローブはすべて、起動に成功するまで無効にされます。スタートアッププローブが指定の期間内に成功しない場合、kubelet はコンテナーを強制終了し、コンテナーは Pod の
restartPolicy
の対象となります。一部のアプリケーションでは、最初の初期化時に追加の起動時間が必要になる場合があります。liveness または readiness プローブで startup プローブを使用して、
failureThreshold
およびperiodSeconds
パラメーターを使用し、長い起動時間に十分に対応できるようにプローブを遅延させることができます。たとえば、
failureThreshold
が 30 回 (30 failure) で、periodSeconds
が 10 秒の最大 5 分 (30 * 10s = 300s) を指定して startup プローブを liveness プローブに追加できます。startup プローブが初回に成功すると、liveness プローブがこれを引き継ぎます。
以下のテストのタイプのいずれかを使用して、liveness、readiness、および startup プローブを設定できます。
HTTP
GET
: HTTPGET
テストを使用する場合、テストは Web hook を使用してコンテナーの正常性を判別します。このテストは、HTTP の応答コードが200
から399
までの値の場合に正常と見なされます。完全に初期化されている場合に、HTTP ステータスコードを返すアプリケーションで HTTP
GET
テストを使用できます。-
コンテナーコマンド: コンテナーコマンドテストを使用すると、プローブはコンテナー内でコマンドを実行します。テストが
0
のステータスで終了すると、プローブは成功します。 - TCP ソケット: TCP ソケットテストを使用する場合、プローブはコンテナーに対してソケットを開こうとします。コンテナーはプローブで接続を確立できる場合にのみ正常であるとみなされます。TCP ソケットテストは、初期化が完了するまでリスニングを開始しないアプリケーションで使用できます。
複数のフィールドを設定して、プローブの動作を制御できます。
-
initialDelaySeconds
: コンテナーが起動してからプローブがスケジュールされるまでの時間 (秒単位)。デフォルトは 0 です。 -
periodSeconds
: プローブの実行間の遅延 (秒単位)。デフォルトは10
です。この値はtimeoutSeconds
よりも大きくなければなりません。 -
timeoutSeconds
: プローブがタイムアウトし、コンテナーが失敗した想定されてから非アクティブになるまでの時間 (秒数)。デフォルトは1
です。この値はperiodSeconds
未満である必要があります。 -
successThreshold
: コンテナーのステータスを successful にリセットするために、プローブが失敗後に成功を報告する必要のある回数。liveness プローブの場合は、値は1
である必要があります。デフォルトは1
です。 failureThreshold
: プローブが失敗できる回数。デフォルトは 3 です。指定される試行の後に、以下を実行します。- liveness プローブの場合、コンテナーが再起動します。
-
readiness プローブの場合、Pod には
Unready
というマークが付けられます。 -
startup プローブの場合、コンテナーは強制終了され、Pod の
restartPolicy
の対象となります。
プローブの例
以下は、オブジェクト仕様に表示されるさまざまなプローブの例です。
Pod 仕様のコンテナーコマンド readiness プローブを含む readiness プローブの例
apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application # ... spec: containers: - name: goproxy-app 1 args: image: registry.k8s.io/goproxy:0.1 2 readinessProbe: 3 exec: 4 command: 5 - cat - /tmp/healthy # ...
Pod 仕様のコンテナーコマンドテストを含むコンテナーコマンドの startup プローブおよび liveness プローブの例
apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application # ... spec: containers: - name: goproxy-app 1 args: image: registry.k8s.io/goproxy:0.1 2 livenessProbe: 3 httpGet: 4 scheme: HTTPS 5 path: /healthz port: 8080 6 httpHeaders: - name: X-Custom-Header value: Awesome startupProbe: 7 httpGet: 8 path: /healthz port: 8080 9 failureThreshold: 30 10 periodSeconds: 10 11 # ...
Pod 仕様でタイムアウトを使用するコンテナーコマンドテストを使用した liveness プローブの例
apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application # ... spec: containers: - name: goproxy-app 1 args: image: registry.k8s.io/goproxy:0.1 2 livenessProbe: 3 exec: 4 command: 5 - /bin/bash - '-c' - timeout 60 /opt/eap/bin/livenessProbe.sh periodSeconds: 10 6 successThreshold: 1 7 failureThreshold: 3 8 # ...
デプロイメントでの TCP ソケットテストを含む readiness プローブおよび liveness プローブの例
kind: Deployment apiVersion: apps/v1 metadata: labels: test: health-check name: my-application spec: # ... template: spec: containers: - resources: {} readinessProbe: 1 tcpSocket: port: 8080 timeoutSeconds: 1 periodSeconds: 10 successThreshold: 1 failureThreshold: 3 terminationMessagePath: /dev/termination-log name: ruby-ex livenessProbe: 2 tcpSocket: port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 periodSeconds: 10 successThreshold: 1 failureThreshold: 3 # ...
10.2. CLI を使用したヘルスチェックの設定
readiness、liveness、および startup プローブを設定するには、1 つ以上のプローブをヘルスチェックを実行するコンテナーが含まれる Pod の仕様に追加します。
既存の Pod でヘルスチェックを追加または編集する必要がある場合、Pod の DeploymentConfig
オブジェクトを編集するか、Web コンソールで Developer パースペクティブを使用する必要があります。CLI を使用して既存の Pod のヘルスチェックを追加したり、編集したりすることはできません。
手順
コンテナーのプローブを追加するには、以下を実行します。
Pod
オブジェクトを作成して、1 つ以上のプローブを追加します。apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application spec: containers: - name: my-container 1 args: image: registry.k8s.io/goproxy:0.1 2 livenessProbe: 3 tcpSocket: 4 port: 8080 5 initialDelaySeconds: 15 6 periodSeconds: 20 7 timeoutSeconds: 10 8 readinessProbe: 9 httpGet: 10 host: my-host 11 scheme: HTTPS 12 path: /healthz port: 8080 13 startupProbe: 14 exec: 15 command: 16 - cat - /tmp/healthy failureThreshold: 30 17 periodSeconds: 20 18 timeoutSeconds: 10 19
- 1
- コンテナー名を指定します。
- 2
- デプロイするコンテナーイメージを指定します。
- 3
- オプション: liveness プローブを作成します。
- 4
- 実行するテストを指定します。この場合は TCP ソケットテストです。
- 5
- コンテナーがリッスンするポートを指定します。
- 6
- コンテナーが起動してからプローブがスケジュールされるまでの時間 (秒単位) を指定します。
- 7
- プローブを実行する秒数を指定します。デフォルトは
10
です。この値はtimeoutSeconds
よりも大きくなければなりません。 - 8
- プローブが失敗したと想定されてから非アクティブになる時間 (秒数)。デフォルトは
1
です。この値はperiodSeconds
未満である必要があります。 - 9
- オプション: readiness プローブを作成します。
- 10
- 実行するテストのタイプを指定します。この場合は HTTP テストです。
- 11
- ホストの IP アドレスを指定します。
host
が定義されていない場合は、PodIP
が使用されます。 - 12
HTTP
またはHTTPS
を指定します。scheme
が定義されていない場合は、HTTP
スキームが使用されます。- 13
- コンテナーがリッスンするポートを指定します。
- 14
- オプション: スタートアッププローブを作成します。
- 15
- 実行するテストのタイプを指定します。この場合はコンテナー実行プローブです。
- 16
- コンテナーで実行するコマンドを指定します。
- 17
- 失敗後にプローブを試行する回数を指定します。
- 18
- プローブを実行する秒数を指定します。デフォルトは
10
です。この値はtimeoutSeconds
よりも大きくなければなりません。 - 19
- プローブが失敗したと想定されてから非アクティブになる時間 (秒数)。デフォルトは
1
です。この値はperiodSeconds
未満である必要があります。
注記initialDelaySeconds
値がperiodSeconds
値よりも低い場合、最初の readiness プローブがタイマーの問題により 2 つの期間の間のある時点で生じます。timeoutSeconds
値はperiodSeconds
の値よりも低い値である必要があります。Pod
オブジェクトを作成します。$ oc create -f <file-name>.yaml
ヘルスチェック Pod の状態を確認します。
$ oc describe pod my-application
出力例
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 9s default-scheduler Successfully assigned openshift-logging/liveness-exec to ip-10-0-143-40.ec2.internal Normal Pulling 2s kubelet, ip-10-0-143-40.ec2.internal pulling image "registry.k8s.io/liveness" Normal Pulled 1s kubelet, ip-10-0-143-40.ec2.internal Successfully pulled image "registry.k8s.io/liveness" Normal Created 1s kubelet, ip-10-0-143-40.ec2.internal Created container Normal Started 1s kubelet, ip-10-0-143-40.ec2.internal Started container
以下は、コンテナーを再起動した障害のあるプローブの出力です。
正常ではないコンテナーに関する liveness チェック出力の例
$ oc describe pod pod1
出力例
.... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> Successfully assigned aaa/liveness-http to ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Normal AddedInterface 47s multus Add eth0 [10.129.2.11/23] Normal Pulled 46s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 773.406244ms Normal Pulled 28s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 233.328564ms Normal Created 10s (x3 over 46s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Created container liveness Normal Started 10s (x3 over 46s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Started container liveness Warning Unhealthy 10s (x6 over 34s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Liveness probe failed: HTTP probe failed with statuscode: 500 Normal Killing 10s (x2 over 28s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Container liveness failed liveness probe, will be restarted Normal Pulling 10s (x3 over 47s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Pulling image "registry.k8s.io/liveness" Normal Pulled 10s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 244.116568ms
10.3. Developer パースペクティブを使用したアプリケーションの正常性の監視
Developer パースペクティブを使用して、3 種類のヘルスプローブをコンテナーに追加し、アプリケーションが正常であることを確認することができます。
- Readiness プローブを使用して、コンテナーが要求を処理する準備ができているかどうかを確認します。
- Liveness プローブを使用して、コンテナーが実行中であることを確認します。
- Startup プローブを使用して、コンテナー内のアプリケーションが起動しているかどうかを確認します。
アプリケーションの作成およびデプロイ中、またはアプリケーションをデプロイした後にヘルスチェックを追加できます。
10.4. 開発者パースペクティブを使用したヘルスチェックの追加
Topology ビューを使用して、デプロイされたアプリケーションにヘルスチェックを追加できます。
前提条件
- Web コンソールで Developer パースペクティブに切り替えていること。
- Developer パースペクティブを使用して Red Hat OpenShift Service on AWS でアプリケーションを作成し、デプロイしている。
手順
- Topology ビューで、アプリケーションノードをクリックし、サイドパネルを表示します。コンテナーにヘルスチェックが追加されていない場合は、ヘルスチェックを追加するためのリンクを含む Health Checks 通知が表示されます。
- 表示された通知で、Add Health Checks リンクをクリックします。
- または、Actions リストをクリックし、Add Health Checks を選択します。コンテナーにヘルスチェックがすでにある場合は、add オプションの代わりに Edit Health Checks オプションが表示されます。
- Add Health Checks フォームで複数のコンテナーをデプロイしている場合は、Container リストを使用して適切なコンテナーが選択されていることを確認します。
必要なヘルスプローブのリンクをクリックして、それらをコンテナーに追加します。ヘルスチェックのデフォルトデータは事前に設定されています。デフォルトデータでプローブを追加するか、値をさらにカスタマイズしてから追加できます。たとえば、コンテナーが要求を処理する準備ができているかどうかを確認する Readiness プローブを追加するには、以下を実行します。
- Add Readiness Probe をクリックし、プローブのパラメーターが含まれているフォームを表示します。
- Type リストをクリックし、追加する要求タイプを選択します。たとえば、この場合は Container Command を選択し、コンテナー内で実行されるコマンドを選択します。
-
Command フィールドで、引数
cat
を追加することもできます。同様に、チェック用に複数の引数を追加したり、別の引数/tmp/healthy
を追加したりすることができます。 必要に応じて、他のパラメーターのデフォルト値を保持するか、変更します。
注記Timeout
の値はPeriod
の値よりも小さくなければなりません。Timeout
のデフォルト値は1
です。Period
のデフォルト値は10
です。- フォームの下部にあるチェックマークをクリックします。Readiness Probe Added メッセージが表示されます。
- Add をクリックしてヘルスチェックを追加します。Topology ビューにリダイレクトされ、コンテナーが再起動します。
- サイドパネルで、Pods セクションの下にあるデプロイされた Pod をクリックして、プローブが追加されたことを確認します。
- Pod Details ページで、Containers セクションに一覧表示されているコンテナーをクリックします。
-
Container Details ページで、Readiness probe - Exec Command
cat
/tmp/healthy
がコンテナーに追加されていることを確認します。
10.5. 開発者パースペクティブを使用したヘルスチェックの編集
Topology ビューを使用して、アプリケーションに追加されたヘルスチェックを編集したり、アプリケーションを変更したり、ヘルスチェックを追加したりすることができます。
前提条件
- Web コンソールで Developer パースペクティブに切り替えていること。
- Developer パースペクティブを使用して Red Hat OpenShift Service on AWS でアプリケーションを作成し、デプロイしている。
- アプリケーションにヘルスチェックを追加していること。
手順
- Topology ビューでアプリケーションを右クリックし、Edit Health Checks を選択します。または、サイドパネルで Actions ドロップダウンリストをクリックし、Edit Health Checks を選択します。
Edit Health Checks ページで以下を行います。
- 追加されている正常性プローブを削除するには、その隣にある Remove アイコンをクリックします。
既存のプローブのパラメーターを編集するには、以下を実行します。
- 以前に追加したプローブの横にある Edit Probe リンクをクリックし、プローブのパラメーターを表示します。
- 必要に応じてパラメーターを変更し、チェックマークをクリックして変更を保存します。
既存のヘルスチェックに加え、新規のヘルスプローブを追加するには、add probe リンクをクリックします。たとえば、コンテナーが実行中かどうかを確認する Liveness プローブを追加するには、以下を実行します。
- Add Liveness Probe をクリックし、プローブのパラメーターが含まれているフォームを表示します。
必要に応じてプローブのパラメーターを編集します。
注記Timeout
の値はPeriod
の値よりも小さくなければなりません。Timeout
のデフォルト値は1
です。Period
のデフォルト値は10
です。- フォームの下部にあるチェックマークをクリックします。Liveness Probe Added というメッセージが表示されます。
- Save をクリックして変更を保存し、追加のプローブをコンテナーに追加します。Topology ビューにリダイレクトされます。
- サイドパネルで、Pods セクションの下にあるデプロイされた Pod をクリックして、プローブが追加されたことを確認します。
- Pod Details ページで、Containers セクションに一覧表示されているコンテナーをクリックします。
-
Container Details ページで、以前の既存プローブに加えて Liveness probe -
HTTP Get 10.129.4.65:8080/
がコンテナーに追加されていることを確認します。
10.6. Developer パースペクティブを使用したヘルスチェックの失敗の監視
アプリケーションのヘルスチェックに失敗した場合、Topology ビューを使用してこれらのヘルスチェックの違反を監視できます。
前提条件
- Web コンソールで Developer パースペクティブに切り替えていること。
- Developer パースペクティブを使用して Red Hat OpenShift Service on AWS でアプリケーションを作成し、デプロイしている。
- アプリケーションにヘルスチェックを追加していること。
手順
- Topology ビューで、アプリケーションノードをクリックし、サイドパネルを表示します。
- Observe タブをクリックして、Events(Warning) セクションにヘルスチェックの失敗を確認します。
- Events (Warning) に隣接する下矢印をクリックし、ヘルスチェックの失敗の詳細を確認します。
関連情報
- アプリケーションの作成およびデプロイ時にヘルスチェックを追加する方法の詳細は、Developer パースペクティブを使用したアプリケーションの作成セクションの高度なオプションを参照してください。
第11章 アプリケーションの編集
Topology ビューを使用して、作成するアプリケーションの設定およびソースコードを編集できます。
11.1. 前提条件
- Developer パースペクティブを使用して Red Hat OpenShift Service on AWS でアプリケーションを作成し、デプロイしている。
- Web コンソールにログインしており、Developer パースペクティブに切り替えている。
11.2. Developer パースペクティブを使用したアプリケーションのソースコードの編集
Developer パースペクティブの Topology ビューを使用して、アプリケーションのソースコードを編集できます。
手順
Topology ビューで、デプロイされたアプリケーションの右下に表示される Edit Source code アイコンをクリックして、ソースコードにアクセスし、これを変更します。
注記この機能は、From Git、From Catalog、および From Dockerfile オプションを使用してアプリケーションを作成する場合にのみ利用できます。
11.3. Developer パースペクティブを使用したアプリケーション設定の編集
Developer パースペクティブの Topology ビューを使用して、アプリケーションの設定を編集できます。
現在、Developer パースペクティブの Add ワークフローにある From Git、Container Image、From Catalog、または From Dockerfile オプションを使用して作成されるアプリケーションの設定のみを編集できます。CLI または Add ワークフローからの YAML オプションを使用して作成したアプリケーションの設定は編集できません。
前提条件
Add ワークフローの From Git、Container Image、From Catalog、または From Dockerfile オプションを使用してアプリケーションを作成している。
手順
アプリケーションを作成し、アプリケーションが Topology ビューに表示された後に、アプリケーションを右クリックして選択可能な編集オプションを確認します。
図11.1 アプリケーションの編集
- Edit application-name をクリックし、アプリケーションの作成に使用した Add ワークフローを表示します。このフォームには、アプリケーションの作成時に追加した値が事前に設定されています。
アプリケーションに必要な値を編集します。
注記General セクションの Name フィールド、CI/CD パイプライン、または Advanced Options セクションの Create a route to the application フィールドを編集することはできません。
Save をクリックしてビルドを再起動し、新規イメージをデプロイします。
図11.2 アプリケーションの編集および再デプロイ
第12章 クォータの使用
ResourceQuota オブジェクトで定義される リソースクォータ は、プロジェクトごとにリソース消費量の総計を制限する制約を指定します。これは、タイプ別にプロジェクトで作成できるオブジェクトの数量を制限すると共に、そのプロジェクトのリソースが消費できるコンピュートリソースおよびストレージの合計量を制限することができます。
オブジェクトクォータカウント は、定義されたクォータをすべての標準的な namespace を使用しているリソースタイプに設定します。リソースクォータの使用時に、オブジェクトがサーバーストレージにある場合、そのオブジェクトはクォータに基づいてチャージされます。以下のクォータのタイプはストレージリソースが使い切られることから保護するのに役立ちます。
このガイドでは、リソースクォータの仕組みや、開発者がリソースを使用し、表示する方法を説明します。
12.1. クォータの表示
Web コンソールでプロジェクトの Quota ページに移動し、プロジェクトのクォータで定義されるハード制限に関連する使用状況の統計を表示できます。
CLI を使用してクォータの詳細を表示することもできます。
手順
プロジェクトで定義されるクォータのリストを取得します。たとえば、
demoproject
というプロジェクトの場合、以下を実行します。$ oc get quota -n demoproject
出力例
NAME AGE REQUEST LIMIT besteffort 4s pods: 1/2 compute-resources-time-bound 10m pods: 0/2 limits.cpu: 0/1, limits.memory: 0/1Gi core-object-counts 109s configmaps: 2/10, persistentvolumeclaims: 1/4, replicationcontrollers: 1/20, secrets: 9/10, services: 2/10
関連するクォータについて記述します。たとえば、
core-object-counts
クォータの場合、以下を実行します。$ oc describe quota core-object-counts -n demoproject
出力例
Name: core-object-counts Namespace: demoproject Resource Used Hard -------- ---- ---- configmaps 3 10 persistentvolumeclaims 0 4 replicationcontrollers 3 20 secrets 9 10 services 2 10
12.2. クォータで管理されるリソース
以下では、クォータで管理できる一連のコンピュートリソースとオブジェクトタイプを説明します。
status.phase in (Failed、Succeeded)
が true の場合、Pod は終了状態にあります。
リソース名 | 説明 |
---|---|
|
非終了状態のすべての Pod での CPU 要求の合計はこの値を超えることができません。 |
|
非終了状態のすべての Pod でのメモリー要求の合計はこの値を超えることができません。 |
|
非終了状態のすべての Pod での CPU 要求の合計はこの値を超えることができません。 |
|
非終了状態のすべての Pod でのメモリー要求の合計はこの値を超えることができません。 |
| 非終了状態のすべての Pod での CPU 制限の合計はこの値を超えることができません。 |
| 非終了状態のすべての Pod でのメモリー制限の合計はこの値を超えることができません。 |
リソース名 | 説明 |
---|---|
| 任意の状態のすべての永続ボリューム要求でのストレージ要求の合計は、この値を超えることができません。 |
| プロジェクトに存在できる永続ボリューム要求の合計数です。 |
| 一致するストレージクラスを持つ、任意の状態のすべての永続ボリューム要求でのストレージ要求の合計はこの値を超えることができません。 |
| プロジェクトに存在できる、一致するストレージクラスを持つ永続ボリューム要求の合計数です。 |
|
非終了状態のすべての Pod におけるローカルの一時ストレージ要求の合計は、この値を超えることができません。 |
|
非終了状態のすべての Pod における一時ストレージ要求の合計は、この値を超えることができません。 |
| 非終了状態のすべての Pod における一時ストレージ制限の合計は、この値を超えることができません。 |
リソース名 | 説明 |
---|---|
| プロジェクトに存在できる非終了状態の Pod の合計数です。 |
| プロジェクトに存在できる ReplicationController の合計数です。 |
| プロジェクトに存在できるリソースクォータの合計数です。 |
| プロジェクトに存在できるサービスの合計数です。 |
|
プロジェクトに存在できるタイプ |
|
プロジェクトに存在できるタイプ |
| プロジェクトに存在できるシークレットの合計数です。 |
|
プロジェクトに存在できる |
| プロジェクトに存在できる永続ボリューム要求の合計数です。 |
| プロジェクトに存在できるイメージストリームの合計数です。 |
12.3. クォータのスコープ
各クォータには スコープ のセットが関連付けられます。クォータは、列挙されたスコープの交差部分に一致する場合にのみリソースの使用状況を測定します。
スコープをクォータに追加すると、クォータが適用されるリソースのセットを制限できます。許可されるセット以外のリソースを設定すると、検証エラーが発生します。
スコープ | 説明 |
|
|
|
|
BestEffort
スコープは、以下のリソースに制限するようにクォータを制限します。
-
pods
NotBestEffort
スコープは、以下のリソースを追跡するようにクォータを制限します。
-
pods
-
memory
-
requests.memory
-
limits.memory
-
cpu
-
requests.cpu
-
limits.cpu
12.4. クォータの実施
プロジェクトのリソースクォータが最初に作成されると、プロジェクトは、更新された使用状況の統計が計算されるまでクォータ制約の違反を引き起こす可能性のある新規リソースの作成機能を制限します。
クォータが作成され、使用状況の統計が更新されると、プロジェクトは新規コンテンツの作成を許可します。リソースを作成または変更する場合、クォータの使用量はリソースの作成または変更要求があるとすぐに増分します。
リソースを削除する場合、クォータの使用量は、プロジェクトのクォータ統計の次回の完全な再計算時に減分されます。設定可能な時間を指定して、クォータ使用量の統計値を現在確認されるシステム値まで下げるのに必要な時間を決定します。
プロジェクト変更がクォータ使用制限を超える場合、サーバーはそのアクションを拒否し、クォータ制約を違反していること、およびシステムで現在確認される使用量の統計値を示す適切なエラーメッセージがユーザーに返されます。
12.5. 要求 vs 制限
コンピュートリソースの割り当て時に、各コンテナーは CPU、メモリー、一時ストレージのそれぞれに要求値と制限値を指定できます。クォータはこれらの値のいずれも制限できます。
クォータに requests.cpu
または requests.memory
の値が指定されている場合、すべての着信コンテナーがそれらのリソースを明示的に要求することが求められます。クォータに limits.cpu
または limits.memory
の値が指定されている場合、すべての着信コンテナーがそれらのリソースの明示的な制限を指定することが求められます。
第13章 リソースを回収するためのオブジェクトのプルーニング
時間の経過と共に、Red Hat OpenShift Service on AWS で作成される API オブジェクトは、アプリケーションのビルドおよびデプロイなどの通常のユーザーの操作によってクラスターの etcd データストアに蓄積されます。
dedicated-admin
ロールを持つユーザーは、不要になった古いバージョンのオブジェクトをクラスターから定期的にプルーニングできます。たとえば、イメージのプルーニングにより、使用されなくなったものの、ディスク領域を使用している古いイメージや層を削除できます。
13.1. プルーニングの基本操作
CLI は、共通の親コマンドでプルーニング操作を分類します。
$ oc adm prune <object_type> <options>
これにより、以下が指定されます。
-
groups
、builds
、deployments
、またはimages
などのアクションを実行するための<object_type>
。 -
オブジェクトタイプのプルーニングの実行においてサポートされる
<options>
。
13.2. グループのプルーニング
グループのレコードを外部プロバイダーからプルーニングするために、管理者は以下のコマンドを実行できます。
$ oc adm prune groups \ --sync-config=path/to/sync/config [<options>]
オプション | 説明 |
---|---|
| ドライランを実行する代わりにプルーニングが実行されることを示します。 |
| グループブラックリストファイルへのパス。 |
| グループホワイトリストファイルへのパス。 |
| 同期設定ファイルへのパスです。 |
手順
prune コマンドが削除するグループを表示するには、以下のコマンドを実行します。
$ oc adm prune groups --sync-config=ldap-sync-config.yaml
prune 操作を実行するには、
--confirm
フラグを追加します。$ oc adm prune groups --sync-config=ldap-sync-config.yaml --confirm
13.3. デプロイメントリソースのプルーニング
使用年数やステータスによりシステムで不要となったデプロイメントに関連付けられたリソースをプルーニングできます。
以下のコマンドは、DeploymentConfig
オブジェクトに関連付けられたレプリケーションコントローラーをプルーニングします。
$ oc adm prune deployments [<options>]
Deployment
オブジェクトに関連付けられたレプリカセットもプルーニングするには、--replica-sets
フラグを使用します。このフラグは、現在テクノロジープレビュー機能です。
オプション | 説明 |
---|---|
| ドライランを実行する代わりにプルーニングが実行されることを示します。 |
|
|
|
|
|
現在の時間との対比で |
|
|
手順
プルーニング操作によって削除されるものを確認するには、以下のコマンドを実行します。
$ oc adm prune deployments --orphans --keep-complete=5 --keep-failed=1 \ --keep-younger-than=60m
実際に prune 操作を実行するには、
--confirm
フラグを追加します。$ oc adm prune deployments --orphans --keep-complete=5 --keep-failed=1 \ --keep-younger-than=60m --confirm
13.4. ビルドのプルーニング
使用年数やステータスによりシステムで不要となったビルドをプルーニングするために、管理者は以下のコマンドを実行できます。
$ oc adm prune builds [<options>]
オプション | 説明 |
---|---|
| ドライランを実行する代わりにプルーニングが実行されることを示します。 |
| ビルド設定が存在せず、ステータスが complete、failed、error、または canceled のすべてのビルドをプルーニングします。 |
|
ビルド設定に基づいて、ステータスが complete の最後の |
|
ビルド設定に基づいて、ステータスが failed (失敗)、error (エラー)、または canceled (中止) の最後の |
|
現在の時間との対比で |
手順
プルーニング操作によって削除されるものを確認するには、以下のコマンドを実行します。
$ oc adm prune builds --orphans --keep-complete=5 --keep-failed=1 \ --keep-younger-than=60m
実際に prune 操作を実行するには、
--confirm
フラグを追加します。$ oc adm prune builds --orphans --keep-complete=5 --keep-failed=1 \ --keep-younger-than=60m --confirm
開発者は、ビルドの設定を変更して自動ビルドプルーニングを有効にできます。
13.5. イメージの自動プルーニング
経過時間、ステータス、または制限の超過によりシステムで不要になった OpenShift イメージレジストリーのイメージは、自動的にプルーニングされます。クラスター管理者は、Pruning Custom Resource を設定したり、これを保留にしたりすることができます。
前提条件
-
dedicated-admin
パーミッションを持つアカウントを使用して Red Hat OpenShift Service on AWS クラスターにアクセスできる。 -
oc
CLI がインストールされている。
手順
-
imagepruners.imageregistry.operator.openshift.io/cluster
という名前のオブジェクトに以下のspec
およびstatus
フィールドが含まれることを確認します。
spec: schedule: 0 0 * * * 1 suspend: false 2 keepTagRevisions: 3 3 keepYoungerThanDuration: 60m 4 keepYoungerThan: 3600000000000 5 resources: {} 6 affinity: {} 7 nodeSelector: {} 8 tolerations: [] 9 successfulJobsHistoryLimit: 3 10 failedJobsHistoryLimit: 3 11 status: observedGeneration: 2 12 conditions: 13 - type: Available status: "True" lastTransitionTime: 2019-10-09T03:13:45 reason: Ready message: "Periodic image pruner has been created." - type: Scheduled status: "True" lastTransitionTime: 2019-10-09T03:13:45 reason: Scheduled message: "Image pruner job has been scheduled." - type: Failed staus: "False" lastTransitionTime: 2019-10-09T03:13:45 reason: Succeeded message: "Most recent image pruning job succeeded."
- 1
schedule
:CronJob
形式のスケジュールこれはオプションのフィールドで、デフォルトは daily で午前 0 時でに設定されます。- 2
suspend
:true
に設定されている場合、プルーニングを実行しているCronJob
は中断されます。これはオプションのフィールドで、デフォルトはfalse
です。新規クラスターの初期値はfalse
です。- 3
keepTagRevisions
: 保持するタグ別のリビジョン数です。これはオプションのフィールドで、デフォルトは3
です。初期値は3
です。- 4
keepYoungerThanDuration
: 指定の期間よりも後に作成されたイメージを保持します。これはオプションのフィールドです。値の指定がない場合は、keepYoungerThan
またはデフォルト値60m
(60 分) のいずれかが使用されます。- 5
keepYoungerThan
: 非推奨。keepYoungerThanDuration
と同じですが、期間は整数 (ナノ秒単位) で指定されます。これはオプションのフィールドです。keepYoungerThanDuration
を設定すると、このフィールドは無視されます。- 6
resources
: 標準の Pod リソースの要求および制限です。これはオプションのフィールドです。- 7
affinity
: 標準の Pod のアフィニティーです。これはオプションのフィールドです。- 8
nodeSelector
: 標準の Pod ノードセレクターです。これはオプションのフィールドです。- 9
tolerations
: 標準の Pod の容認です。これはオプションのフィールドです。- 10
successfulJobsHistoryLimit
: 保持する成功したジョブの最大数です。メトリックがレポートされるようにするには>= 1
にする必要があります。これはオプションのフィールドで、デフォルトは3
です。初期値は3
です。- 11
failedJobsHistoryLimit
: 保持する失敗したジョブの最大数です。メトリックがレポートされるようにするには>= 1
にする必要があります。これはオプションのフィールドで、デフォルトは3
です。初期値は3
です。- 12
observedGeneration
: Operator によって観察される生成です。- 13
conditions
: 以下のタイプの標準条件オブジェクトです。-
Available
: プルーニングジョブが作成されているかどうかを示します。理由には Ready または Error のいずれかを使用できます。 -
Scheduled
: 次のプルーニングジョブがスケジュールされているかどうかを示します。理由には、Scheduled、Suspended、または Error を使用できます。 -
Failed
: 最新のプルーニングジョブが失敗したかどうかを示します。
-
プルーナーを管理するためのイメージレジストリー Operator の動作は、イメージレジストリー Operator の ClusterOperator
オブジェクトで指定される managementState
とは独立しています。イメージレジストリー Operator が Managed
状態ではない場合、イメージプルーナーは Pruning Custom Resource によって設定され、管理できます。
ただし、イメージレジストリー Operator の managementState
は、デプロイされたイメージプルーナージョブの動作を変更します。
-
Managed
: イメージプルーナーの--prune-registry
フラグはtrue
に設定されます。 -
Removed
: イメージプルーナーの--prune-registry
フラグはfalse
に設定されます。つまり、etcd のイメージメタデータのみプルーニングされます。
13.6. cron ジョブのプルーニング
cron ジョブは正常なジョブのプルーニングを実行できますが、失敗したジョブを適切に処理していない可能性があります。そのため、クラスター管理者はジョブの定期的なクリーンアップを手動で実行する必要があります。また、信頼できるユーザーの小規模なグループに cron ジョブへのアクセスを制限し、cron ジョブでジョブや Pod が作成され過ぎないように適切なクォータを設定する必要もあります。
関連情報
第14章 アプリケーションのアイドリング
クラスター管理者は、アプリケーションをアイドリング状態にしてリソース消費を減らすことができます。これは、コストがリソース消費と関連付けられるパブリッククラウドにデプロイされている場合に役立ちます。
スケーラブルなリソースが使用されていない場合、Red Hat OpenShift Service on AWS はリソースを検出した後にそれらを 0
レプリカに設定してアイドリングします。ネットワークトラフィックがリソースに送信される場合、レプリカをスケールアップしてアイドリング解除を実行し、通常の操作を続行します。
アプリケーションは複数のサービスやデプロイメント構成などの他のスケーラブルなリソースで設定されています。アプリケーションのアイドリングには、関連するすべてのリソースのアイドリングを実行することが関係します。
14.1. アプリケーションのアイドリング
アプリケーションのアイドリングには、サービスに関連付けられたスケーラブルなリソース (デプロイメント設定、レプリケーションコントローラーなど) を検索することが必要です。アプリケーションのアイドルリングには、サービスを検索してこれをアイドリング状態としてマークし、リソースを zero レプリカにスケールダウンすることが関係します。
oc idle
コマンドを使用して単一サービスをアイドリングするか、--resource-names-file
オプションを使用して複数のサービスをアイドリングすることができます。
14.1.1. 単一サービスのアイドリング
手順
単一のサービスをアイドリングするには、以下を実行します。
$ oc idle <service>
14.1.2. 複数サービスのアイドリング
複数サービスのアイドリングは、アプリケーションがプロジェクト内の一連のサービスにまたがる場合や、同じプロジェクト内で複数のアプリケーションを一括してアイドリングするため、複数サービスをスクリプトを併用してアイドリングする場合に役立ちます。
手順
- 複数サービスのリストを含むファイルを作成します (それぞれを各行に指定)。
--resource-names-file
オプションを使用してサービスをアイドリングします。$ oc idle --resource-names-file <filename>
idle
コマンドは単一プロジェクトに制限されます。クラスター全体でアプリケーションをアイドリングするには、各プロジェクトに対して idle
コマンドを個別に実行します。
14.2. アプリケーションのアイドリング解除
アプリケーションサービスは、ネットワークトラフィックを受信し、直前の状態に再びスケールアップすると再びアクティブになります。これには、サービスへのトラフィックとルートを通るトラフィックの両方が含まれます。
また、アプリケーションはリソースをスケールアップすることにより、手動でアイドリング解除することができます。
手順
DeploymentConfig をスケールアップするには、以下を実行します。
$ oc scale --replicas=1 dc <dc_name>
現時点で、ルーターによる自動アイドルリング解除はデフォルトの HAProxy ルーターのみでサポートされています。
第15章 アプリケーションの削除
プロジェクトで作成されたアプリケーションを削除できます。
15.1. Developer パースペクティブを使用したアプリケーションの削除
Developer パースペクティブの Topology ビューを使用して、アプリケーションとその関連コンポーネントすべてを削除できます。
- 削除するアプリケーションをクリックし、アプリケーションのリソースの詳細を含むサイドパネルを確認します。
- パネルの右上に表示される Actions ドロップダウンメニューをクリックし、Delete Application を選択して確認ダイアログボックスを表示します。
- アプリケーションの名前を入力して Delete をクリックし、これを削除します。
削除するアプリケーションを右クリックし、Delete Application をクリックして削除することもできます。
第16章 Red Hat Marketplace の使用
Red Hat Marketplace は、パブリッククラウドおよびオンプレミスで実行されるコンテナーベース環境向けの認定されたソフトウェアの検出とアクセスを容易にする、オープンクラウドマーケットプレースです。
16.1. Red Hat Marketplace 機能
クラスター管理者は Red Hat Marketplace を使用して Red Hat OpenShift Service on AWS でソフトウェアを管理し、開発者にアプリケーションインスタンスをデプロイするためのセルフサービスアクセスを付与し、アプリケーションの使用状況をクォータに対して関連付けることができます。
16.1.1. Red Hat OpenShift Service on AWS クラスターのマーケットプレイスへの連携
クラスター管理者は、Marketplace に接続する Red Hat OpenShift Service on AWS クラスターにアプリケーションの共通セットをインストールできます。また、Marketplace を使用し、サブスクリプションまたはクォータに対してクラスターの使用状況を追跡することもできます。Marketplace を使用して追加したユーザーは、それぞれの製品のの使用状況を追跡し、組織に対して請求できます。
クラスター接続のプロセス で、イメージレジストリーシークレットを更新し、カタログを管理し、アプリケーションの使用状況を報告する Marketplace Operator がインストールされています。
16.1.2. アプリケーションのインストール
クラスター管理者は、Red Hat OpenShift Service on AWS の OperatorHub 内から、または Marketplace Web アプリケーション から Marketplace アプリケーションをインストール できます。
Operators > Installed Operators をクリックして、Web コンソールからインストールされたアプリケーションにアクセスできます。
16.1.3. 異なるパースペクティブからのアプリケーションのデプロイ
Web コンソールの Administrator および Developer パースペクティブから Marketplace アプリケーションをデプロイすることができます。
Developer パースペクティブ
開発者は Developer パースペクティブを使用して、新しくインストールされた機能にアクセスできます。
たとえば、データベース Operator のインストール後に、開発者はプロジェクト内のカタログからインスタンスを作成できます。データベースの使用状況は集計され、クラスター管理者に報告されます。
このパースペクティブには、Operator のインストールやアプリケーション使用状況の追跡は含まれません。
Administrator パースペクティブ
クラスター管理者は、Administrator パースペクティブから Operator のインストールおよびアプリケーションの使用状況の情報にアクセスできます。
また、Installed Operators リストでカスタムリソース定義 (CRD) を参照してアプリケーションインスタンスを起動することもできます。
Legal Notice
Copyright © 2024 Red Hat, Inc.
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.