管理ガイド
Administering Red Hat OpenShift Dev Spaces 3.3
概要
第1章 インストールの準備
OpenShift Dev Spaces インストールを準備するには、OpenShift Dev Spaces エコシステムおよびデプロイメントの制約について確認します。
1.1. サポートされるプラットフォーム
OpenShift Dev Spaces は、以下の CPU アーキテクチャー上にある OpenShift 4.10 および 4.11 で実行されます。
-
AMD64 および Intel 64 (
x
86_64) -
IBM Power (
ppc64le
) および IBM Z (s390x
)
関連情報
1.2. アーキテクチャー
図1.1 Dev Workspace Operator を使用した高度な OpenShift Dev Spaces アーキテクチャー
OpenShift Dev Spaces は、3 つのコンポーネントのグループで実行されます。
- OpenShift Dev Spaces サーバーコンポーネント
- ユーザープロジェクトおよびワークスペースの管理。主な設定要素はユーザーダッシュボードで、ユーザーはここから自分のワークスペースを制御します。
- Dev ワークスペースの演算子
-
User ワークスペースの実行に必要な OpenShift オブジェクトを作成し、制御します。
Pods
、Services
、PeristentVolumes
を含みます。 - User ワークスペース
- コンテナーベースの開発環境、IDE を含みます。
これらの OpenShift の機能のロールは中心的なものです。
- Dev ワークスペースのカスタムリソース
- ユーザーワークスペースを表す有効な OpenShift オブジェクト。OpenShift Dev Spaces で操作します。3 つのグループのコンポーネントのコミュニケーションチャンネルとなります。
- OpenShift のロールベースアクセスコントロール (RBAC)
- すべてのリソースへのアクセスを制御します。
関連情報
1.2.1. サーバーコンポーネント
OpenShift Dev Spaces サーバーコンポーネントにより、マルチテナンシーとワークスペースの管理が確保されます。
図1.2 Dev Workspace Operator と対話する OpenShift Dev Spaces サーバーコンポーネント
関連情報
1.2.1.1. Dev Spaces オペレーター
OpenShift Dev Spaces Operator は、OpenShift Dev Spaces サーバーコンポーネントの完全なライフサイクル管理を行います。これには、以下が含まれます。
CheCluster
カスタムリソース定義 (CRD)-
CheCluster
OpenShift オブジェクトを定義します。 - OpenShift Dev Spaces コントローラー
- Pod、サービス、永続ボリュームなどの OpenShift Dev Space インスタンスを実行するために必要な OpenShift オブジェクトを作成し、制御します。
CheCluster
カスタムリソース (CR)OpenShift Dev Spaces Operator を持つクラスターでは、
CheCluster
カスタムリソース (CR) を作成できます。OpenShift Dev Spaces オペレーターは、この OpenShift Dev Spaces インスタンス上で OpenShift Dev Spaces サーバーコンポーネントの完全なライフサイクル管理を行います。
1.2.1.2. Dev ワークスペースの演算子
Dev Workspace 演算子は、OpenShift を拡張して Dev Workspace のサポートを提供します。これには、以下が含まれます。
- Dev Workspace のカスタムリソース定義
- Devfile v2 仕様から Dev Workspace OpenShift オブジェクトを定義します。
- Dev Workspace コントローラー
- Pod、サービス、永続ボリュームなど、Dev Workspace の実行に必要な OpenShift オブジェクトを作成して制御します。
- Dev Workspace カスタムリソース
- Dev Workspace 演算子があるクラスターでは、Dev Workspace カスタムリソース (CR) を作成することができます。Dev Workspace CR は、Devfile を OpenShift で表現したものです。OpenShift クラスター内の User ワークスペースを定義します。
関連情報
1.2.1.3. ゲートウェイ
OpenShift Dev Spaces ゲートウェイには、以下のロールがあります。
- 要求をルーティングする。Traefik を使用します。
- OpenID Connect(OIDC) でユーザーを認証する。OpenShift OAuth2 プロキシー を使用します。
- OpenShift RoleBased Access Control(RBAC) ポリシーを適用して、OpenShift Dev Spaces リソースへのアクセスを制御します。'kube-rbac-proxy' を使用します。
OpenShift Dev Spaces Operator はこれを che-gateway
Deployment として管理します。
以下へのアクセスを制御します。
図1.3 OpenShift Dev Spaces ゲートウェイと他のコンポーネントとの対話
関連情報
1.2.1.4. ユーザーダッシュボード
ユーザーダッシュボードは、Red Hat OpenShift Dev Spaces のランディングページです。OpenShift Dev Spaces ユーザーは、ユーザーダッシュボードを参照してワークスペースにアクセスし、管理します。これは React のアプリケーションです。OpenShift Dev Spaces デプロイメントは、devspaces-dashboard
Deployment で起動します。
以下にアクセスする必要があります。
- 「Devfile レジストリー」
- 「Dev Spaces サーバー」
- 「プラグインレジストリー」
- OpenShift API
図1.4 User ダッシュボードと他のコンポーネントとの対話
ユーザーがユーザーダッシュボードにワークスペースの起動を要求すると、ユーザーダッシュボードはこの一連のアクションを実行します。
- ユーザーがコードサンプルからワークスペースを作成する際に、「Devfile レジストリー」 から devfile を収集します。
- リポジトリー URL を 「Dev Spaces サーバー」 に送信し、ユーザーがリモート devfile からワークスペースを作成する際に devfile が返されることを想定します。
- ワークスペースを記述した devfile を読み込みます。
- 「プラグインレジストリー」 から追加のメタデータを収集します。
- その情報を Dev Workspace Custom Resource に変換します。
- OpenShift API を使用して、ユーザープロジェクトに Dev Workspace Custom Resource を作成します。
- Dev Workspace Custom Resource のステータスを監視します。
- 実行中のワークスペース IDE にユーザーをリダイレクトします。
1.2.1.5. Devfile レジストリー
関連情報
OpenShift Dev Spaces devfile レジストリーは、すぐに使用できるワークスペースを作成するためのサンプル devfile の一覧を提供するサービスです。「ユーザーダッシュボード」 は、Dashboard → Create Workspace ページにサンプルリストを表示します。各サンプルには、Devfile v2 が含まれています。OpenShift Dev Spaces デプロイメントでは、devfile-registry
デプロイメントで 1 つの devfile レジストリーインスタンスを起動します。
図1.5 他のコンポーネントとの相互作用を登録する Devfile
1.2.1.6. Dev Spaces サーバー
OpenShift Dev Spaces サーバーの主な機能は次のとおりです。
- ユーザーネームスペースの作成
- ユーザーネームスペースに必要なシークレットと Config Map のプロビジョニング
- Git サービスプロバイダーとの統合による devfile の取得および認証
OpenShift Dev Spaces サーバーは、HTTP REST API を公開する Java Web サービスで、以下へのアクセスが必要です。
- 「PostgreSQL」
- Git サービスプロバイダー
- OpenShift API
図1.6 OpenShift Dev Spaces サーバーと他のコンポーネントとの対話
1.2.1.7. PostgreSQL
OpenShift Dev Spaces サーバーは、PostgreSQL データベースを使用してワークスペースのメタデータなどのユーザー設定を永続化します。
OpenShift Dev Spaces デプロイメントでは、postgres
Deployment で専用の PostgreSQL インスタンスを起動します。代わりに外部データベースを使用することができます。
図1.7 Postgre SQL と他のコンポーネントとの対話
1.2.1.8. プラグインレジストリー
各 OpenShift Dev Spaces ワークスペースは、特定のエディターおよび関連する拡張機能のセットで始まります。OpenShift Dev Spaces プラグインレジストリーは、利用可能なエディターおよびエディターエクステンションの一覧を提供します。各エディターや拡張機能については、Devfile v2 に記載されています。
「ユーザーダッシュボード」 は、レジストリーの内容を読み取っています。
図1.8 他のコンポーネントとのプラグインレジストリーの相互作用
1.2.2. User ワークスペース
図1.9 User ワークスペースと他のコンポーネントとの対話
User ワークスペースは、コンテナー内で動作する Web IDE です。
User ワークスペースは、Web アプリケーションです。コンテナー内で動作するマイクロサービスで設定されており、ブラウザー上で動作する最新の IDE のすべてのサービスを提供します。
- エディター
- 言語オートコンプリート
- 言語サーバー
- デバッグツール
- プラグイン
- アプリケーションのランタイム
ワークスペースは、ワークスペースコンテナーと有効なプラグイン、および関連する OpenShift コンポーネントを含む 1 つの OpenShift Deployment です。
- コンテナー
- ConfigMap
- サービス
- エンドポイント
- ingress またはルート
- シークレット
- 永続ボリューム (PV)
OpenShift Dev Spaces ワークスペースには、OpenShift 永続ボリューム (PV) で永続化されるプロジェクトのソースコードが含まれます。マイクロサービスは、この共有ディレクトリーに読み書き可能なアクセス権があります。
devfile v2 形式を使用して、OpenShift Dev Spaces ワークスペースのツールおよびランタイムアプリケーションを指定します。
以下の図は、OpenShift Dev Spaces ワークスペースとそのコンポーネントを実行する 1 つを示しています。
図1.10 OpenShift Dev Spaces ワークスペースコンポーネント
この図では、実行中のワークスペースが 1 つあります。
1.3. Dev Spaces リソース要件の計算
OpenShift Dev Spaces Operator、Dev Workspace Controller、およびユーザーワークスペースは Pod のセットで設定されます。Pod は、CPU とメモリーの制限と要求のリソース消費に影響します。Red Hat OpenShift Dev Spaces の実行に必要なメモリーや CPU などのリソースを計算する方法を説明します。
手順
devfile の components セクションに明示的に指定されるワークスペース
components
を特定します。このセクションが空の場合、OpenShift Dev Spaces は暗黙的なコンポーネントのみをロードします。表1.1 Devfile で指定されたワークスペースコンポーネントのメモリー要件 目的 Pod コンテナー名 メモリー制限 メモリー要求 CPU limit CPU request 開発者ツール
workspace
合計
OpenShift Dev Spaces がロードする暗黙的なワークスペースコンポーネント (開発者ツール、エディター、および OpenShift Dev Spaces ゲートウェイ) を特定します。
表1.2 暗黙的なワークスペースコンポーネントの既定の要件 目的 Pod コンテナー名 メモリー制限 メモリー要求 CPU limit CPU request 開発者ツール
workspace
universal-developer-image
1 GiB
256 MiB
500 m
30 m
エディター
workspace
che-code
128 MiB
32 MiB
500 m
30 m
OpenShift Dev Spaces ゲートウェイ
workspace
che-gateway
256 Mi
64 Mi
500 m
50 m
合計
2.4 GiB
480 MiB
1.5
110 m
- 各ワークスペースに必要なリソースを合計し、実行中のワークスペースの数を掛けます。
サーバーコンポーネントの要件をまとめます。
表1.3 OpenShift Dev Spaces サーバーコンポーネントのデフォルト要件 目的 Pod の名前 コンテナー名 メモリー制限 メモリー要求 CPU limit CPU request OpenShift Dev Spaces 演算子
devspaces-operator
devspaces-operator
256 MiB
64 MiB
500 m
100 m
OpenShift Dev Spaces Server
devspaces
devspaces-server
1 Gi
512 MiB
1
1 m
OpenShift Dev Spaces Dashboard
devspaces-dashboard
-
devspaces-dashboard
256 MiB
32 MiB
500 m
100 m
OpenShift Dev Spaces Gateway
devspaces-gateway
traefik
4 GiB
128 MiB
1
100 m
OpenShift Dev Spaces Gateway
devspaces-gateway
configbump
256 MiB
64 MiB
500 m
50 m
OpenShift Dev Spaces Gateway
devspaces-gateway
oauth-proxy
512 MiB
64 MiB
500 m
100 m
OpenShift Dev Spaces Gateway
devspaces-gateway
kube-rbac-proxy
512 MiB
64 MiB
500 m
100 m
devfile レジストリー
devfile-registry
devfile-registry
256 Mi
32 Mi
500 m
100 m
プラグインレジストリー
plugin-registry
plugin-registry
256 Mi
32 Mi
500 m
100 m
PostgreSQL データベース
postgres
postgres
1 Gi
512 Mi
500 m
100 m
Dev Workspace Controller Manager
devworkspace-controller-manager
devworkspace-controller
1 GiB
100 MiB
1
250 m
Dev Workspace Controller Manager
devworkspace-controller-manager
kube-rbac-proxy
該当なし
該当なし
該当なし
該当なし
Dev Workspace Webhook Server
devworkspace-webhook-server
webhook-server
300 MiB
29 MiB
200 m
100 m
Dev Workspace Operator Catalog
registry-server
該当なし
50 MiB
該当なし
10 m
Dev Workspace Webhook Server
devworkspace-webhook-server
webhook-server
300 MiB
20 MiB
200 m
100 m
Dev Workspace Webhook Server
devworkspace-webhook-server
kube-rbac-proxy
該当なし
該当なし
該当なし
該当なし
合計
9.5 GiB
1.6 GiB
7.4
2.31
-
第2章 Dev Spaces のインストール
このセクションでは、Red Hat OpenShift Dev Spaces をインストールする手順を説明します。
OpenShift Dev Spaces のインスタンスは、クラスターごとに 1 つだけデプロイできます。
2.1. dsc 管理ツールのインストール
Red Hat OpenShift Dev Spaces コマンドライン管理ツールである dsc
は、Microsoft Windows、Apple MacOS、および Linux にインストールできます。dsc
を使用すると、サーバーの起動、停止、更新、削除など、OpenShift Dev Spaces サーバーの操作を実行できます。
前提条件
Linux または macOS の場合:
注記Windows に
dsc
をインストールする場合は、以下のページを参照してください。
手順
-
https://developers.redhat.com/products/openshift-dev-spaces/download から
$HOME
などのディレクトリーにアーカイブをダウンロードします。 -
アーカイブで
tar xvzf
を実行して、/dsc
ディレクトリーを展開します。 -
展開した
/dsc/bin
サブディレクトリーを$PATH
に追加します。
検証
dsc
を実行して、その情報を表示します。$ dsc
関連情報
2.2. CLI を使用して OpenShift に Dev Spaces をインストールする
OpenShift Dev Spaces を OpenShift にインストールできます。
前提条件
- OpenShift Container Platform
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。 -
dsc
。「dsc 管理ツールのインストール」 を参照してください。
手順
オプション: この OpenShift クラスターに OpenShift Dev Spaces をデプロイした場合は、以前の OpenShift Dev Spaces インスタンスが削除されていることを確認してください。
$ dsc server:delete
OpenShift Dev Spaces インスタンスを作成します。
$ dsc server:deploy --platform openshift
検証手順
OpenShift Dev Spaces インスタンスのステータスを確認します。
$ dsc server:status
OpenShift Dev Spaces クラスターインスタンスに移動します。
$ dsc dashboard:open
2.3. Web コンソールを使用して OpenShift に Dev Spaces をインストールする
このセクションでは、OpenShift Web コンソールを使用して OpenShift Dev Spaces をインストールする方法について説明します。代わりに 「CLI を使用して OpenShift に Dev Spaces をインストールする」 を検討してください。
前提条件
- クラスター管理者による OpenShift Web コンソールセッション。Accessing the web console を参照してください。
手順
オプション: この OpenShift クラスターに OpenShift Dev Spaces をデプロイした場合は、以前の OpenShift Dev Spaces インスタンスが削除されていることを確認してください。
$ dsc server:delete
- Red Hat OpenShift Dev Spaces Operator をインストールします。Installing from OperatorHub using the web console を参照してください。
次のように、OpenShift で
openshift-devspaces
プロジェクトを作成します。oc create namespace openshift-devspaces
- OpenShift Web コンソールの Administrator ビューで、 → → → → に移動します。
-
YAML view で、
namespace: openshift-operators
をnamespace: openshift-devspaces
に置き換えます。 - Create を選択します。Creating applications from installed Operators を参照してください。
検証
- OpenShift Dev Spaces インスタンスが正しくインストールされていることを確認するには、Operator detail ページの Dev Spaces Cluster タブに移動します。Red Hat OpenShift Dev Spaces インスタンス仕様 ページには、Red Hat OpenShift Dev Spaces インスタンスとそのステータスのリストが表示されます。
-
devspaces
CheCluster
をクリックして、Details タブに移動します。 以下のフィールドの内容を参照してください。
-
Message フィールドにはエラーメッセージが含まれます。予想される内容は
None
です。 - Red Hat OpenShift Dev Spaces URL フィールドには、Red Hat OpenShift Dev Spaces インスタンスの URL が含まれます。デプロイメントが正常に終了すると、URL が表示されます。
-
Message フィールドにはエラーメッセージが含まれます。予想される内容は
- Resources タブに移動します。OpenShift Dev Spaces デプロイメントに割り当てられたリソースの一覧とそのステータスを表示します。
2.4. 制限された環境での Dev Spaces のインストール
制限されたネットワークで動作する OpenShift クラスターでは、パブリックリソースは利用できません。
ただし、OpenShift Dev Spaces をデプロイしてワークスペースを実行するには、以下のパブリックリソースが必要です。
- Operator カタログ
- コンテナーイメージ
- サンプルプロジェクト
これらのリソースを使用可能にするには、OpenShift クラスターからアクセス可能なレジストリー内のそれらのコピーに置き換えます。
前提条件
- OpenShift クラスターに、少なくとも 64 GB のディスクスペースがある。
- OpenShift クラスターは制限されたネットワーク上で動作する準備ができており、OpenShift コントロールプレーンはパブリックインターネットにアクセスできる。非接続インストールのミラーリングについて、および ネットワークが制限された環境での Operator Lifecycle Manager の使用 を参照してください。
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。 -
registry.redhat.io
Red Hat エコシステムカタログへのアクティブなoc
レジストリーセッション。Red Hat Container Registry authentication を参照してください。
-
opm
。Installing theopm
CLI を参照してください。 -
jq
。Downloadingjq
を参照してください。 -
podman
。Installing Podman を参照してください。 -
<my_registry> レジストリーへの管理アクセス権を持つアクティブな
skopeo
セッション。Installing Skopeo、Authenticating to a registry、および Mirroring images for a disconnected installation を参照してください。 -
OpenShift Dev Spaces バージョン 3.3 の
dsc
。「dsc 管理ツールのインストール」を参照してください。
手順
ミラーリングスクリプトをダウンロードして実行し、カスタム Operator カタログをインストールし、関連するイメージをミラーリングします (prepare-restricted-environment.sh)。
$ bash prepare-restricted-environment.sh \ --ocp_ver "4.11" \ --devworkspace_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \ --devworkspace_operator_version "v0.15.2" \ --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \ --prod_operator_package_name "devspaces-operator" \ --prod_operator_version "v3.3.0" \ --my_registry "<my_registry>" \ --my_catalog "<my_catalog>"
前の手順で
で che-operator-cr-patch.yaml
に指定した設定で OpenShift Dev Spaces をインストールします。$ dsc server:deploy --platform=openshift \ --che-operator-cr-patch-yaml=che-operator-cr-patch.yaml
- OpenShift Dev Spaces 名前空間からユーザープロジェクト内のすべての Pod への受信トラフィックを許可します。「ネットワークポリシーの設定」 を参照してください。
第3章 Dev Spaces の設定
このセクションでは、Red Hat OpenShift Dev Spaces の設定方法とオプションについて説明します。
3.1. CheCluster
カスタムリソースについて
OpenShift Dev Spaces のデフォルトデプロイメントは、Red Hat OpenShift Dev Spaces Operator で定義される CheCluster
カスタムリソースパラメーターで設定されます。
CheCluster
カスタムリソースは Kubernetes オブジェクトです。CheCluster
カスタムリソース YAML ファイルを編集して設定できます。このファイルには、各コンポーネントを設定するためのセクションが含まれています: devWorkspace
、cheServer
、pluginRegistry
、devfileRegistry
、database
、dashboard
および imagePuller
。
Red Hat OpenShift Dev Spaces Operator は、CheCluster
カスタムリソースを OpenShift Dev Spaces インストールの各コンポーネントで使用できる Config Map に変換します。
OpenShift プラットフォームは、設定を各コンポーネントに適用し、必要な Pod を作成します。OpenShift がコンポーネントの設定で変更を検知すると、Pod を適宜再起動します。
例3.1 OpenShift Dev Spaces サーバーコンポーネントの主なプロパティーの設定
-
cheServer
コンポーネントセクションで適切な変更を加えたCheCluster
カスタムリソース YAML ファイルを適用します。 -
Operator は、
che
ConfigMap
を生成します。 -
OpenShift は
ConfigMap
の変更を検出し、OpenShift Dev Spaces Pod の再起動をトリガーします。
3.1.1. dsc を使用したインストール時に CheCluster
カスタムリソースの設定
適切な設定で OpenShift Dev Space をデプロイするには、OpenShift Dev Space のインストール時に CheCluster
カスタムリソース YAML ファイルを編集します。それ以外の場合は、OpenShift Dev Spaces デプロイメントは Operator で設定されたデフォルト設定パラメーターを使用します。
前提条件
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。 -
dsc
。「dsc 管理ツールのインストール」 を参照してください。
手順
設定する
CheCluster
カスタムリソースのサブセットを含むche-operator-cr-patch.yaml
YAML ファイルを作成します。spec: <component>: <property_to_configure>: <value>
OpenShift Dev Spaces をデプロイし、
che-operator-cr-patch.yaml
ファイルで説明されている変更を適用します。$ dsc server:deploy \ --che-operator-cr-patch-yaml=che-operator-cr-patch.yaml \ --platform <chosen_platform>
検証
設定されたプロパティーの値を確認します。
$ oc get configmap che -o jsonpath='{.data.<configured_property>}' \ -n openshift-devspaces
3.1.2. CLI を使用して CheCluster カスタムリソースの設定
OpenShift Dev Spaces の実行中のインスタンスを設定するには、CheCluster
カスタムリソース YAML ファイルを編集します。
前提条件
- OpenShift 上の OpenShift Dev Spaces のインスタンス。
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。
手順
クラスター上の CheCluster カスタムリソースを編集します。
$ oc edit checluster/devspaces -n openshift-devspaces
- ファイルを保存して閉じ、変更を適用します。
検証
設定されたプロパティーの値を確認します。
$ oc get configmap che -o jsonpath='{.data.<configured_property>}' \ -n openshift-devspaces
3.1.3. CheCluster
カスタムリソースフィールドの参照
このセクションでは、CheCluster
カスタムリソースのカスタマイズに使用できるすべてのフィールドについて説明します。
-
例3.2「最小の
CheCluster
カスタムリソースの例。」 - 表3.1「開発環境の設定オプション。」
- 表3.4「OpenShift Dev Spaces コンポーネントの設定。」
- 表3.5「DevWorkspace Operator コンポーネントの設定。」
- 表3.6「OpenShift Dev Spaces サーバーコンポーネントに関連する一般的な設定。」
- 表3.7「OpenShift Dev Spaces インストールで使用されるプラグインレジストリーコンポーネントに関連する設定。」
- 表3.8「OpenShift Dev Spaces インストールで使用される Devfile レジストリーコンポーネントに関連する設定。」
- 表3.9「OpenShift Dev Spaces インストールで使用されるデータベースコンポーネントに関連する設定。」
- 表3.10「OpenShift Dev Spaces インストールで使用される Dashboard コンポーネントに関連する設定。」
- 表3.11「Kubernetes Image Puller コンポーネントの設定。」
- 表3.12「OpenShift Dev Spaces サーバーメトリクスコンポーネントの設定。」
- 表3.13「ネットワーク、OpenShift Dev Spaces 認証、および TLS 設定。」
- 表3.14「OpenShift Dev Spaces イメージを格納する代替レジストリーの設定。」
-
表3.15「
CheCluster
カスタムリソースのstatus
が OpenShift Dev Spaces インストールの観察される状態を定義します。」
例3.2 最小の CheCluster
カスタムリソースの例。
apiVersion: org.eclipse.che/v2 kind: CheCluster metadata: name: devspaces spec: devEnvironments: defaultNamespace: template: '<username>-che' storage: pvcStrategy: 'common' components: database: externalDb: false metrics: enable: true
プロパティー | 説明 |
---|---|
containerBuildConfiguration | コンテナーのビルド設定。 |
defaultComponents | DevWorkspaces に適用されるデフォルトコンポーネント。デフォルトコンポーネントは、Devfile にコンポーネントが含まれていない場合に使用します。 |
defaultEditor |
一緒に作成するワークスペースのデフォルトエディター。プラグイン ID または URI を指定できます。プラグイン ID には |
defaultNamespace | ユーザーのデフォルトの名前空間。 |
defaultPlugins | DevWorkspaces に適用されるデフォルトのプラグイン。 |
disableContainerBuildCapabilities | コンテナービルド機能を無効にします。 |
nodeSelector | ノードセレクターは、ワークスペース Pod を実行できるノードを制限します。 |
secondsOfInactivityBeforeIdling | ワークスペースのアイドルタイムアウト (秒単位)。このタイムアウトは、アクティビティーがない場合にワークスペースがアイドル状態になるまでの期間です。非アクティブによるワークスペースのアイドリングを無効にするには、この値を -1 に設定します。 |
secondsOfRunBeforeIdling | ワークスペースのタイムアウトを秒単位で実行します。このタイムアウトは、ワークスペースが実行される最大期間です。ワークスペースの実行タイムアウトを無効にするには、この値を -1 に設定します。 |
storage | ワークスペースの永続ストレージ。 |
tolerations | ワークスペース Pod の Pod 許容範囲によって、ワークスペース Pod を実行できる場所が制限されます。 |
trustedCerts | 信頼できる証明書の設定。 |
プロパティー | 説明 |
---|---|
autoProvision | ユーザー名前空間の自動作成を許可するかどうかを示します。false に設定すると、クラスター管理者がユーザー namespace を事前に作成する必要があります。 |
template |
ユーザー namespace を事前に作成しない場合には、このフィールドは最初のワークスペースの起動時に作成される Kubernetes namespace を定義します。che-workspace-<username> など、 |
プロパティー | 説明 |
---|---|
perUserStrategyPvcConfig |
|
perWorkspaceStrategyPvcConfig |
|
pvcStrategy |
OpenShift Dev Spaces サーバーの永続ボリューム要求戦略。サポートされているストラテジー: |
プロパティー | 説明 |
---|---|
cheServer | OpenShift Dev Spaces サーバーに関連する一般的な設定。 |
dashboard | OpenShift Dev Spaces インストールで使用されるダッシュボードに関連する設定設定。 |
database | OpenShift Dev Spaces インストールで使用されるデータベースに関連する設定設定。 |
devWorkspace | DevWorkspace Operator の設定。 |
devfileRegistry | OpenShift Dev Spaces インストールで使用される Devfile レジストリーに関連する設定。 |
imagePuller | Kubernetes Image Puller の設定。 |
metrics | OpenShift Dev Spaces サーバーのメトリック設定。 |
pluginRegistry | OpenShift Dev Spaces インストールで使用されるプラグインレジストリーに関連する設定設定。 |
プロパティー | 説明 |
---|---|
runningLimit | ユーザーごとの実行中のワークスペースの最大数。 |
プロパティー | 説明 |
---|---|
clusterRoles |
OpenShift Dev Spaces ServiceAccount に割り当てられた ClusterRoles。デフォルトのロールは、 |
debug | OpenShift Dev Spaces サーバーのデバッグモードを有効にします。 |
deployment | デプロイメントオーバーライドオプション。 |
extraProperties |
|
logLevel |
OpenShift Dev Spaces サーバーのログレベル: |
proxy | Kubernetes クラスターのプロキシーサーバー設定。OpenShift クラスターに追加の設定は必要ありません。これらの設定を OpenShift クラスターに指定することで、OpenShift プロキシー設定をオーバーライドします。 |
プロパティー | 説明 |
---|---|
deployment | デプロイメントオーバーライドオプション。 |
disableInternalRegistry | 内部プラグインレジストリーを無効にします。 |
externalPluginRegistries | 外部プラグインレジストリー。 |
openVSXURL | VSX レジストリー URL を開きます。省略した場合は、埋め込みインスタンスが使用されます。 |
プロパティー | 説明 |
---|---|
deployment | デプロイメントオーバーライドオプション。 |
disableInternalRegistry | 内部 devfile レジストリーを無効にします。 |
externalDevfileRegistries | サンプルのすぐに使用できる devfile を提供する外部 devfile レジストリー。 |
プロパティー | 説明 |
---|---|
credentialsSecretName |
OpenShift Dev Spaces サーバーがデータベースへの接続に使用する PostgreSQL |
deployment | デプロイメントオーバーライドオプション。 |
externalDb |
Operator に対して専用のデータベースをデプロイするよう指示します。デフォルトでは、専用の PostgreSQL データベースが OpenShift Dev Spaces インストールの一部としてデプロイされます。 |
postgresDb | OpenShift Dev Spaces サーバーがデータベースへの接続に使用する PostgreSQL データベース名。 |
postgresHostName |
OpenShift Dev Spaces サーバーが接続する PostgreSQL データベースのホスト名。外部データベースを使用する場合、この値のみを上書きします。 |
postgresPort |
OpenShift Dev Spaces サーバーが接続する PostgreSQL データベースポート。外部データベースを使用する場合、この値のみを上書きします。 |
pvc | PostgreSQL データベースの PVC 設定。 |
プロパティー | 説明 |
---|---|
deployment | デプロイメントオーバーライドオプション。 |
headerMessage | ダッシュボードのヘッダーメッセージ。 |
プロパティー | 説明 |
---|---|
enable |
コミュニティーでサポートされている Kubernetes Image Puller Operator をインストールして設定します。仕様を指定せずに値を |
spec | CheCluster で Image Puller を設定するための Kubernetes Image Puller 仕様。 |
プロパティー | 説明 |
---|---|
enable |
OpenShift Dev Spaces サーバーエンドポイントの |
プロパティー | 説明 |
---|---|
annotations | Ingress (OpenShift プラットフォームのルート) に設定されるアノテーションを定義します。kubernetes プラットフォームのデフォルト: kubernetes.io/ingress.class: \nginx\ nginx.ingress.kubernetes.io/proxy-read-timeout: \3600\, nginx.ingress.kubernetes.io/proxy-connect-timeout: \3600\, nginx.ingress.kubernetes.io/ssl-redirect: \true\ |
auth | 認証設定 |
domain | OpenShift クラスターの場合、Operator はドメインを使用してルートのホスト名を生成します。生成されたホスト名は、che-<devspaces-namespace>.<domain> のパターンに従います。<devspaces-namespace> は、CheCluster CRD が作成される名前空間です。ラベルと組み合わせて、デフォルト以外の Ingress コントローラーによって提供されるルートを作成します。Kubernetes クラスターの場合、グローバル Ingress ドメインが含まれます。デフォルト値はありません。指定する必要があります。 |
hostname | インストールされた OpenShift Dev Spaces サーバーのパブリックホスト名。 |
labels | Ingress (OpenShift プラットフォームのルート) に設定されるラベルを定義します。 |
tlsSecretName |
Ingress TLS ターミネーションのセットアップに使用されるシークレットの名前。フィールドが空の文字列の場合、デフォルトのクラスター証明書が使用されます。シークレットには、 |
プロパティー | 説明 |
---|---|
hostname | イメージのプルに使用する別のコンテナーレジストリーの任意のホスト名または URL。この値は、OpenShift Dev Spaces デプロイメントに含まれるすべてのデフォルトのコンテナーイメージで定義されたコンテナーレジストリーのホスト名をオーバーライドします。これは、制限された環境で OpenShift Dev Spaces をインストールする場合にとくに役立ちます。 |
organization | イメージのプルに使用する別のレジストリーのオプションのリポジトリー名。この値は、OpenShift Dev Spaces デプロイメントに含まれるすべてのデフォルトのコンテナーイメージで定義されたコンテナーレジストリー組織をオーバーライドします。これは、制限された環境で OpenShift Dev Spaces をインストールする場合にとくに役立ちます。 |
プロパティー | 説明 |
---|---|
chePhase | OpenShift Dev Spaces デプロイメントの現在のフェーズを指定します。 |
cheURL | OpenShift Dev Spaces サーバーのパブリック URL。 |
cheVersion | 現在インストールされている OpenShift Dev Spaces のバージョン。 |
devfileRegistryURL | 内部 devfile レジストリーの公開 URL。 |
gatewayPhase | ゲートウェイデプロイメントの現在のフェーズを指定します。 |
message | OpenShift Dev Spaces デプロイメントが現在のフェーズにある理由の詳細を示す、人間が判読できるメッセージ。 |
pluginRegistryURL | 内部プラグインレジストリーの公開 URL。 |
postgresVersion | 使用中のイメージの PostgreSQL バージョン。 |
reason | OpenShift Dev Spaces デプロイメントが現在のフェーズにある理由の詳細を示す簡単な CamelCase メッセージ。 |
workspaceBaseDomain | 解決されたワークスペースベースドメイン。これは、仕様で明示的に定義された同じ名前のプロパティーのコピーか、仕様で定義されておらず、OpenShift で実行している場合は、ルートの自動的に解決されたベースドメインです。 |
3.2. プロジェクトの設定
OpenShift Dev Spaces は、ユーザーごとに、プロジェクト内のワークスペースを分離します。OpenShift Dev Spaces は、ラベルとアノテーションの存在によってユーザープロジェクトを識別します。ワークスペースを起動する際に必要なプロジェクトが存在しない場合、OpenShift Dev Spaces はテンプレート名を使用してプロジェクトを作成します。
OpenShift Dev Spaces の動作は、次の方法で変更できます。
3.2.1. プロジェクト名の設定
OpenShift Dev Spaces がワークスペース起動時に必要なプロジェクトを作成するために使用するプロジェクト名テンプレートを設定できます。
有効なプロジェクト名テンプレートは、次の規則に従います。
-
<username>
または<userid>
プレースホルダーは必須です。 -
ユーザー名と ID に無効な文字を含めることはできません。ユーザー名または ID のフォーマットが OpenShift オブジェクトの命名規則と互換性がない場合、OpenShift Dev Spaces は、互換性のない文字を
-
記号に置き換えてユーザー名や ID を有効な名前に変更します。 -
OpenShift Dev Spaces は、
<userid>
プレースホルダーを 14 文字の文字列と判断し、ID が衝突しないようにランダムな 6 文字の接尾辞を追加します。結果は、再利用のためにユーザー設定に保存されます。 - Kubernetes は、プロジェクト名の長さを 63 文字に制限しています。
- OpenShift は、長さをさらに 49 文字に制限しています。
手順
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: devEnvironments: defaultNamespace: template: <workspace_namespace_template_>
例3.3 ユーザーワークスペースプロジェクト名テンプレートの例
ユーザーワークスペースプロジェクト名テンプレート 結果のプロジェクト例 <username>-devspaces
(デフォルト)user1-devspaces
<userid>-namespace
cge1egvsb2nhba-namespace-ul1411
<userid>-aka-<username>-namespace
cgezegvsb2nhba-aka-user1-namespace-6m2w2b
3.2.2. プロジェクトの事前プロビジョニング
自動プロビジョニングに依存するのではなく、ワークスペースプロジェクトを事前にプロビジョニングできます。ユーザーごとに手順を繰り返します。
手順
次のラベルとアノテーションを使用して、<username> ユーザーの <project_name> プロジェクトを作成します。
kind: Namespace apiVersion: v1 metadata: name: <project_name> 1 labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-namespace annotations: che.eclipse.org/username: <username>
- 1
- 選択したプロジェクト名を使用します。
3.3. サーバーコンポーネントの設定
3.3.1. シークレットまたは ConfigMap をファイルまたは環境変数としての Red Hat OpenShift Dev Spaces コンテナーへのマウント
シークレットは、以下のような機密データを格納する OpenShift オブジェクトです。
- ユーザー名
- パスワード
- 認証トークン
(暗号化された形式)。
ユーザーは、機密データまたは OpenShift Dev Spaces で管理されるコンテナーの設定が含まれる ConfigMap を以下のようにマウントできます。
- ファイル
- 環境変数
マウントプロセスでは、標準の OpenShift マウントメカニズムを使用しますが、追加のアノテーションとラベル付けが必要です。
3.3.1.1. シークレットまたは ConfigMap を OpenShift Dev Spaces コンテナーにファイルとしてマウントする
前提条件
- Red Hat OpenShift Dev Spaces の実行中のインスタンス
手順
OpenShift Dev Spaces がデプロイされている OpenShift プロジェクトに新しい OpenShift シークレットまたは ConfigMap を作成します。作成される予定のオブジェクトのラベルは、ラベルのセットと一致する必要があります。
-
app.kubernetes.io/part-of: che.eclipse.org
-
app.kubernetes.io/component: <DEPLOYMENT_NAME>-<OBJECT_KIND>
<DEPLOYMENT_NAME>
には、以下のデプロイメントのいずれかを使用します。-
postgres
-
keycloak
-
devfile-registry
-
plugin-registry
devspaces
および
-
<jasper_KIND>
は以下のいずれかになります。secret
または
-
configmap
-
例3.4 以下に例を示します。
apiVersion: v1 kind: Secret metadata: name: custom-settings labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: devspaces-secret ...
または
apiVersion: v1 kind: ConfigMap metadata: name: custom-settings labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: devspaces-configmap ...
アノテーションは、指定されるオブジェクトがファイルとしてマウントされていることを示す必要があります。
アノテーション値を設定します。
-
che.eclipse.org/mount-as: file
- オブジェクトをファイルとしてマウントするように指定します。 -
che.eclipse.org/mount-path: <TARGET_PATH>
- 必要なマウントパスを指定します。
-
例3.5 以下に例を示します。
apiVersion: v1 kind: Secret metadata: name: custom-data annotations: che.eclipse.org/mount-as: file che.eclipse.org/mount-path: /data labels: ...
または
apiVersion: v1 kind: ConfigMap metadata: name: custom-data annotations: che.eclipse.org/mount-as: file che.eclipse.org/mount-path: /data labels: ...
OpenShift オブジェクトには複数の項目が含まれる可能性があり、その名前はコンテナーにマウントされる必要なファイル名と一致する必要があります。
例3.6 以下に例を示します。
apiVersion: v1
kind: Secret
metadata:
name: custom-data
labels:
app.kubernetes.io/part-of: che.eclipse.org
app.kubernetes.io/component: devspaces-secret
annotations:
che.eclipse.org/mount-as: file
che.eclipse.org/mount-path: /data
data:
ca.crt: <base64 encoded data content here>
または
apiVersion: v1
kind: ConfigMap
metadata:
name: custom-data
labels:
app.kubernetes.io/part-of: che.eclipse.org
app.kubernetes.io/component: devspaces-configmap
annotations:
che.eclipse.org/mount-as: file
che.eclipse.org/mount-path: /data
data:
ca.crt: <data content here>
これにより、ca.crt
という名前のファイルが OpenShift Dev Spaces コンテナーの /data
パスにマウントされます。
OpenShift Dev Spaces コンテナーに変更を加えるには、オブジェクトを完全に再作成します。
3.3.1.2. シークレットまたは ConfigMap を環境変数として OpenShift Dev Spaces コンテナーにマウントする
前提条件
- Red Hat OpenShift Dev Spaces の実行中のインスタンス
手順
OpenShift Dev Spaces がデプロイされている OpenShift プロジェクトに新しい OpenShift シークレットまたは ConfigMap を作成します。作成される予定のオブジェクトのラベルは、ラベルのセットと一致する必要があります。
-
app.kubernetes.io/part-of: che.eclipse.org
-
app.kubernetes.io/component: <DEPLOYMENT_NAME>-<OBJECT_KIND>
<DEPLOYMENT_NAME>
には、以下のデプロイメントのいずれかを使用します。-
postgres
-
keycloak
-
devfile-registry
-
plugin-registry
devspaces
および
-
<jasper_KIND>
は以下のいずれかになります。secret
または
-
configmap
-
例3.7 以下に例を示します。
apiVersion: v1 kind: Secret metadata: name: custom-settings labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: devspaces-secret ...
または
apiVersion: v1 kind: ConfigMap metadata: name: custom-settings labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: devspaces-configmap ...
アノテーションは、指定されるオブジェクトが環境変数としてマウントされていることを示す必要があります。
アノテーション値を設定します。
-
che.eclipse.org/mount-as: env
-: オブジェクトを環境変数としてマウントするように指定します。 -
che.eclipse.org/env-name: <FOOO_ENV>
: オブジェクトキー値のマウントに必要な環境変数名を指定します。
-
例3.8 以下に例を示します。
apiVersion: v1 kind: Secret metadata: name: custom-settings annotations: che.eclipse.org/env-name: FOO_ENV che.eclipse.org/mount-as: env labels: ... data: mykey: myvalue
または
apiVersion: v1 kind: ConfigMap metadata: name: custom-settings annotations: che.eclipse.org/env-name: FOO_ENV che.eclipse.org/mount-as: env labels: ... data: mykey: myvalue
これにより、2 つの環境変数が
-
FOO_ENV
-
myvalue
OpenShift Dev Spaces コンテナーにプロビジョニングされている。
オブジェクトに複数のデータ項目がある場合、環境変数の名前は以下のようにそれぞれのデータキーについて指定される必要があります。
例3.9 以下に例を示します。
apiVersion: v1 kind: Secret metadata: name: custom-settings annotations: che.eclipse.org/mount-as: env che.eclipse.org/mykey_env-name: FOO_ENV che.eclipse.org/otherkey_env-name: OTHER_ENV labels: ... data: mykey: __<base64 encoded data content here>__ otherkey: __<base64 encoded data content here>__
または
apiVersion: v1 kind: ConfigMap metadata: name: custom-settings annotations: che.eclipse.org/mount-as: env che.eclipse.org/mykey_env-name: FOO_ENV che.eclipse.org/otherkey_env-name: OTHER_ENV labels: ... data: mykey: __<data content here>__ otherkey: __<data content here>__
これにより、2 つの環境変数が
-
FOO_ENV
-
OTHER_ENV
OpenShift Dev Spaces コンテナーにプロビジョニングされている。
OpenShift シークレットのアノテーション名の最大長さは 63 文字です。ここで、9 文字は、/
で終わる接頭辞用に予約されます。これは、オブジェクトに使用できるキーの最大長さの制限として機能します。
OpenShift Dev Spaces コンテナーに変更を加えるには、オブジェクトを完全に再作成します。
3.3.2. Dev Spaces サーバーの高度な設定オプション
以下のセクションでは、OpenShift Dev Spaces サーバーコンポーネントの詳細なデプロイメントおよび設定方法を説明します。
3.3.2.1. OpenShift Dev Spaces サーバーの詳細設定について
以下のセクションでは、OpenShift Dev Spaces サーバーコンポーネントの詳細設定方法について説明します。
詳細設定は以下を実行するために必要です。
-
標準の
CheCluster
カスタムリソースフィールドから Operator によって自動的に生成されない環境変数を追加します。 -
標準の
CheCluster
カスタムリソースフィールドから Operator によって自動的に生成されるプロパティーを上書きします。
CheCluster
Custom Resource server
設定の一部である customCheProperties
フィールドには、OpenShift Dev Spaces サーバーコンポーネントに適用する追加の環境変数のマップが含まれます。
例3.10 ワークスペースのデフォルトのメモリー制限の上書き
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。apiVersion: org.eclipse.che/v2 kind: CheCluster spec: components: cheServer: extraProperties: CHE_LOGS_APPENDERS_IMPL: json
OpenShift Dev Spaces Operator の以前のバージョンには、このロールを果たすために custom
という名前の ConfigMap がありました。OpenShift Dev Spaces オペレーターが custom
という名前の configMap
を見つけると、それに含まれるデータを customCheProperties
フィールドに追加し、OpenShift Dev Spaces を再デプロイして、カスタム
configMap
を削除します。
3.4. ワークスペースのグローバル設定
このセクションでは、管理者がワークスペースをグローバルに設定する方法について説明します。
3.4.1. ユーザーが保持できるワークスペースの数を制限する
デフォルトでは、ユーザーはダッシュボードに無制限の数のワークスペースを保持できますが、この数を制限してクラスターの需要を減らすことができます。
この設定は、CheCluster
カスタムリソースの一部です。
spec: components: cheServer: extraProperties: CHE_LIMITS_USER_WORKSPACES_COUNT: "<kept_workspaces_limit>" 1
- 1
- ユーザーごとのワークスペースの最大数を設定します。デフォルト値
-1
では、ユーザーは無制限の数のワークスペースを保持できます。ユーザーごとのワークスペースの最大数を設定するには、正の整数を使用します。
手順
OpenShift Dev Spaces namespace の名前を取得します。デフォルトは
openshift-devspaces
です。$ oc get checluster --all-namespaces \ -o=jsonpath="{.items[*].metadata.namespace}"
CHE_LIMITS_USER_WORKSPACES_COUNT
を設定します。$ oc patch checluster/devspaces -n openshift-devspaces \1 --type='merge' -p \ '{"spec":{"components":{"cheServer":{"extraProperties":{"CHE_LIMITS_USER_WORKSPACES_COUNT": "<kept_workspaces_limit>"}}}}}' 2
3.4.2. ユーザーが複数のワークスペースを同時に実行できるようにする
デフォルトでは、ユーザーは一度に 1 つのワークスペースしか実行できません。ユーザーが複数のワークスペースを同時に実行できるようにすることができます。
デフォルトのストレージ方法を使用している際、マルチノードクラスター内のノード全体に Pod が分散されている場合は、ワークスペースを同時に実行すると問題が発生する可能性があります。ユーザーごとの common
ストレージストラテジーから per-workspace
ストレージストラテジーに切り替えるか、ephemeral
ストレージタイプを使用すると、これらの問題を回避または解決できます。
この設定は、CheCluster
カスタムリソースの一部です。
spec: components: devWorkspace: runningLimit: "<running_workspaces_limit>" 1
- 1
- ユーザーごとに同時に実行されるワークスペースの最大数を設定します。デフォルト値は
1
です。
手順
OpenShift Dev Spaces namespace の名前を取得します。デフォルトは
openshift-devspaces
です。$ oc get checluster --all-namespaces \ -o=jsonpath="{.items[*].metadata.namespace}"
runningLimit
を設定します。$ oc patch checluster/devspaces -n openshift-devspaces \1 --type='merge' -p \ '{"spec":{"components":{"devWorkspace":{"runningLimit": "<running_workspaces_limit>"}}}}' 2
3.4.3. 自己署名証明書を使用した Git
自己署名証明書を使用する Git プロバイダーでの操作をサポートするように OpenShift Dev Spaces を設定できます。
前提条件
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。 - Git バージョン 2 以降
手順
Git サーバーの詳細情報を使用して新規の configMap を作成します。
$ oc create configmap che-git-self-signed-cert \ --from-file=ca.crt=<path_to_certificate> \ 1 --from-literal=githost=<host:port> -n openshift-devspaces 2
注記-
githost
を指定しないと、指定された証明書がすべての HTTPS リポジトリーに使用されます。 -
証明書ファイルは、通常、以下のような Base64 ASCII ファイルとして保存されます。
.pem
,.crt
,.ca-bundle
.また、これらはバイナリーデータとしてエンコードすることもできます (例:.cer
)。証明書ファイルを保持するすべてのSecrets
は、バイナリーデータ証明書ではなく、Base64 ASCII 証明書を使用する必要があります。
-
必要なラベルを ConfigMap に追加します。
$ oc label configmap che-git-self-signed-cert \ app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
Git リポジトリーに自己署名証明書を使用するように OpenShift Dev Spaces オペランドを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。
spec: devEnvironments: trustedCerts: gitTrustedCertsConfigMapName: che-git-self-signed-cert
検証手順
新規ワークスペースを作成および開始します。ワークスペースによって使用されるすべてのコンテナーは、自己署名証明書のあるファイルを含む特殊なボリュームをマウントします。コンテナーの
/etc/gitconfig
ファイルには、Git サーバーホスト (その URL) とhttp
セクションの証明書へのパスについての情報が含まれます (git-config に関する Git ドキュメントを参照してください)。例3.11
/etc/gitconfig
ファイルの内容[http "https://10.33.177.118:3000"] sslCAInfo = /etc/config/che-git-tls-creds/certificate
3.4.4. ワークスペース nodeSelector の設定
このセクションでは、OpenShift Dev Spaces ワークスペースの Pod に nodeSelector
を設定する方法を説明します。
手順
OpenShift Dev Spaces は、CHE_WORKSPACE_POD_NODE__SELECTOR
環境変数を使用して nodeSelector
を設定します。この変数には、nodeSelector ルールを形成するためにコンマ区切りの key=value
ペアのセットが含まれるか、またはこれを無効にする NULL
が含まれる場合があります。
CHE_WORKSPACE_POD_NODE__SELECTOR=disktype=ssd,cpu=xlarge,[key=value]
nodeSelector
は、OpenShift Dev Spaces のインストール時に設定する必要があります。これにより、既存のワークスペース PVC および Pod が異なるゾーンにスケジュールされることによってボリュームのアフィニティーの競合が生じ、既存のワークスペースが実行できなくなることを防ぐことができます。
大規模なマルチゾーンクラスターの異なるゾーンに Pod および PVC がスケジュールされないようにするには、PVC の作成プロセスを調整する追加の StorageClass
オブジェクトを作成します (allowedTopologies
フィールドに注目してください)。
新規に作成された StorageClass
の名前を、CHE_INFRA_KUBERNETES_PVC_STORAGE__CLASS__NAME
環境変数で OpenShift Dev Spaces に指定します。この変数のデフォルトの空の値の場合、OpenShift Dev Spaces に対し、クラスターのデフォルト StorageClass
を使用するように指示します。
3.4.5. VSX レジストリー URL を開く
拡張機能を検索してインストールするために、Visual Studio Code エディターは組み込みの Open VSX レジストリーインスタンスを使用します。組み込みのレジストリーインスタンスではなく、別の Open VSX レジストリーインスタンスを使用するように OpenShift Dev Spaces を設定することもできます。
手順
CheCluster カスタムリソースの
spec.components.pluginRegistry.openVSXURL
フィールドに Open VSX レジストリーインスタンスの URL を設定します。spec: components: # [...] pluginRegistry: openVSXRegistryURL: <your_open_vsx_registy> # [...]
3.5. ワークスペースの起動を迅速化するイメージのキャッシュ
OpenShift Dev Spaces ワークスペースの起動時間のパフォーマンスを改善するには、Image Puller を使用して OpenShift クラスターのイメージの事前プルに使用できる OpenShift Dev Spaces に依存しないコンポーネントを使用します。Image Puller は、関連する OpenShift Dev Spaces ワークスペースイメージを各ノードで事前にプルするように設定できる DaemonSet を作成する追加の OpenShift デプロイメントです。これらのイメージは、OpenShift Dev Spaces ワークスペースの起動時にすでに利用可能なため、ワークスペースの開始時間が改善されています。
Image Puller は、設定用に以下のパラメーターを提供します。
パラメーター | 使用方法 | デフォルト |
---|---|---|
| デーモンセットのヘルスチェック間隔 (時間単位) |
|
| Puller の実行中にキャッシュされる各イメージのメモリー要求。「メモリー設定の定義」を参照してください。 |
|
| Puller の実行中にキャッシュされる各イメージのメモリー制限。「メモリー設定の定義」を参照してください。 |
|
| Puller の実行中にキャッシュされる各イメージのプロセッサー要求 |
|
| Puller の実行中にキャッシュされる各イメージのプロセッサー制限 |
|
| 作成するデーモンセットの名前 |
|
| 作成するデプロイメントの名前 |
|
| 作成するデーモンセットが含まれる OpenShift プロジェクト |
|
|
プルするイメージのセミコロンで区切られた一覧 ( | |
| デーモンセットによって作成される Pod に適用するノードセレクター |
|
| DaemonSet によって作成される Pod に適用されるアフィニティー |
|
|
DeamonSet で作成される Pod に追加する |
|
関連情報
3.5.1. イメージ一覧の定義
Image Puller は、che-machine-exec
などの scratch イメージを含むほとんどのイメージを事前プルできます。ただし、traefik
などの Dockerfile にボリュームをマウントするイメージは、OpenShift 3.11 における事前プルではサポートされません。
手順
-
"https://devspaces-<openshift_deployment_name>.<domain_name>"/plugin-registry/v3/external_images.txt
に移動して、プルに関連するコンテナーイメージのリストを収集します。 -
プル前の一覧からイメージを判別します。ワークスペースの起動時間を短縮するには、
Universal-developer-image
、che-code、che-gateway
などのワークスペース関連のイメージをプルすることを検討してください。
3.5.2. メモリー設定の定義
メモリー要求および制限パラメーターを定義して、コンテナーをプルし、プラットフォームに実行するのに十分なメモリーがあることを確認します。
前提条件
手順
-
CACHING_MEMORY_REQUEST
またはCACHING_MEMORY_LIMIT
の最小値を定義するには、プルする各コンテナーイメージの実行に必要なメモリー容量を考慮してください。 CACHING_MEMORY_REQUEST
またはCACHING_MEMORY_LIMIT
の最大値を定義するには、クラスターのデーモンセット Pod に割り当てられるメモリーの合計を考慮します。(memory limit) * (number of images) * (number of nodes in the cluster)
コンテナーのメモリー制限が
20Mi
の 20 ノードで 5 つのイメージをプルする場合、2000Mi
のメモリーが必要です。
3.5.3. Web コンソールを使用した OpenShift への Image Puller のインストール
OpenShift Web コンソールを使用して、コミュニティーでサポートされている Kubernetes Image Puller Operator を OpenShift にインストールできます。
前提条件
- 「イメージ一覧の定義」
- 「メモリー設定の定義」
- クラスター管理者による OpenShift Web コンソールセッション。Accessing the web console を参照してください。
手順
- コミュニティーでサポートされている Kubernetes Image Puller Operator をインストールします。Installing from OperatorHub using the web console を参照してください。
-
コミュニティーでサポートされている Kubernetes Image Puller Operator から
KubernetesImagePuller
オペランドを作成します。Creating applications from installed Operators を参照してください。
3.5.4. CLI を使用した OpenShift への Image Puller のインストール
OpenShift oc
管理ツールを使用して、OpenShift に Kubernetes Image Puller をインストールできます。
前提条件
- 「イメージ一覧の定義」
- 「メモリー設定の定義」
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。
手順
Image Puller リポジトリーのクローンを作成し、OpenShift テンプレートが含まれるディレクトリーを取得します。
$ git clone https://github.com/che-incubator/kubernetes-image-puller $ cd kubernetes-image-puller/deploy/openshift
以下のパラメーターを使用して、
app.yaml
、configmap.yaml
およびserviceaccount.yaml
OpenShift テンプレートを設定します。表3.17 app.yaml の Image Puller OpenShift テンプレートパラメーター 値 使用方法 デフォルト DEPLOYMENT_NAME
ConfigMap の
DEPLOYMENT_NAME
の値kubernetes-image-puller
IMAGE
kubernetes-image-puller
デプロイメントに使用されるイメージregistry.redhat.io/devspaces/imagepuller-rhel8:3.3
IMAGE_TAG
プルするイメージタグ
latest
SERVICEACCOUNT_NAME
デプロイメントで作成され、使用される ServiceAccount の名前
kubernetes-image-puller
表3.18 configmap.yaml の Image Puller OpenShift テンプレートパラメーター 値 使用方法 デフォルト CACHING_CPU_LIMIT
ConfigMap の
CACHING_CPU_LIMIT
の値.2
CACHING_CPU_REQUEST
ConfigMap の
CACHING_CPU_REQUEST
の値.05
CACHING_INTERVAL_HOURS
ConfigMap の
CACHING_INTERVAL_HOURS
の値"1"
CACHING_MEMORY_LIMIT
ConfigMap の
CACHING_MEMORY_LIMIT
の値"20Mi"
CACHING_MEMORY_REQUEST
ConfigMap の
CACHING_MEMORY_REQUEST
の値"10Mi"
DAEMONSET_NAME
ConfigMap の
DAEMONSET_NAME
の値kubernetes-image-puller
DEPLOYMENT_NAME
ConfigMap の
DEPLOYMENT_NAME
の値kubernetes-image-puller
IMAGES
ConfigMap の
IMAGES
の値"undefined"
NAMESPACE
ConfigMap の
NAMESPACE
の値k8s-image-puller
NODE_SELECTOR
ConfigMap の
NODE_SELECTOR
の値"{}"
表3.19 serviceaccount.yaml の Image Puller OpenShift テンプレートパラメーター 値 使用方法 デフォルト SERVICEACCOUNT_NAME
デプロイメントで作成され、使用される ServiceAccount の名前
kubernetes-image-puller
Image Puller をホストする OpenShift プロジェクトを作成します。
$ oc new-project <k8s-image-puller>
テンプレートを処理してから適用し、Puller をインストールします。
$ oc process -f serviceaccount.yaml | oc apply -f - $ oc process -f configmap.yaml | oc apply -f - $ oc process -f app.yaml | oc apply -f -
検証手順
<kubernetes-image-puller> デプロイメントおよび <kubernetes-image-puller> デーモンセットがあることを確認します。デーモンセットでは、クラスター内の各ノードに Pod が必要です。
$ oc get deployment,daemonset,pod --namespace <k8s-image-puller>
<kubernetes-image-puller>
ConfigMap
の値を確認します。$ oc get configmap <kubernetes-image-puller> --output yaml
3.6. 可観測性の設定
OpenShift Dev Spaces 可観測性機能を設定するには、以下を参照してください。
3.6.1. Che-Theia ワークスペース
3.6.1.1. Telemetry の概要
Telemetry は、操作データの明示的かつ論理的なコレクションです。デフォルトで、Telemetry は Red Hat OpenShift Dev Spaces では利用できませんが、Che-Theia エディターにはプラグインメカニズムを使用し、chectl
コマンドラインツールの使用データをセグメントを使用して収集できる抽象 API があります。このアプローチは、すべての Che-Theia ワークスペースでテレメトリーが有効になっている Eclipse Che hosted by Red Hat サービスで使用されます。
以下では、Red Hat OpenShift Dev Spaces に独自の Telemetry クライアントを作成する方法について説明し、次に Red Hat OpenShift Dev Spaces Woopra Telemetry プラグイン の概要を示します。
3.6.1.2. ユースケース
Red Hat OpenShift Dev Spaces Telemetry API では、以下の追跡が可能です。
- ワークスペース使用の期間
- ファイルの編集、コミット、およびリモートリポジトリーへのプッシュなどのユーザー駆動型アクション
- ワークスペースで使用されるプログラミング言語および devfile
3.6.1.3. 仕組み
Dev Workspace が起動すると、che-theia
コンテナーは、テレメトリーイベントをバックエンドに送信するロールを担うテレメトリープラグインを起動します。$DEVWORKSPACE_TELEMETRY_BACKEND_PORT
環境変数が DevWorkspacePod で設定されている場合、テレメトリープラグインはそのポートでリッスンしているバックエンドにイベントを送信します。バックエンドは、受信したイベントをイベントのバックエンド固有の表現に変換し、設定された分析バックエンド (Segment や Woopra など) に送信します。
3.6.1.4. Che-Theia Telemetry プラグインによってバックエンドに送信されるイベント
イベント | 説明 |
---|---|
WORKSPACE_OPENED | Che-Theia の起動時に送信されます。 |
COMMIT_LOCALLY |
|
PUSH_TO_REMOTE |
|
EDITOR_USED | エディターでファイルが変更されたときに送信されます |
WORKSPACE_INACTIVE
や WORKSPACE_STOPPED
などの他のイベントは、バックエンドプラグイン内で検出できます。
3.6.1.5. Woopra Telemetry プラグイン
Woopra Telemetry プラグイン は、Telemetry を Red Hat OpenShift Dev Spaces インストールから Segment および Woopra に送信するためにビルドされたプラグインです。このプラグインは 、Red Hat によってホストされる Eclipse Che によって使用されますが、Red Hat OpenShift Dev Spaces デプロイメントはこのプラグインを利用できます。有効な Woopra ドメインおよびセグメント書き込みキー以外の依存関係はありません。プラグインである plugin.yaml の devfile v2 には、プラグインに渡すことのできる 4 つの環境変数があります。
-
WOOPRA_DOMAIN
- イベントの送信先となる Woopra ドメイン。 -
SEGMENT_WRITE_KEY
- セグメントおよび Woopra にイベントを送信するための書き込みキー。 -
WOOPRA_DOMAIN_ENDPOINT
- Woopra ドメインを直接渡さない場合、プラグインは Woopra ドメインを返す指定の HTTP エンドポイントからこれを取得します。 -
SEGMENT_WRITE_KEY_ENDPOINT
- セグメント書き込みキーを直接渡さない場合、プラグインはセグメント書き込みキーを返す指定された HTTP エンドポイントからこれを取得します。
Red Hat OpenShift Dev Spaces インストールで Woopra プラグインを有効にするには、以下を実行します。
手順
plugin.yaml
devfile v2 ファイルを、環境変数が正しく設定された HTTP サーバーにデプロイします。CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: devEnvironments: defaultPlugins: - editor: eclipse/che-theia/next 1 plugins: 2 - 'https://your-web-server/plugin.yaml'
3.6.1.6. Telemetry プラグインの作成
本セクションでは、AbstractAnalyticsManager
を拡張し、以下のメソッドを実装する AnalyticsManager
クラスを作成する方法を説明します。
-
isEnabled()
: Telemetry バックエンドが正しく機能しているかどうかを判断します。これは、常にtrue
を返すか、または接続プロパティーがない場合にfalse
を返すなど、より複雑なチェックがあることを意味します。 -
destroy()
: Telemetry バックエンドをシャットダウンする前に実行されるクリーンアップ方法。このメソッドは、WORKSPACE_STOPPED
イベントを送信します。 -
onActivity()
- 特定のユーザーについて一部のアクティビティーが依然として実行されていることを通知します。これは主にWORKSPACE_INACTIVE
イベントを送信するために使用されます。 -
onEvent()
- Telemetry イベントをWORKSPACE_USED
またはWORKSPACE_STARTED
などの Telemetry サーバーに送信します。 -
increaseDuration()
- 短時間に多くのイベントを送信するのではなく、現在のイベントの期間を長くします。
次のセクションでは、以下について説明します。
- Telemetry サーバーを作成してイベントを標準出力にエコーします。
- OpenShift Dev Spaces Telemetry クライアントを拡張して、ユーザーのカスタムバックエンドを実装します。
-
カスタムバックエンドの Dev Workspace プラグインを表す
plugin.yaml
ファイルを作成します。 -
CheCluster
カスタムリソースからworkspacesDefaultPlugins
属性を設定して、カスタムプラグインの場所を OpenShift Dev Spaces に指定します。
3.6.1.6.1. スタートガイド
以下では、OpenShift Dev Spaces Telemetry システムを拡張してカスタムバックエンドと通信するために必要な手順を説明します。
- イベントを受信するサーバープロセスの作成
- イベントをサーバーに送信するバックエンドを作成する OpenShift Dev Spaces ライブラリーの拡張
- コンテナーでの Telemetry バックエンドのパッケージ化およびイメージレジストリーへのデプロイ
- バックエンドのプラグインを追加し、OpenShift Dev Space に Dev Workspaces にプラグインを読み込むよう指示
Telemetry バックエンドの最終的な例については、here を参照してください。
イベントを受信するサーバーの作成
この例は、Telemetry プラグインからイベントを受信し、標準出力に書き込むサーバーを作成する方法を示しています。
実稼働環境のユースケースでは、独自の Telemetry サーバーを作成するのではなく、サードパーティーの Telemetry システム (Segment、Woopra など) との統合を検討してください。この場合、プロバイダーの API を使用してイベントをカスタムバックエンドからシステムに送信します。
以下の Go コードは、ポート 8080
でサーバーを起動し、イベントを標準出力に書き込みます。
例3.12 main.go
package main import ( "io/ioutil" "net/http" "go.uber.org/zap" ) var logger *zap.SugaredLogger func event(w http.ResponseWriter, req *http.Request) { switch req.Method { case "GET": logger.Info("GET /event") case "POST": logger.Info("POST /event") } body, err := req.GetBody() if err != nil { logger.With("err", err).Info("error getting body") return } responseBody, err := ioutil.ReadAll(body) if err != nil { logger.With("error", err).Info("error reading response body") return } logger.With("body", string(responseBody)).Info("got event") } func activity(w http.ResponseWriter, req *http.Request) { switch req.Method { case "GET": logger.Info("GET /activity, doing nothing") case "POST": logger.Info("POST /activity") body, err := req.GetBody() if err != nil { logger.With("error", err).Info("error getting body") return } responseBody, err := ioutil.ReadAll(body) if err != nil { logger.With("error", err).Info("error reading response body") return } logger.With("body", string(responseBody)).Info("got activity") } } func main() { log, _ := zap.NewProduction() logger = log.Sugar() http.HandleFunc("/event", event) http.HandleFunc("/activity", activity) logger.Info("Added Handlers") logger.Info("Starting to serve") http.ListenAndServe(":8080", nil) }
このコードに基づいてコンテナーイメージを作成し、これを OpenShift の openshift-devspaces
プロジェクトでデプロイメントとして公開します。サンプル Telemetry サーバーのコードは Telemetry-server-example で利用できます。Telemetry サーバーをデプロイするには、リポジトリーのクローンを作成し、コンテナーをビルドします。
$ git clone https://github.com/che-incubator/telemetry-server-example $ cd telemetry-server-example $ podman build -t registry/organization/telemetry-server-example:latest . $ podman push registry/organization/telemetry-server-example:latest
manifest_with_ingress.yaml
および manifest_with_route
の両方には、Deployment およびサービスの定義が含まれます。また、前者は Kubernetes Ingress も定義しますが、後者は OpenShift Route を定義します。
マニフェストファイルで、プッシュした image
に一致する image および host
フィールドと、OpenShift クラスターのパブリックホスト名を置き換えます。次に、以下を実行します。
$ kubectl apply -f manifest_with_[ingress|route].yaml -n openshift-devspaces
3.6.1.6.2. バックエンドプロジェクトの作成
開発時に迅速なフィードバックを得るには、Dev Workspace 内で開発を行うことが推奨されます。これにより、クラスターでアプリケーションを実行し、フロントエンドの Telemetry プラグインからイベントを受信できます。
Maven Quarkus プロジェクトのスキャフォールディング:
mvn io.quarkus:quarkus-maven-plugin:2.7.1.Final:create \ -DprojectGroupId=mygroup -DprojectArtifactId=devworkspace-telemetry-example-plugin \ -DprojectVersion=1.0.0-SNAPSHOT
-
src/main/java/mygroup
とsrc/test/java/mygroup
の下にあるファイルを削除します。 -
backend-base
の最新バージョンおよび Maven コーディネートについては、GitHub パッケージ を参照してください。 以下の依存関係を
pom.xml
に追加します。例3.13
pom.xml
<!-- Required --> <dependency> <groupId>org.eclipse.che.incubator.workspace-telemetry</groupId> <artifactId>backend-base</artifactId> <version>LATEST VERSION FROM PREVIOUS STEP</version> </dependency> <!-- Used to make http requests to the telemetry server --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-client</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-client-jackson</artifactId> </dependency>
-
read:packages
パーミッションでパーソナルアクセストークンを作成し、GitHub パッケージ からorg.eclipse.che.incubator.workspace-telemetry:backend-base
依存関係をダウンロードします。 GitHub ユーザー名、個人アクセストークン、
che-incubator
リポジトリーの詳細を~/.m2/settings.xml
ファイルに追加します。例3.14
settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>che-incubator</id> <username>YOUR GITHUB USERNAME</username> <password>YOUR GITHUB TOKEN</password> </server> </servers> <profiles> <profile> <id>github</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>false</enabled></snapshots> </repository> <repository> <id>che-incubator</id> <url>https://maven.pkg.github.com/che-incubator/che-workspace-telemetry-client</url> </repository> </repositories> </profile> </profiles> </settings>
3.6.1.6.3. AnalyticsManager の具体的な実装の作成および特殊なロジックの追加
src/main/java/mygroup
の下に、プロジェクトに 2 つのファイルを作成します。
-
MainConfiguration.java
-AnalyticsManager
に提供される設定が含まれます。 -
AnalyticsManager.java
: Telemetry システム固有のロジックが含まれます。
例3.15 MainConfiguration.java
package org.my.group; import java.util.Optional; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Alternative; import org.eclipse.che.incubator.workspace.telemetry.base.BaseConfiguration; import org.eclipse.microprofile.config.inject.ConfigProperty; @Dependent @Alternative public class MainConfiguration extends BaseConfiguration { @ConfigProperty(name = "welcome.message") 1 Optional<String> welcomeMessage; 2 }
- 1
- MicroProfile 設定アノテーションは、
welcome.message
設定を注入するために使用されます。
バックエンドに固有の設定プロパティーを設定する方法の詳細は、Quarkus 設定リファレンスガイド を参照してください。
例3.16 AnalyticsManager.java
package org.my.group; import java.util.HashMap; import java.util.Map; import javax.enterprise.context.Dependent; import javax.enterprise.inject.Alternative; import javax.inject.Inject; import org.eclipse.che.incubator.workspace.telemetry.base.AbstractAnalyticsManager; import org.eclipse.che.incubator.workspace.telemetry.base.AnalyticsEvent; import org.eclipse.che.incubator.workspace.telemetry.finder.DevWorkspaceFinder; import org.eclipse.che.incubator.workspace.telemetry.finder.UsernameFinder; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.slf4j.Logger; import static org.slf4j.LoggerFactory.getLogger; @Dependent @Alternative public class AnalyticsManager extends AbstractAnalyticsManager { private static final Logger LOG = getLogger(AbstractAnalyticsManager.class); public AnalyticsManager(MainConfiguration mainConfiguration, DevWorkspaceFinder devworkspaceFinder, UsernameFinder usernameFinder) { super(mainConfiguration, devworkspaceFinder, usernameFinder); mainConfiguration.welcomeMessage.ifPresentOrElse( 1 (str) -> LOG.info("The welcome message is: {}", str), () -> LOG.info("No welcome message provided") ); } @Override public boolean isEnabled() { return true; } @Override public void destroy() {} @Override public void onEvent(AnalyticsEvent event, String ownerId, String ip, String userAgent, String resolution, Map<String, Object> properties) { LOG.info("The received event is: {}", event); 2 } @Override public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) { } @Override public void onActivity() {} }
org.my.group.AnalyticsManager
と org.my.group.MainConfiguration
は代替の Bean であるため、src/main/resources/application.properties
の quarkus.arc.selected-alternatives
プロパティーを使用して指定します。
例3.17 application.properties
quarkus.arc.selected-alternatives=MainConfiguration,AnalyticsManager
3.6.1.6.4. Dev Workspace 内でのアプリケーションの実行
Dev Workspace に
DEVWORKSPACE_TELEMETRY_BACKEND_PORT
環境変数を設定します。ここで、値は4167
に設定されます。spec: template: attributes: workspaceEnv: - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT value: '4167'
- Red Hat OpenShift Dev Spaces ダッシュボードから Dev Workspace を再起動します。
Dev Workspace のターミナルウィンドウ内で以下のコマンドを実行し、アプリケーションを起動します。
--settings
フラグを使用して、GitHub アクセストークンが含まれるsettings.xml
ファイルの場所へのパスを指定します。$ mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}
アプリケーションは、フロントエンドプラグインからポート
4167
を使用して Telemetry イベントを受け取るようになりました。
検証手順
以下の出力がログに記録されていることを確認します。
INFO [org.ecl.che.inc.AnalyticsManager] (Quarkus Main Thread) No welcome message provided INFO [io.quarkus] (Quarkus Main Thread) devworkspace-telemetry-example-plugin 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.7.2.Final) started in 0.323s. Listening on: http://localhost:4167 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, kubernetes-client, rest-client, rest-client-jackson, resteasy, resteasy-jsonb, smallrye-context-propagation, smallrye-openapi, swagger-ui, vertx]
AnalyticsManager
のonEvent()
メソッドがフロントエンドプラグインからイベントを受信することを確認するには、l キーを押して Quarkus ライブコーディングを無効にし、IDE 内のファイルを編集します。以下の出力がログに記録されるはずです。INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (Aesh InputStream Reader) Live reload disabled INFO [org.ecl.che.inc.AnalyticsManager] (executor-thread-2) The received event is: Edit Workspace File in Che
3.6.1.6.5. isEnabled()
の実装
この例では、このメソッドは呼び出されるたびに true
を返します。
例3.18 AnalyticsManager.java
@Override public boolean isEnabled() { return true; }
より複雑なロジックを isEnabled()
に設定することができます。たとえば、ホストされている OpenShift Dev Spaces Woopra バックエンド は、バックエンドが有効になっているかどうかを判断する前に、設定プロパティーが存在することを確認します。
3.6.1.6.6. onEvent()
の実装
onEvent()
は、バックエンドが受信したイベントを Telemetry システムに送信します。サンプルアプリケーションでは、HTTP POST ペイロードを Telemetry サーバーから /event
エンドポイントに送信します。
サンプル Telemetry サーバーへの POST 要求の送信
以下の例では、Telemetry サーバーアプリケーションは http://little-telemetry-server-che.apps-crc.testing
の URL で OpenShift にデプロイされます。ここで、apps-crc.testing
は OpenShift クラスターの Ingress ドメイン名です。
TelemetryService.java
を作成して RESTEasy REST Client を設定します。例3.19
TelemetryService.java
package org.my.group; import java.util.Map; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @RegisterRestClient public interface TelemetryService { @POST @Path("/event") 1 @Consumes(MediaType.APPLICATION_JSON) Response sendEvent(Map<String, Object> payload); }
- 1
POST
リクエストを行うエンドポイント。
src/main/resources/application.properties
ファイルでTelemetryService
のベース URL を指定します。例3.20
application.properties
org.my.group.TelemetryService/mp-rest/url=http://little-telemetry-server-che.apps-crc.testing
TelemetryService
をAnalyticsManager
に挿入し、onEvent()
でPOST
リクエストを送信します例3.21
AnalyticsManager.java
@Dependent @Alternative public class AnalyticsManager extends AbstractAnalyticsManager { @Inject @RestClient TelemetryService telemetryService; ... @Override public void onEvent(AnalyticsEvent event, String ownerId, String ip, String userAgent, String resolution, Map<String, Object> properties) { Map<String, Object> payload = new HashMap<String, Object>(properties); payload.put("event", event); telemetryService.sendEvent(payload); }
これにより、HTTP 要求が Telemetry サーバーに送信され、短期間同じイベントが自動的に遅延します。デフォルトの期間は 1500 ミリ秒です。
3.6.1.6.7. increaseDuration()
の実装
多くの Telemetry システムはイベント期間を認識します。AbstractAnalyticsManager
は、同じ期間内で発生する同様のイベントを 1 つのイベントにマージします。increaseDuration()
のこの実装は no-op です。この方法では、ユーザーの Telemetry プロバイダーの API を使用してイベントまたはイベントプロパティーを変更し、イベントの延長期間を反映します。
例3.22 AnalyticsManager.java
@Override public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) {}
3.6.1.6.8. onActivity()
の実装
非アクティブなタイムアウトの制限を設定し、最後のイベント時間がタイムアウトよりも長くなる場合は、onActivity()
を使用して WORKSPACE_INACTIVE
イベントを送信します。
例3.23 AnalyticsManager.java
public class AnalyticsManager extends AbstractAnalyticsManager { ... private long inactiveTimeLimit = 60000 * 3; ... @Override public void onActivity() { if (System.currentTimeMillis() - lastEventTime >= inactiveTimeLimit) { onEvent(WORKSPACE_INACTIVE, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties); } }
3.6.1.6.9. destroy()
の実装
destroy()
が呼び出される際に、WORKSPACE_STOPPED
イベントを送信し、接続プールなどのリソースをシャットダウンします。
例3.24 AnalyticsManager.java
@Override public void destroy() { onEvent(WORKSPACE_STOPPED, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties); }
「Dev Workspace 内でのアプリケーションの実行」 で説明されているように mvn quarkus:dev
を実行し、Ctrl+C でアプリケーションを終了すると、WORKSPACE_STOPPED
イベントがサーバーに送信されます。
3.6.1.6.10. Quarkus アプリケーションのパッケージ化
アプリケーションをコンテナーにパッケージ化する最適な方法については、Quarkus ドキュメント を参照してください。コンテナーをビルドし、選択したコンテナーレジストリーにプッシュします。
JVM で実行する Quarkus イメージをビルドするための Dockerfile の例
例3.25 Dockerfile.jvm
FROM registry.access.redhat.com/ubi8/openjdk-11:1.11 ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/ COPY --chown=185 target/quarkus-app/*.jar /deployments/ COPY --chown=185 target/quarkus-app/app/ /deployments/app/ COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/ EXPOSE 8080 USER 185 ENTRYPOINT ["java", "-Dquarkus.http.host=0.0.0.0", "-Djava.util.logging.manager=org.jboss.logmanager.LogManager", "-Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}", "-jar", "/deployments/quarkus-run.jar"]
イメージをビルドするには、以下を実行します。
mvn package && \ podman build -f src/main/docker/Dockerfile.jvm -t image:tag .
Quarkus ネイティブイメージをビルドするための Dockerfile の例
例3.26 Dockerfile.native
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5 WORKDIR /work/ RUN chown 1001 /work \ && chmod "g+rwX" /work \ && chown 1001:root /work COPY --chown=1001:root target/*-runner /work/application EXPOSE 8080 USER 1001 CMD ["./application", "-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=$DEVWORKSPACE_TELEMETRY_BACKEND_PORT}"]
イメージをビルドするには、以下を実行します。
mvn package -Pnative -Dquarkus.native.container-build=true && \ podman build -f src/main/docker/Dockerfile.native -t image:tag .
3.6.1.6.11. プラグインの plugin.yaml
の作成
DevWorkspacePod でカスタムバックエンドを実行する DevWorkspace
プラグインを表す plugin.yamldevfilev2 ファイルを作成します。devfile v2 の詳細については、Devfile v2 documentation を参照してください。
例3.27 plugin.yaml
schemaVersion: 2.1.0 metadata: name: devworkspace-telemetry-backend-plugin version: 0.0.1 description: A Demo telemetry backend displayName: Devworkspace Telemetry Backend components: - name: devworkspace-telemetry-backend-plugin attributes: workspaceEnv: - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT value: '4167' container: image: YOUR IMAGE 1 env: - name: WELCOME_MESSAGE 2 value: 'hello world!'
- 1
- 「Quarkus アプリケーションのパッケージ化」 からビルドされたコンテナーイメージを指定します。
- 2
- Example 4 から
welcome.message
オプションの設定プロパティーの値を設定します。
通常、ユーザーはこのファイルを企業 Web サーバーにデプロイします。本書では、OpenShift で Apache Web サーバーを作成し、そこでプラグインをホストする方法を説明します。
新規 plugin.yaml
ファイルを参照する ConfigMap
オブジェクトを作成します。
$ oc create configmap --from-file=plugin.yaml -n openshift-devspaces telemetry-plugin-yaml
Web サーバーを公開するためにデプロイメント、サービス、およびルートを作成します。デプロイメントはこの ConfigMap
オブジェクトを参照し、これを /var/www/html
ディレクトリーに配置します。
例3.28 manifest.yaml
kind: Deployment apiVersion: apps/v1 metadata: name: apache spec: replicas: 1 selector: matchLabels: app: apache template: metadata: labels: app: apache spec: volumes: - name: plugin-yaml configMap: name: telemetry-plugin-yaml defaultMode: 420 containers: - name: apache image: 'registry.redhat.io/rhscl/httpd-24-rhel7:latest' ports: - containerPort: 8080 protocol: TCP resources: {} volumeMounts: - name: plugin-yaml mountPath: /var/www/html strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% revisionHistoryLimit: 10 progressDeadlineSeconds: 600 --- kind: Service apiVersion: v1 metadata: name: apache spec: ports: - protocol: TCP port: 8080 targetPort: 8080 selector: app: apache type: ClusterIP --- kind: Route apiVersion: route.openshift.io/v1 metadata: name: apache spec: host: apache-che.apps-crc.testing to: kind: Service name: apache weight: 100 port: targetPort: 8080 wildcardPolicy: None
$ oc apply -f manifest.yaml
検証手順
デプロイメントが開始されたら、Web サーバーで
plugin.yaml
が利用できることを確認します。$ curl apache-che.apps-crc.testing/plugin.yaml
3.6.1.6.12. Dev Workspace での Telemetry プラグインの指定
以下を既存の Dev Workspace の
components
フィールドに追加します。components: ... - name: telemetry-plug-in plugin: uri: http://apache-che.apps-crc.testing/plugin.yaml
- OpenShift Dev Spaces ダッシュボードから Dev Workspace を起動します。
検証手順
Telemetry-plug-in
コンテナーが Dev Workspace Pod で稼働していることを確認します。ここでは、これはエディターで Workspace ビューをチェックして検証されます。- エディター内のファイルを編集し、Telemetry サーバーのログのサンプルでイベントを確認します。
3.6.1.6.13. すべての Dev Workspaces の Telemetry プラグインの適用
テレメトリープラグインをデフォルトのプラグインとして設定します。デフォルトのプラグインは、新規および既存の Dev Workspaces の Dev Workspace の起動に適用されます。
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: devEnvironments: defaultPlugins: - editor: eclipse/che-theia/next 1 plugins: 2 - 'http://apache-che.apps-crc.testing/plugin.yaml'
検証手順
- Red Hat OpenShift Dev Spaces ダッシュボードから新規または既存の Dev Workspace を起動します。
- 「Dev Workspace での Telemetry プラグインの指定」 の検証手順に従って、Telemetry プラグインが機能していることを確認します。
3.6.2. サーバーロギングの設定
OpenShift Dev Spaces サーバーで利用可能な個別のロガーのログレベルを微調整できます。
OpenShift Dev Spaces サーバー全体のログレベルは、Operator の cheLogLevel
設定プロパティーを使用してグローバルに設定されます。「CheCluster
カスタムリソースフィールドの参照」を参照してください。Operator によって管理されないインストールでグローバルログレベルを設定するには、che
ConfigMap で CHE_LOG_LEVEL
環境変数を指定します。
CHE_LOGGER_CONFIG
環境変数を使用して、OpenShift Dev Spaces サーバーの個々のロガーのログレベルを設定することができます。
3.6.2.1. ログレベルの設定
手順
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: cheServer: extraProperties: CHE_LOGGER_CONFIG: "<key1=value1,key2=value2>" 1
- 1
- キーと値のペアのコンマ区切りリスト。キーは OpenShift Dev Spaces サーバーログ出力に表示されるロガーの名前で、値は必要なログレベルになります。
例3.29
WorkspaceManager
のデバッグモードの設定spec: components: cheServer: extraProperties: CHE_LOGGER_CONFIG: "org.eclipse.che.api.workspace.server.WorkspaceManager=DEBUG"
3.6.2.2. ロガーの命名
ロガーの名前は、それらのロガーを使用する内部サーバークラスのクラス名に従います。
3.6.2.3. HTTP トラフィックのロギング
手順
OpenShift Dev Spaces サーバーと Kubernetes または OpenShift クラスターの API サーバー間の HTTP トラフィックをログに記録するには、
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: cheServer: extraProperties: CHE_LOGGER_CONFIG: "che.infra.request-logging=TRACE"
3.6.3. dsc を使用したログの収集
Red Hat OpenShift Dev Spaces のインストールは、OpenShift クラスターで実行されている複数のコンテナーで設定されます。実行中の各コンテナーからログを手動で収集できますが、dsc
はプロセスを自動化するコマンドを提供します。
以下のコマンドを使用すると、dsc
ツールを使用して OpenShift クラスターから Red Hat OpenShift Dev Spaces ログを収集します。
dsc server:logs
既存の Red Hat OpenShift Dev Spaces サーバーログを収集し、ローカルマシンのディレクトリーに保存します。デフォルトでは、ログはマシンの一時ディレクトリーにダウンロードされます。ただし、
-d
パラメーターを指定すると上書きできます。たとえば、OpenShift Dev Spaces ログを/home/user/che-logs/
ディレクトリーにダウンロードするには、次のコマンドを使用します。dsc server:logs -d /home/user/che-logs/
実行すると、
dsc server:logs
はログファイルを保存するディレクトリーを指定するコンソールにメッセージを出力します。Red Hat OpenShift Dev Spaces logs will be available in '/tmp/chectl-logs/1648575098344'
Red Hat OpenShift Dev Spaces がデフォルト以外のプロジェクトにインストールされている場合、
dsc server:logs
には-n <NAMESPACE>
パラメーターが必要です。ここで、<NAMESPACE>
は Red Hat OpenShift Dev Spaces がインストールされた OpenShift プロジェクトです。たとえば、my-namespace
プロジェクトの OpenShift Dev Spaces からログを取得するには、以下のコマンドを使用します。dsc server:logs -n my-namespace
dsc server:deploy
-
ログは、
dsc
を使用してインストール時に OpenShift Dev Spaces のインストール時に自動的に収集されます。dsc server:logs
と同様に、ディレクトリーのログは-d
パラメーターを使用して指定できます。
関連情報
3.6.4. Prometheus および Grafana のモニタリング
クラスター上で実行中の Prometheus および Grafana のインスタンスを使用して、OpenShift Dev Spaces メトリクスを収集および表示できます。
3.6.4.1. Prometheus と Grafana のインストール
template.yaml
を適用して Prometheus および Grafana をインストールできます。この例の template.yaml
ファイルは、Prometheus および Grafana を使い始めるための基本的な設定、Deployments および Services のモニタリングスタックを提供します。
または、Prometheus Operator と Grafana Operator を使用することもできます。
前提条件
- oc
手順
template.yaml
を使用して Prometheus と Grafana をインストールするには、以下を実行します。
Prometheus および Grafana の新規プロジェクト
monitoring
を作成します。$ oc new-project monitoring
monitoring
プロジェクトでtemplate.yaml
を適用します。$ oc apply -f template.yaml -n monitoring
例3.30 template.yaml
--- apiVersion: v1 kind: Service metadata: name: grafana labels: app: grafana spec: ports: - name: 3000-tcp port: 3000 protocol: TCP targetPort: 3000 selector: app: grafana --- apiVersion: v1 kind: Service metadata: name: prometheus labels: app: prometheus spec: ports: - name: 9090-tcp port: 9090 protocol: TCP targetPort: 9090 selector: app: prometheus --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: grafana name: grafana spec: selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: containers: - image: registry.redhat.io/rhel8/grafana:7 name: grafana ports: - containerPort: 3000 protocol: TCP --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: prometheus name: prometheus spec: selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: serviceAccountName: prometheus containers: - image: quay.io/prometheus/prometheus:v2.36.0 name: prometheus ports: - containerPort: 9090 protocol: TCP volumeMounts: - mountPath: /prometheus name: volume-data - mountPath: /etc/prometheus/prometheus.yml name: volume-config subPath: prometheus.yml volumes: - emptyDir: {} name: volume-data - configMap: defaultMode: 420 name: prometheus-config name: volume-config --- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config data: prometheus.yml: "" --- apiVersion: v1 kind: ServiceAccount metadata: name: prometheus ---
3.6.4.2. Dev Workspace Operator のモニターリング
Dev Workspace Operator が公開するメトリクスを処理するために、モニターリングスタックの例を設定できます。
3.6.4.2.1. Prometheus による Dev Workspace Operator メトリクスの収集
Prometheus を使用して、Dev Workspace Operator に関するメトリクスを収集、保存、および照会するには、以下を実行します。
前提条件
-
devworkspace-controller-metrics
サービスは、ポート8443
でメトリクスを公開している。これはデフォルトで事前設定されています。 -
devworkspace-webhookserver
サービスは、ポート9443
でメトリクスを公開している。これはデフォルトで事前設定されています。 -
Prometheus 2.26.0 以降が動作している。Prometheus コンソールは、ポート
9090
で実行されており、対応するサービスがあります。Prometheus を初めて実行するための手順 について参照してください。
手順
ClusterRoleBinding を作成して、Prometheus に関連付けられた ServiceAccount を devworkspace-controller-metrics-reader ClusterRole にバインドします。監視スタックの例 では、使用される ServiceAccount の名前は
prometheus
です。注記Dev Workspace メトリクスへのアクセスはロールベースアクセスコントロール (RBAC) で保護されているため、ClusterRoleBinding がないとアクセスできません。
例3.31 clusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: devworkspace-controller-metrics-binding subjects: - kind: ServiceAccount name: prometheus namespace: monitoring roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: devworkspace-controller-metrics-reader
Prometheus は、
devworkspace-controller-metrics
サービスが公開するポート8443
と、devworkspace-webhookserver
サービスが公開するポート9443
からメトリクスを収集するように設定します。注記モニターリングスタックのサンプル では、空の設定で
prometheus-config
ConfigMap がすでに作成されています。Prometheus 設定の詳細を指定するには、ConfigMap のdata
フィールドを編集します。例3.32 Prometheus の設定
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: monitoring data: prometheus.yml: |- global: scrape_interval: 5s 1 evaluation_interval: 5s 2 scrape_configs: 3 - job_name: 'DevWorkspace' scheme: https authorization: type: Bearer credentials_file: '/var/run/secrets/kubernetes.io/serviceaccount/token' tls_config: insecure_skip_verify: true static_configs: - targets: ['devworkspace-controller-metrics.<DWO_project>:8443'] 4 - job_name: 'DevWorkspace webhooks' scheme: https authorization: type: Bearer credentials_file: '/var/run/secrets/kubernetes.io/serviceaccount/token' tls_config: insecure_skip_verify: true static_configs: - targets: ['devworkspace-webhookserver.<DWO_project>:9443'] 5
- 1
- ターゲットが収集されるレート。
- 2
- 記録およびアラートルールを再チェックするレート。
- 3
- Prometheus が監視するリソースデフォルトの設定では、2 つのジョブ (
DevWorkspace
およびDevWorkspace webhooks
) が、devworkspace-controller-metrics
サービスおよびdevworkspace-webhookserver
サービスによって公開された時系列データを収集します。 - 4
- ポート
8443
からのメトリクスのスクレイプターゲット。<DWO_project>
を、devworkspace-controller-metrics
Service
が置かれているプロジェクトに置き換えます。 - 5
- ポート
9443
からのメトリクスのスクレイプターゲット。<DWO_project>
を、devworkspace-webhookserver
Service
が置かれているプロジェクトに置き換えます。
Prometheus
Deployment をスケールダウンおよびスケールアップし、直前の手順で更新された ConfigMap を読み取ります。$ oc scale --replicas=0 deployment/prometheus -n monitoring && oc scale --replicas=1 deployment/prometheus -n monitoring
検証
ポート転送を使用して、ローカルで
Prometheus
サービスにアクセスします。$ oc port-forward svc/prometheus 9090:9090 -n monitoring
-
localhost:9090/targets
でターゲットエンドポイントを表示して、すべてのターゲットが稼働していることを確認します。 Prometheus コンソールを使用して、メトリクスを表示および照会します。
-
localhost:9090/metrics
でメトリクスを表示します。 localhost:9090/graph
からメトリクスをクエリーします。詳細は、Using the expression browser を参照してください。
-
3.6.4.2.2. Dev Workspace 固有のメトリクス
次の表は、devworkspace-controller-metrics
サービスによって公開される Dev Workspace 固有のメトリックについて説明しています。
名前 | 型 | 説明 | ラベル |
---|---|---|---|
| カウンター | Dev Workspace の開始イベントの数。 |
|
| カウンター |
|
|
| カウンター | 失敗した Dev Workspaces の数。 |
|
| ヒストグラム | Dev Workspace の起動にかかった総時間 (秒)。 |
|
名前 | 説明 | 値 |
---|---|---|
|
Dev Workspace の |
|
|
Dev Workspace の |
|
| ワークスペースの起動失敗の理由です。 |
|
名前 | 説明 |
---|---|
| Dev Workspace の作成に使用された devfile が無効であるため、起動に失敗しました。 |
|
|
| 不明な失敗理由。 |
3.6.4.2.3. Grafana ダッシュボードでの Dev Workspace Operator メトリクスの表示
ダッシュボードの例を使用して Grafana の Dev Workspace Operator メトリクスを表示するには、以下を実行します。
前提条件
- Prometheus はメトリクスを収集している。「Prometheus による Dev Workspace Operator メトリクスの収集」を参照してください。
- Grafana バージョン 7.5.3 以降。
-
Grafana はポート
3000
で実行されており、対応するサービスがあります。Installing Grafana を参照してください。
手順
- Prometheus インスタンスのデータソースを追加します。Creating a Prometheus data source を参照してください。
-
example
grafana-dashboard.json
ダッシュボードをインポートします。
検証手順
- Grafana コンソールを使用して、Dev Workspace Operator メトリクスダッシュボードを表示します。「Dev Workspace Operator の Grafana ダッシュボード」を参照してください。
3.6.4.2.4. Dev Workspace Operator の Grafana ダッシュボード
grafana-dashboard.json
に基づく サンプルの Grafana ダッシュボードには、Dev Workspace Operator から次のメトリクスが表示されます。
Dev Workspace-specific metrics パネル
図3.1 Dev Workspace-specific metrics パネル
- ワークスペースの平均起動時間
- ワークスペースの平均起動時間。
- ワークスペースの起動
- ワークスペースの起動の成功と失敗の回数。
- ワークスペースの起動時間
- ワークスペースの起動時間を表示するヒートマップ。
- Dev Workspace の成功/失敗
- DevWorkspace の起動の成功と失敗の比較。
- Dev Workspace の失敗率
- ワークスペースの起動失敗回数と総起動回数の比率。
- Dev Workspace 起動失敗の理由
ワークスペース起動失敗の分布を表示する円グラフ:
-
BadRequest
-
InfrastructureFailure
-
Unknown
-
Operator metrics パネル (パート 1)
図3.2 Operator metrics パネル (パート 1)
- 進行中の Webhook
- さまざまな Webhook リクエストの数の比較。
- 作業キューの期間
- 調整リクエストが処理される前にワークキューにとどまる時間を表示するヒートマップ。
- Webhook のレイテンシー (/mutate)
-
/mutate
Webhook レイテンシーを表示するヒートマップ。 - 調整時間
- 調整期間を表示するヒートマップ。
Operator metrics パネル (パート 2)
図3.3 Operator metrics パネル (パート 2)
- Webhook のレイテンシー (/convert)
-
/convert
Webhook レイテンシーを表示するヒートマップ。 - 作業キューの深さ
- 作業キューにある調整リクエストの数。
- メモリー
- Dev Workspace コントローラーと Dev Workspace Webhook サーバーのメモリー使用状況。
- 調整数 (DWO)
- Dev Workspace コントローラーの 1 秒あたりの平均調整回数。
3.6.4.3. Dev Spaces サーバーの監視
OpenShift Dev Spaces サーバーの JVM メモリーやクラ出力ディングなどの JVM メトリクスを公開するように OpenShift Dev Spaces を設定できます。
3.6.4.3.1. OpenShift Dev Spaces サーバーメトリクスの有効化と公開
OpenShift Dev Spaces は、che-host
サービスのポート 8087
で JVM メトリクスを公開します。この動作を設定できます。
手順
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: metrics: enable: <boolean> 1
- 1
- 有効にするには
true
、無効にするにはfalse
。
3.6.4.3.2. Prometheus を使用した OpenShift Dev Spaces メトリクスの収集
Prometheus を使用して、OpenShift Dev Spaces サーバーの JVM メトリクスを収集、保存、および照会するには、以下を実行します。
前提条件
-
OpenShift Dev Spaces は、ポート
8087
にメトリクスを公開しています。OpenShift Dev Spaces サーバーの JVM メトリクスの有効化および公開 を参照してください。 -
Prometheus 2.26.0 以降が動作している。Prometheus コンソールは、ポート
9090
で実行されており、対応するサービスがあります。Prometheus を初めて実行するための手順 について参照してください。
手順
ポート
8087
からメトリクスを収集するように Prometheus を設定します。注記モニターリングスタックのサンプル では、空の設定で
prometheus-config
ConfigMap がすでに作成されています。Prometheus 設定の詳細を指定するには、ConfigMap のdata
フィールドを編集します。例3.33 Prometheus の設定
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config data: prometheus.yml: |- global: scrape_interval: 5s 1 evaluation_interval: 5s 2 scrape_configs: 3 - job_name: 'OpenShift Dev Spaces Server' static_configs: - targets: ['che-host.<OpenShift Dev Spaces_project>:8087'] 4
- 1
- ターゲットが収集されるレート。
- 2
- 記録およびアラートルールを再チェックするレート。
- 3
- Prometheus が監視するリソースデフォルト設定では、OpenShift Dev Spaces Server という単一のジョブが、
OpenShift Dev Spaces Server
によって公開された時系列データをスクレイピングします。 - 4
- ポート
8087
からのメトリクスのスクレイプターゲット。<OpenShift Dev Spaces_project>
を OpenShift Dev Spaces プロジェクトに置き換えます。デフォルトの OpenShift Dev Spaces プロジェクトはopenshift-devspaces
です。
Prometheus
Deployment をスケールダウンおよびスケールアップし、直前の手順で更新された ConfigMap を読み取ります。$ oc scale --replicas=0 deployment/prometheus -n monitoring && oc scale --replicas=1 deployment/prometheus -n monitoring
検証
ポート転送を使用して、ローカルで
Prometheus
サービスにアクセスします。$ oc port-forward svc/prometheus 9090:9090 -n monitoring
-
localhost:9090/targets
でtargets
エンドポイントを表示して、すべてのターゲットが稼働していることを確認します。 Prometheus コンソールを使用して、メトリクスを表示および照会します。
-
localhost:9090/metrics
でメトリクスを表示します。 localhost:9090/graph
からメトリクスをクエリーします。詳細は、Using the expression browser を参照してください。
-
3.6.4.3.3. Grafana ダッシュボードでの OpenShift Dev Spaces サーバーメトリクスの表示
Grafana で OpenShift Dev Spaces サーバーメトリクスを表示するには、以下を実行します。
前提条件
- Prometheus は、OpenShift Dev Spaces クラスターでメトリクスを収集している。「Prometheus および Grafana のモニタリング」を参照してください。
-
Grafana 6.0 以降がポート
3000
で実行されており、対応するサービスがあります。Installing Grafana を参照してください。
手順
- Prometheus インスタンスのデータソースを追加します。Creating a Prometheus data source を参照してください。
- サンプル ダッシュボード をインポートします。Import dashboard を参照してください。
Grafana コンソールで OpenShift Dev Spaces メトリクスを表示します。
図3.4 OpenShift Dev Spaces サーバーの JVM ダッシュボード
図3.5 クイックファクト
図3.6 JVM メモリー
図3.7 JVM Misc
図3.8 JVM メモリープール (ヒープ)
図3.9 JVM メモリープール (非ヒープ)
図3.10 ガベージコレクション
図3.11 クラ出力ディング
図3.12 バッファープール
3.7. ネットワークの設定
3.7.1. ネットワークポリシーの設定
デフォルトでは、OpenShift クラスター内のすべての Pod は、異なる名前空間にある場合でも相互に通信できます。OpenShift Dev Spaces のコンテキストでは、これにより、あるユーザープロジェクトのワークスペース Pod が別のユーザープロジェクトの別のワークスペース Pod にトラフィックを送信できるようになります。
セキュリティーのために、NetworkPolicy オブジェクトを使用してマルチテナント分離を設定し、すべての着信通信をユーザープロジェクト内の Pod に制限することができます。ただし、OpenShift Dev Spaces プロジェクトの Pod は、ユーザープロジェクトの Pod と通信できる必要があります。
前提条件
- OpenShift クラスターには、マルチテナント分離などのネットワーク制限があります。
手順
allow-from-openshift-devspaces
NetworkPolicy を各ユーザープロジェクトに適用します。allow-from-openshift-devspaces
NetworkPolicy は、OpenShift Dev Spaces 名前空間からユーザープロジェクト内のすべての Pod への受信トラフィックを許可します。例3.34
allow-from-openshift-devspaces.yaml
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-openshift-devspaces spec: ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: openshift-devspaces 1 podSelector: {} 2 policyTypes: - Ingress
3.7.2. Dev Spaces ホスト名の設定
この手順では、カスタムホスト名を使用するように OpenShift Dev Space を設定する方法を説明します。
前提条件
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。 - 証明書とプライベートキーファイルが生成されます。
秘密鍵と証明書のペアを生成するには、他の OpenShift Dev Spaces ホストと同じ認証局 (CA) を使用する必要があります。
DNS プロバイダーに対し、カスタムホスト名をクラスター Ingress を参照するよう要求します。
手順
OpenShift Dev Spaces のプロジェクトを作成します。
$ oc create project openshift-devspaces
TLS Secret を作成します。
$ oc create secret TLS <tls_secret_name> \ 1 --key <key_file> \ 2 --cert <cert_file> \ 3 -n openshift-devspaces
シークレットに必要なラベルを追加します。
$ oc label secret <tls_secret_name> \ 1 app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
- 1
- TLS Secret 名
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: networking: hostname: <hostname> 1 tlsSecretName: <secret> 2
- OpenShift Dev Spaces がすでにデプロイされている場合は、すべての OpenShift Dev Spaces コンポーネントのロールアウトが完了するまで待ちます。
3.7.3. 信頼されていない TLS 証明書を Dev Spaces にインポートする
外部サービスとの OpenShift Dev Spaces コンポーネントの通信は、TLS で暗号化されます。信頼できる認証局 (CA) によって署名された TLS 証明書が必要です。したがって、以下のような外部サービスで使用されていて、信頼されていない CA チェーンをすべて OpenShift Dev Spaces にインポートする必要があります。
- プロキシー
- ID プロバイダー (OIDC)
- ソースコードリポジトリープロバイダー (Git)
OpenShift Dev Spaces は、OpenShift Dev Spaces プロジェクトのラベル付き ConfigMap を TLS 証明書のソースとして使用します。ConfigMap には、それぞれ任意の数の証明書と、任意の数の鍵を指定できます。
OpenShift クラスターにクラスター全体の信頼できる CA 証明書が クラスター全体のプロキシー設定 を通じて追加されている場合、OpenShift DevSpaces Operator はそれらを検出し、config.openshift.io/inject-trusted-cabundle="true"
ラベルを ConfigMap につけて自動的に挿入します。このアノテーションに基づいて、OpenShift は Config Map の ca-bundle.crt
キー内にクラスター全体で信頼される CA 証明書を自動的に挿入します。
前提条件
手順
インポートするすべての CA チェーン PEM ファイルを
custom-ca-certificates.pem
ファイルに連結し、Java トラストストアと互換性のない戻り文字を削除します。$ cat ca-cert-for-{prod-id-short}-*.pem | tr -d '\r' > custom-ca-certificates.pem
必要な TLS 証明書を使用して
custom-ca-certificates
Config Map を作成します。$ oc create configmap custom-ca-certificates \ --from-file=custom-ca-certificates.pem \ --namespace=openshift-devspaces
custom-ca-certificates
Config Map にラベルを付けます。$ oc label configmap custom-ca-certificates \ app.kubernetes.io/component=ca-bundle \ app.kubernetes.io/part-of=che.eclipse.org \ --namespace=openshift-devspaces
- 以前にデプロイされていない場合は、OpenShift Dev Spaces をデプロイします。それ以外の場合は、OpenShift Dev Spaces コンポーネントのロールアウトが完了するまで待ちます。
- 変更を有効にするには、実行中のワークスペースを再起動します。
検証手順
Config Map にカスタム CA 証明書が含まれていることを確認します。このコマンドは、カスタム CA 証明書を PEM 形式で返します。
$ oc get configmap \ --namespace=openshift-devspaces \ --output='jsonpath={.items[0:].data.custom-ca-certificates\.pem}' \ --selector=app.kubernetes.io/component=ca-bundle,app.kubernetes.io/part-of=che.eclipse.org
OpenShift Dev Spaces Pod に、
ca-certs-merged
Config Mapをマウントするボリュームが含まれていることを確認します。$ oc get pod \ --selector=app.kubernetes.io/component=devspaces \ --output='jsonpath={.items[0].spec.volumes[0:].configMap.name}' \ --namespace=openshift-devspaces \ | grep ca-certs-merged
OpenShift Dev Spaces サーバーコンテナーにカスタム CA 証明書があることを確認します。このコマンドは、カスタム CA 証明書を PEM 形式で返します。
$ oc exec -t deploy/devspaces \ --namespace=openshift-devspaces \ -- cat /public-certs/custom-ca-certificates.pem
OpenShift Dev Spaces サーバーログで、インポートされた証明書の数が null でないことを確認します。
$ oc logs deploy/devspaces --namespace=openshift-devspaces \ | grep custom-ca-certificates.pem
証明書の SHA256 フィンガープリントを一覧表示します。
$ for certificate in ca-cert*.pem ; do openssl x509 -in $certificate -digest -sha256 -fingerprint -noout | cut -d= -f2; done
OpenShift Dev Spaces サーバーの Java トラストストアに同じフィンガープリントを持つ証明書が含まれていることを確認します。
$ oc exec -t deploy/devspaces --namespace=openshift-devspaces -- \ keytool -list -keystore /home/user/cacerts \ | grep --after-context=1 custom-ca-certificates.pem
- ワークスペースを開始し、これが作成されたプロジェクト名 <workspace_namespace> を取得して、ワークスペースが開始されるのを待ちます。
che-trusted-ca-certs
Config Mapにカスタム CA 証明書が含まれていることを確認します。このコマンドは、カスタム CA 証明書を PEM 形式で返します。$ oc get configmap che-trusted-ca-certs \ --namespace=<workspace_namespace> \ --output='jsonpath={.data.custom-ca-certificates\.custom-ca-certificates\.pem}'
ワークスペース Pod が
che-trusted-ca-certs
Config Mapをマウントすることを確認します。$ oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].spec.volumes[0:].configMap.name}' \ | grep che-trusted-ca-certs
Universal-developer-image
コンテナー (またはワークスペース devfile で定義されたコンテナー) がche-trusted-ca-certs
ボリュームをマウントしていることを確認します。$ oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].spec.containers[0:]}' \ | jq 'select (.volumeMounts[].name == "che-trusted-ca-certs") | .name'
ワークスペース Pod 名 <workspace_pod_name> を取得します。
$ oc get pod \ --namespace=<workspace_namespace> \ --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \ --output='jsonpath={.items[0:].metadata.name}' \
ワークスペースコンテナーにカスタム CA 証明書があることを確認します。このコマンドは、カスタム CA 証明書を PEM 形式で返します。
$ oc exec <workspace_pod_name> \ --namespace=<workspace_namespace> \ -- cat /public-certs/custom-ca-certificates.custom-ca-certificates.pem
関連情報
3.7.4. OpenShift ルートの設定
組織で必要な場合は、OpenShift Route のラベルとアノテーションを設定できます。
前提条件
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。 - OpenShift で実行される OpenShift Dev Spaces のインスタンス。
手順
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: cheServer: extraProperties: CHE_INFRA_KUBERNETES_INGRESS_LABELS: <labels> 1 CHE_INFRA_KUBERNETES_INGRESS_ANNOTATIONS__JSON: "<annotations>" 2 networking: labels: <labels> 3 annotations: <annotations> 4
3.7.5. OpenShift ルートの設定
OpenShift Route が ルーターのシャード化 と連携するようにラベル、アノテーション、およびドメインを設定できます。
前提条件
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。 -
dsc
。「dsc 管理ツールのインストール」 を参照してください。
手順
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: cheServer: extraProperties: CHE_INFRA_OPENSHIFT_ROUTE_LABELS: <labels> 1 CHE_INFRA_OPENSHIFT_ROUTE_HOST_DOMAIN__SUFFIX: <domain> 2 networking: labels: <labels> 3 domain: <domain> 4 annotations: <annotations> 5
3.8. ストレージの設定
3.8.1. ストレージクラスを使用した Dev Spaces のインストール
設定されたインフラストラクチャーストレージを使用するように OpenShift Dev Spaces を設定するには、ストレージクラスを使用して OpenShift Dev Spaces をインストールします。これは、ユーザーがデフォルト以外のプロビジョナーによって提供される永続ボリュームをバインドする必要がある場合にとくに役立ちます。そのために、ユーザーはこのストレージを OpenShift Dev Spaces データ保存用にバインドし、そのストレージのパラメーターを設定します。これらのパラメーターは、以下を決定します。
- 特殊なホストパス
- ストレージ容量
- ボリューム mod
- マウントオプション
- ファイルシステム
- アクセスモード
- ストレージタイプ
- その他多数
OpenShift Dev Spaces には、データを格納するために永続ボリュームを必要とする 2 つのコンポーネントがあります。
- PostgreSQL データベース。
-
OpenShift Dev Spaces ワークスペース。OpenShift Dev Spaces ワークスペースは、
/projects
ボリュームなどのボリュームを使用してソースコードを保存します。
OpenShift Dev Spaces ワークスペースソースコードは、ワークスペースが一時的ではない場合にのみ永続ボリュームに保存されます。
永続ボリューム要求 (PVC) のファクト:
- OpenShift Dev Spaces は、インフラストラクチャーに永続ボリュームを作成しません。
- OpenShift Dev Spaces は、永続ボリュームクレーム (PVC) を使用して永続ボリュームをマウントします。
OpenShift Dev Spaces サーバーは永続ボリューム要求を作成します。
ユーザーは、OpenShift Dev Spaces PVC でストレージクラス機能を使用するために、OpenShift Dev Spaces 設定でストレージクラス名を定義します。ストレージクラスを使用すると、ユーザーは追加のストレージパラメーターを使用してインフラストラクチャーストレージを柔軟に設定します。クラス名を使用して、静的にプロビジョニングされた永続ボリュームを OpenShift Dev Spaces PVC にバインドすることもできます。
手順
CheCluster カスタムリソース定義を使用してストレージクラスを定義します。
ストレージクラス名を定義します。
CheCluster
カスタムリソースを設定し、OpenShift Dev Spaces をインストールします。「dsc を使用したインストール時にCheCluster
カスタムリソースの設定」を参照してください。spec: components: database: pvc: # keep blank unless you need to use a non default storage class for PostgreSQL PVC storageClass: 'postgres-storage' devEnvironments: storage: pvc: # keep blank unless you need to use a non default storage class for workspace PVC(s) storageClass: 'workspace-storage'
che-postgres-pv.yaml
ファイルで PostgreSQL データベースの永続ボリュームを定義します。che-postgres-pv.yaml
fileapiVersion: v1 kind: PersistentVolume metadata: name: postgres-pv-volume labels: type: local spec: storageClassName: postgres-storage capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/data/che/postgres"
che-postgres-pv.yaml
ファイルで OpenShift Dev Spaces ワークスペースの永続ボリュームを定義します。che-workspace-pv.yaml
fileapiVersion: v1 kind: PersistentVolume metadata: name: workspace-pv-volume labels: type: local spec: storageClassName: workspace-storage capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/data/che/workspace"
2 つの永続ボリュームをバインドします。
$ kubectl apply -f che-workspace-pv.yaml -f che-postgres-pv.yaml
ボリュームの有効なファイルパーミッションを指定する必要があります。これは、ストレージクラスの設定を使用して実行することも、手動で実行することもできます。パーミッションを手動で定義するには、storageClass#mountOptions
uid
と gid
を定義します。PostgreSQL ボリュームには uid=26
と gid=26
が必要です。
3.9. ID および承認の管理
このセクションでは、Red Hat OpenShift Dev Spaces の ID および承認の管理のさまざまな側面について説明します。
3.9.1. GitHub、GitLab、または Bitbucket の OAuth
ユーザーがリモート Git リポジトリーと連携できるようにするには、以下を実行します。
3.9.1.1. Configuring OAuth 2.0 for GitHub
ユーザーが GitHub でホストされるリモート Git リポジトリーと連携できるようにするには、以下を実行します。
- GitHub OAuth アプリ (OAuth 2.0) をセットアップします。
- GitHub OAuth アプリケーションシークレットを適用します。
3.9.1.1.1. GitHub OAuth アプリケーションの設定
Set up a GitHub OAuth App using OAuth 2.0.
前提条件
- GitHub にログインしている。
-
base64
が使用しているオペレーティングシステムにインストールされている。
手順
- https://github.com/settings/applications/new にアクセスします。
以下の値を設定します。
-
アプリケーション名:
OpenShift Dev Spaces
-
ホームページ URL:
"https://devspaces-<openshift_deployment_name>.<domain_name>"/
-
認証コールバック URL:
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/oauth/callback
-
アプリケーション名:
- Register application をクリックします。
- Generate new client secret をクリックします。
GitHub OAuth アプリケーションシークレットを適用する際に使用する GitHub OAuth クライアント ID をコピーし、これを Base64 にエンコードします。
$ echo -n '<github_oauth_client_id>' | base64
GitHub OAuth クライアントシークレットをコピーし、GitHub OAuth App Secret を適用する際に使用する Base64 にエンコードします。
$ echo -n '<github_oauth_client_secret>' | base64
3.9.1.1.2. GitHub OAuth アプリケーションシークレットの適用
GitHub OAuth App Secret を準備し、これを適用します。
前提条件
- GitHub OAuth アプリケーションの設定が完了します。
GitHub OAuth アプリケーションの設定時に生成された Base64 でエンコードされた値が作成されます。
- GitHub OAuth Client ID
- GitHub OAuth Client Secret
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。
手順
Secret を準備します。
kind: Secret apiVersion: v1 metadata: name: github-oauth-config namespace: openshift-devspaces 1 labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: oauth-scm-configuration annotations: che.eclipse.org/oauth-scm-server: github che.eclipse.org/scm-server-endpoint: <github_server_url> 2 type: Opaque data: id: <Base64_GitHub_OAuth_Client_ID> 3 secret: <Base64_GitHub_OAuth_Client_Secret> 4
シークレットを適用します。
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
- 出力に Secret が作成されたことを確認します。
3.9.1.2. GitLab の OAuth 2.0 の設定
ユーザーが GitLab インスタンスを使用してホストされるリモート Git リポジトリーと連携できるようにするには、以下を実行します。
- GitLab 認定アプリケーション (OAuth 2.0) をセットアップします。
- GitLab で承認されたアプリケーションシークレットを適用します。
3.9.1.2.1. GitLab で承認されたアプリケーションの設定
OAuth 2.0 を使用して GitLab で承認されたアプリケーションを設定します。
前提条件
- GitLab にログインしている。
-
base64
が使用しているオペレーティングシステムにインストールされている。
手順
- アバターをクリックして、 → の編集に移動します。
- Name に OpenShift Dev Spaces を入力します。
-
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/oauth/callback
を Redirect URI として入力します。 - Confidential および Expire access tokens のチェックボックスを選択します。
-
Scopes の下で、
api
、write_repository
、およびopenid
のチェックボックスにチェックを入れます。 - Save application をクリックします。
GitLab アプリケーション ID をコピーし、GitLab で承認されたアプリケーションシークレットを適用するときに使用する Base64 にエンコードします。
$ echo -n '<gitlab_application_id>' | base64
GitLab クライアントシークレット をコピーし、GitLab で承認されたアプリケーションシークレットを適用するときに使用する Base64 にエンコードします。
$ echo -n '<gitlab_client_secret>' | base64
3.9.1.2.2. GitLab で承認されるアプリケーションシークレットの適用
GitLab で承認されるアプリケーションシークレットを準備し、これを適用します。
前提条件
- GitLab 認証アプリケーションの設定が完了します。
GitLab で承認されるアプリケーションの設定時に生成された Base64 でエンコードされた値が作成されます。
- GitLab Application ID
- GitLab Client Secret
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。
手順
Secret を準備します。
kind: Secret apiVersion: v1 metadata: name: gitlab-oauth-config namespace: openshift-devspaces 1 labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: oauth-scm-configuration annotations: che.eclipse.org/oauth-scm-server: gitlab che.eclipse.org/scm-server-endpoint: <gitlab_server_url> 2 type: Opaque data: id: <Base64_GitLab_Application_ID> 3 secret: <Base64_GitLab_Client_Secret> 4
シークレットを適用します。
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
- 出力に Secret が作成されたことを確認します。
3.9.1.3. Bitbucket サーバー向け OAuth 1.0 の設定
ユーザーが Bitbucket サーバーでホストされるリモート Git リポジトリーと連携できるようにするには、以下を実行します。
- Bitbucket Server でアプリケーションリンク (OAuth 1.0) を設定します。
- Bitbucket Server のアプリケーションリンクシークレットを適用します。
3.9.1.3.1. Bitbucket Server でのアプリケーションリンクの設定
Bitbucket Server で OAuth 1.0 のアプリケーションリンクをセットアップします。
前提条件
手順
コマンドラインでコマンドを実行して、次の手順に必要なファイルを作成し、アプリケーションリンクシークレットを適用するときに使用します。
$ openssl genrsa -out private.pem 2048 && \ openssl pkcs8 -topk8 -inform pem -outform pem -nocrypt -in private.pem -out privatepkcs8.pem && \ cat privatepkcs8.pem | sed 's/-----BEGIN PRIVATE KEY-----//g' | sed 's/-----END PRIVATE KEY-----//g' | tr -d '\n' | base64 | tr -d '\n' > privatepkcs8-stripped.pem && \ openssl rsa -in private.pem -pubout > public.pub && \ cat public.pub | sed 's/-----BEGIN PUBLIC KEY-----//g' | sed 's/-----END PUBLIC KEY-----//g' | tr -d '\n' > public-stripped.pub && \ openssl rand -base64 24 > bitbucket-consumer-key && \ openssl rand -base64 24 > bitbucket-shared-secret
- → に移動します。
-
URL フィールドに
"https://devspaces-<openshift_deployment_name>:.<domain_name>"/
と入力し、Create new link をクリックします。 - 提供されたアプリケーション URL が一度リダイレクトされました で、この URL を使用する チェックボックスをオンにして、続行 をクリックします。
- Application Name に OpenShift Dev Spaces を入力します。
- Application Type として Generic Application を選択します。
- OpenShift Dev Spaces を Service Provider Name として入力します。
-
bitbucket-consumer-key
ファイルの内容を Consumer キー として貼り付けます。 -
bitbucket-shared-secret
ファイルの内容を Shared シークレット として貼り付けます。 -
リクエストトークンの URL として
<bitbucket_server_url>/plugins/servlet/oauth/request-token
と入力します。 -
アクセストークンの URL として
<bitbucket_server_url>/plugins/servlet/oauth/access-token
と入力します。 -
Authorize URL として
<bitbucket_server_url>/plugins/servlet/oauth/authorize
と入力します。 - 受信リンクの作成 チェックボックスをオンにして、続行 をクリックします。
-
bitbucket_consumer_key
ファイルの内容を Consumer キー として貼り付けます。 - コンシューマー名 として OpenShift Dev Spaces を入力します。
-
public-stripped.pub
ファイルの内容を 公開鍵 として貼り付け、Continue をクリックします。
3.9.1.3.2. Bitbucket Server 用にアプリケーションリンクシークレットを適用する
Bitbucket Server のアプリケーションリンクシークレットを準備して適用します。
前提条件
- アプリケーションリンクが Bitbucket Server にセットアップされている。
アプリケーションリンクのセットアップ時に作成された以下の Base64 でエンコードされたファイルが用意されている。
-
privatepkcs8-stripped.pem
-
bitbucket_consumer_key
-
bitbucket-shared-secret
-
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。
手順
Secret を準備します。
kind: Secret apiVersion: v1 metadata: name: bitbucket-oauth-config namespace: openshift-devspaces 1 labels: app.kubernetes.io/component: oauth-scm-configuration app.kubernetes.io/part-of: che.eclipse.org annotations: che.eclipse.org/oauth-scm-server: bitbucket che.eclipse.org/scm-server-endpoint: <bitbucket_server_url> 2 type: Opaque data: private.key: <Base64_content_of_privatepkcs8-stripped.pem> 3 consumer.key: <Base64_content_of_bitbucket_server_consumer_key> 4 shared_secret: <Base64_content_of_bitbucket-shared-secret> 5
シークレットを適用します。
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
- 出力に Secret が作成されたことを確認します。
3.9.1.4. Bitbucket Cloud 向け OAuth 2.0 の設定
Bitbucket Cloud でホストされているリモート Git リポジトリーをユーザーが操作できるようにすることができます。
- Bitbucket Cloud で OAuth コンシューマー (OAuth 2.0) をセットアップします。
- Bitbucket Cloud に OAuth コンシューマーシークレットを適用します。
3.9.1.4.1. Bitbucket Cloud で OAuth コンシューマーを設定する
Bitbucket Cloud で OAuth 2.0 の OAuth コンシューマーをセットアップします。
前提条件
- Bitbucket Cloud にログインしている。
-
base64
が使用しているオペレーティングシステムにインストールされている。
手順
- アバターをクリックして、All workspaces ページに移動します。
- ワークスペースを選択してクリックします。
- → → に移動します。
- Name に OpenShift Dev Spaces を入力します。
-
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/oauth/callback
を Callback URL として入力します。 - Permissions で、Account と Repositories のすべてのチェックボックスをオンにして、Save をクリックします。
追加したコンシューマーを展開してから、キー 値をコピーして Base64 にエンコードし、Bitbucket OAuth コンシューマーシークレットを適用するときに使用します。
$ echo -n '<bitbucket_oauth_consumer_key>' | base64
Bitbucket OAuth コンシューマーシークレットを適用するときに使用するために、Secret 値をコピーして Base64 にエンコードします。
$ echo -n '<bitbucket_oauth_consumer_secret>' | base64
3.9.1.4.2. Bitbucket Cloud に OAuth コンシューマーシークレットを適用する
Bitbucket Cloud の OAuth コンシューマーシークレットを準備して適用します。
前提条件
- OAuth コンシューマーは Bitbucket Cloud でセットアップされます。
Bitbucket OAuth コンシューマーのセットアップ時に生成された Base64 でエンコードされた値が準備されます。
- Bitbucket OAuth コンシューマーキー
- Bitbucket OAuth コンシューマーシークレット
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照してください。
手順
Secret を準備します。
kind: Secret apiVersion: v1 metadata: name: bitbucket-oauth-config namespace: openshift-devspaces 1 labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: oauth-scm-configuration annotations: che.eclipse.org/oauth-scm-server: bitbucket type: Opaque data: id: <Base64_Bitbucket_Oauth_Consumer_Key> 2 secret: <Base64_Bitbucket_Oauth_Consumer_Secret> 3
シークレットを適用します。
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
- 出力に Secret が作成されたことを確認します。
3.9.2. 管理ユーザーの設定
ユーザーデータの削除など、OpenShift Dev Spaces サーバーで管理者権限を必要とするアクションを実行するには、管理者権限を持つユーザーをアクティブ化します。デフォルトのインストールでは、OpenShift に存在するかどうかに関係なく、admin
ユーザーの管理者権限が有効になります。
手順
CheCluster
カスタムリソースを設定して、<admin> ユーザーに管理者権限を設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: components: cheServer: extraProperties: CHE_SYSTEM_ADMIN__NAME: '<admin>'
3.9.3. ユーザーデータの削除
3.9.3.1. GDPR に準拠したユーザーデータの削除
OpenShift Dev Spaces API を使用して、OpenShift Dev Spaces ユーザーのデータを削除できます。この手順に従うことで、個人による個人データの消去権利を課す EU 一般データ保護規則 (GDPR) にサービスが準拠するようになります。
前提条件
- OpenShift Dev Spaces への管理権限を持つアクティブなセッション。「管理ユーザーの設定」を参照してください。
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。
手順
-
<username> ユーザー <id>
id
を取得します。https://<devspaces-<openshift_deployment_name>.<domain_name>>/swagger/#/user/find_1 に移動し、 をクリックし、name: <username> を設定して をクリックします。レスポンス本文 を下にスクロールして、id
値を見つけます。 -
ユーザー設定など、OpenShift Dev Spaces サーバーが管理する <id> ユーザーデータを削除します。https://<devspaces-<openshift_deployment_name>.<domain_name>>/swagger/#/user/remove に移動し、 をクリックし、id: <id> を設定して をクリックします。
204
レスポンスコードが予想されます。 ユーザープロジェクトを削除して、ユーザーにバインドされているすべての OpenShift リソース (ワークスペース、シークレット、configmap など) を削除します。
$ oc delete namespace <username>-devspaces
関連情報
- 5章Dev Spaces サーバー API の使用
- 「プロジェクト名の設定」
- すべてのユーザーのデータを削除する場合、7章Dev Spaces のアンインストール を参照してください。
第4章 IDE 拡張機能の管理
IDE は拡張機能またはプラグインを使用して機能を拡張します。拡張機能を管理するメカニズムは IDE によって異なります。
4.1. Microsoft Visual Studio Code の拡張機能 - オープンソース
拡張機能を管理するために、この IDE は次の Open VSX レジストリーインスタンスのいずれかを使用します。
- パブリックのプライマリー open-vsx.org レジストリー。
-
エアギャップ環境、オフライン環境、およびプロキシー制限環境をサポートする OpenShift Dev Spaces の
プラグインレジストリー
Pod で実行される Open VSX レジストリーの組み込みインスタンス。組み込みの Open VSX レジストリーには、open-vsx.org で公開されている拡張機能のサブセットのみが含まれています。このサブセットはカスタマイズできます。 - OpenShift Dev Spaces ワークスペース Pod からアクセス可能なネットワークにデプロイされた、スタンドアロンの Open VSX レジストリーインスタンス。
4.1.1. Open VSX レジストリーインスタンスの選択
組織のクラスター内から解決される場合、https://open-vsx.org
の Open VSX レジストリーがデフォルトです。そうでない場合、OpenShift Dev Spaces plugin-registry
pod 内に組み込まれた Open VSX レジストリーがデフォルトになります。
デフォルトの Open VSX レジストリーインスタンスがニーズに合わない場合には、次のように別の Open VSX レジストリーインスタンスを選択できます。
手順
CheCluster
カスタムリソースのopenVSXURL
値を編集します。spec: components: pluginRegistry: openVSXURL: "<url_of_an_open_vsx_registry_instance>"
ヒント-
デフォルトの
openVSXURL
値はhttps://open-vsx.org
です。 -
plugin-registry
Pod に組み込まれた Open VSX レジストリーインスタンスを選択するには、openVSXURL: ''
を使用します。同梱の拡張機能をカスタマイズする方法については、次のセクションを参照してください。 -
また、その URL が組織のクラスター内からアクセス可能であり、プロキシーによってブロックされていない場合は、スタンドアロンの Open VSX レジストリーインスタンスの URL で
openVSXURL
を指すこともできます。
-
デフォルトの
4.1.2. 組み込みの Open VSX レジストリーインスタンスでの拡張機能の追加または削除
オフラインおよびプロキシー環境をサポートするために、OpenShift Dev Spaces によってデプロイされた組み込みの Open VSX レジストリーインスタンスで拡張機能を追加または削除できます。
これにより、組織のワークスペースで使用できる Open VSX レジストリーのカスタムビルドが作成されます。
OpenShift Dev Spaces の更新後に最新のセキュリティー修正を取得するには、最新のタグまたは SHA に基づいてコンテナーを再構築します。
手順
- プラグインレジストリーリポジトリー をダウンロードするか、フォークしてクローンします。
追加または削除する必要がある拡張機能ごと に、
openvsx-sync.json
ファイル を編集します。拡張機能が open-vsx.org で公開されている場合に、拡張機能
ID
を <published_by>.<unique_identifier> の形式で追加できます。ID
の詳細は、open-vsx.org の拡張機能の一覧ページで確認できます。{ "id": "<published_by>.<unique_identifier>" }
ヒントopen-vsx.org の最新の拡張バージョンがデフォルトです。または、新しい行に
"version": "<extension_version>"
を追加して、バージョンを指定することもできます。拡張機能が Microsoft Visual Studio Marketplace からのみ入手可能で、Open VSX からは入手できない場合は、拡張機能の発行者に、これらの 手順 に従って open-vsx.org にも公開するように依頼できます。この GitHub アクション を使用する可能性があります。
ヒント- 拡張機能の発行者がいない場合や、または拡張機能を open-vsx.org に公開してくれない場合、および拡張機能に相当する Open VSX がない場合は、Open VSX チームに 問題を報告する ことを検討してください。
非公開のソースの拡張機能または社内での内部使用のみを目的として開発された拡張機能がある場合は、カスタムプラグインレジストリーコンテナーにアクセスできる URL を使用して、
.vsix
ファイルから直接拡張機能を追加できます。{ "id": "<published_by>.<unique_identifier>", "download": "<url_to_download_vsix_file>", "version": "<extension_version>" }
警告リソースを使用する前に、Microsoft Visual Studio Marketplace の 使用条件 を確認してください。
-
拡張機能は、
openvsx-sync.json
ファイルから消去して削除できます。
プラグインレジストリーコンテナーイメージをビルドし、quay.io などのコンテナーレジストリーに公開します。
$ ./build.sh -o <username> -r quay.io -t custom
$ podman push quay.io/<username/plugin_registry:custom>
組織のクラスター内の
CheCluster
カスタムリソースを編集して、イメージ (quay.io など) を参照するようにし、変更を保存します。spec: components: pluginRegistry: deployment: containers: - image: quay.io/<username/plugin_registry:custom> openVSXURL: ''
-
plugin-registry
Pod が再始動して実行中であることを確認します。 - ワークスペースを再起動し、ワークスペース IDE の 拡張機能 ビューで使用可能な拡張機能を確認します。
第5章 Dev Spaces サーバー API の使用
OpenShift Dev Spaces サーバーのワークロードを管理するには、Swagger Web ユーザーインターフェイスを使用して OpenShift Dev Spaces サーバー API をナビゲートします。
手順
-
Swagger API Web ユーザーインターフェイスに移動します (
"https://devspaces-<openshift_deployment_name>.<domain_name>"/swagger
)。
関連情報
第6章 Dev Spaces のアップグレード
本章では、CodeReady Workspaces 3.1 から OpenShift Dev Spaces 3.3 にアップグレードする方法を説明します。
6.1. chectl 管理ツールのアップグレード
このセクションでは、dsc
管理ツールをアップグレードする方法について説明します。
6.2. 更新承認ストラテジーの指定
Red Hat OpenShift Dev Spaces Operator は、2 つのアップグレード戦略をサポートしています。
自動
- Operator は、新しい更新が利用可能になったときにそれらをインストールします。
Manual
- インストールを開始する前に、新しい更新を手動で承認する必要があります。
OpenShift Web コンソールを使用して、Red Hat OpenShift Dev Spaces Operator の更新承認ストラテジーを指定できます。
前提条件
- クラスター管理者による OpenShift Web コンソールセッション。Accessing the web console を参照してください。
- Red Hat エコシステムカタログを使用してインストールされた OpenShift Dev Spaces のインスタンス。
手順
- OpenShift Web コンソールで、 → に移動します。
- インストールされているオペレーターのリストで Red Hat OpenShift Dev Spaces をクリックします。
- Subscription タブに移動します。
-
更新承認 ストラテジーを
Automatic
またはManual
に設定します。
関連情報
6.3. OpenShift Web コンソールを使用した Dev Spaces のアップグレード
OpenShift Web コンソールの Red Hat エコシステムカタログにある Red Hat OpenShift Dev Spaces Operator を使用して、以前のマイナーバージョンからのアップグレードを手動で承認できます。
前提条件
- クラスター管理者による OpenShift Web コンソールセッション。Accessing the web console を参照してください。
- Red Hat エコシステムカタログを使用してインストールされた OpenShift Dev Spaces のインスタンス。
-
サブスクリプションの承認ストラテジーは
Manual
になります。「更新承認ストラテジーの指定」を参照してください。
手順
- 保留中の Red Hat OpenShift Dev Spaces Operator のアップグレードを手動で承認します。Manually approving a pending Operator upgrade を参照してください。
検証手順
- OpenShift Dev Spaces インスタンスに移動します。
- 3.3 のバージョン番号がページ下部に表示されます。
6.4. CLI 管理ツールを使用した Dev Spaces のアップグレード
本セクションでは、CLI 管理ツールを使用して以前のマイナーバージョンからアップグレードする方法を説明します。
前提条件
- OpenShift の管理者アカウント。
-
以前のマイナーバージョンの CodeReady Workspaces の実行中のインスタンス。これは
openshift-devspaces
OpenShift プロジェクトの同じ OpenShift インスタンス上で CLI 管理ツールを使用してインストールします。 -
OpenShift Dev Spaces バージョン 3.3 の
dsc
。「dsc 管理ツールのインストール」 を参照してください。
手順
- 実行中のすべての CodeReady Workspaces 3.1 ワークスペースの変更を保存し、Git リポジトリーにプッシュします。
- CodeReady Workspaces 3.1 インスタンスのすべてのワークスペースをシャットダウンします。
OpenShift Dev Spaces をアップグレードします。
$ dsc server:update -n openshift-devspaces
注記低速なシステムまたはインターネット接続の場合は、
--k8spodwaittimeout=1800000
フラグオプションを追加して、Pod のタイムアウト期間を 1800000 ms 以上に拡張します。
検証手順
- OpenShift Dev Spaces インスタンスに移動します。
- 3.3 のバージョン番号がページ下部に表示されます。
6.5. 制限された環境での Dev Spaces のアップグレード
このセクションでは、Red Hat OpenShift Dev Spaces をアップグレードして、制限された環境で CLI 管理ツールを使用してマイナーバージョンの更新を実行する方法を説明します。
前提条件
-
OpenShift Dev Spaces インスタンスは、
openshift-devspaces
プロジェクトのdsc --installer operator
メソッドを使用して OpenShift にインストールされている。「制限された環境での Dev Spaces のインストール」を参照してください。
- OpenShift クラスターに、少なくとも 64 GB のディスクスペースがある。
- OpenShift クラスターは制限されたネットワーク上で動作する準備ができており、OpenShift コントロールプレーンはパブリックインターネットにアクセスできる。非接続インストールのミラーリングについて、および ネットワークが制限された環境での Operator Lifecycle Manager の使用 を参照してください。
-
OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。Getting started with the OpenShift CLI を参照してください。 -
registry.redhat.io
Red Hat エコシステムカタログへのアクティブなoc
レジストリーセッション。Red Hat Container Registry authentication を参照してください。
-
opm
。Installing theopm
CLI を参照してください。 -
jq
。Downloadingjq
を参照してください。 -
podman
。Installing Podman を参照してください。 -
<my_registry> レジストリーへの管理アクセス権を持つアクティブな
skopeo
セッション。Installing Skopeo、Authenticating to a registry、および Mirroring images for a disconnected installation を参照してください。 -
OpenShift Dev Spaces バージョン 3.3 の
dsc
。「dsc 管理ツールのインストール」を参照してください。
手順
ミラーリングスクリプトをダウンロードして実行し、カスタム Operator カタログをインストールし、関連するイメージをミラーリングします (prepare-restricted-environment.sh)。
$ bash prepare-restricted-environment.sh \ --ocp_ver "4.11" \ --devworkspace_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \ --devworkspace_operator_version "v0.15.2" \ --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \ --prod_operator_package_name "devspaces-operator" \ --prod_operator_version "v3.3.0" \ --my_registry "<my_registry>" \ --my_catalog "<my_catalog>"
- CodeReady Workspaces 3.1 インスタンスで実行されているすべてのワークスペースで、変更を保存し、Git リポジトリーに再度プッシュします。
- CodeReady Workspaces 3.1 インスタンスのすべてのワークスペースを停止します。
以下のコマンドを実行します。
$ dsc server:update --che-operator-image="$TAG" -n openshift-devspaces --k8spodwaittimeout=1800000
検証手順
- OpenShift Dev Spaces インスタンスに移動します。
- 3.3 のバージョン番号がページ下部に表示されます。
6.6. OpenShift での Dev Workspace Operator の修復
OLM の再起動やクラスターのアップグレードなど特定の条件下で、Dev Spaces Operator for OpenShift Dev Spaces Operator がすでにクラスターに存在する場合でも、自動的にインストールされる場合があります。その場合、次のように OpenShift で Dev Workspace Operator を修復できます。
前提条件
-
宛先 OpenShift クラスターへのクラスター管理者としてのアクティブな
oc
セッション。CLI の使用方法 を参照してください。 - OpenShift Web コンソールの Installed Operators ページに、Dev Workspace Operator の複数のエントリーが表示されるか、または 1 つのエントリーが Replaceing と Pending のループに陥っています。
手順
-
失敗した Pod を含む
devworkspace-controller
namespace を削除します。 DevWorkspace
およびDevWorkspaceTemplate
カスタムリソース定義 (CRD) を更新するには、変換戦略をNone
に設定し、webhook
セクション全体を削除します。spec: ... conversion: strategy: None status: ...
ヒントDevWorkspace
を検索することにより、OpenShift Web コンソールの Administrator パースペクティブでDevWorkspace
およびDevWorkspaceTemplate
CRD を見つけて編集できます。注記DevWorkspaceOperatorConfig
およびDevWorkspaceRouting
CRD の変換ストラテジーは、デフォルトでNone
に設定されています。Dev Workspace Operator サブスクリプションを削除します。
$ oc delete sub devworkspace-operator \ -n openshift-operators 1
- 1
openshift-operators
または Dev Workspace Operator がインストールされている OpenShift プロジェクト。
<devworkspace-operator.vX.Y.Z> 形式で Dev Workspace Operator CSV を取得します。
$ oc get csv | grep devworkspace
各 Dev Workspace Operator CSV を削除します。
$ oc delete csv <devworkspace_operator.vX.Y.Z> \ -n openshift-operators 1
- 1
openshift-operators
または Dev Workspace Operator がインストールされている OpenShift プロジェクト。
Dev Workspace Operator サブスクリプションを再作成します。
$ cat <<EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: devworkspace-operator namespace: openshift-operators spec: channel: fast name: devworkspace-operator source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Automatic 1 startingCSV: devworkspace-operator.v0.15.2 EOF
- 1
Automatic
またはManual
。
重要installPlanApproval: Manual
の場合、OpenShift Web コンソールの Administrator パースペクティブで → に移動し、Dev Workspace Operator: → → に対して以下を選択します。- OpenShift Web コンソールの Administrator パースペクティブで、 → に移動し、Dev Workspace Operator の Succeeded ステータスを確認します。
第7章 Dev Spaces のアンインストール
OpenShift Dev Spaces をアンインストールすると、OpenShift Dev Spaces 関連のすべてのユーザーデータが削除されます。
oc
を使用して OpenShift Dev Spaces インスタンスをアンインストールします。
前提条件
-
dsc
。「dsc 管理ツールのインストール」 を参照してください。
手順
OpenShift Dev Spaces インスタンスを削除します。
$ dsc server:delete
--delete-namespace
オプションは、OpenShift Dev Spaces namespace を削除します。
--delete-all
オプションは、Dev Workspace Operator と関連リソースを削除します。