3.3. アーキテクチャー
図3.1 Dev Workspace Operator を使用した高度な OpenShift Dev Spaces アーキテクチャー
OpenShift Dev Spaces は、3 つのコンポーネントのグループで実行されます。
- OpenShift Dev Spaces サーバーコンポーネント
- ユーザープロジェクトおよびワークスペースの管理。主なコンポーネントはユーザーダッシュボードで、ユーザーはここから自分のワークスペースを制御します。
- Dev Workspace Operator
-
User ワークスペースの実行に必要な OpenShift オブジェクトを作成し、制御します。
Pod
、Services
、およびPersistentVolumes
が含まれます。 - User ワークスペース
- コンテナーベースの開発環境、IDE を含みます。
これらの OpenShift の機能のロールは中心的なものです。
- Dev Workspace のカスタムリソース
- ユーザーワークスペースを表す有効な OpenShift オブジェクト。OpenShift Dev Spaces で操作します。3 つのグループのコンポーネントのコミュニケーションチャンネルとなります。
- OpenShift のロールベースアクセスコントロール (RBAC)
- すべてのリソースへのアクセスを制御します。
3.3.1. サーバーコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Dev Spaces サーバーコンポーネントにより、マルチテナンシーとワークスペースの管理が確保されます。
図3.2 Dev Workspace Operator と対話する OpenShift Dev Spaces サーバーコンポーネント
3.3.1.1. Dev Spaces オペレーター リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Dev Spaces Operator は、OpenShift Dev Spaces サーバーコンポーネントのライフサイクルを完全に管理するようにします。これには、以下が含まれます。
CheCluster
カスタムリソース定義 (CRD)-
CheCluster
OpenShift オブジェクトを定義します。 - OpenShift Dev Spaces コントローラー
- Pod、サービス、永続ボリュームなどの OpenShift Dev Spaces インスタンスを実行するために必要な OpenShift オブジェクトを作成し、制御します。
CheCluster
カスタムリソース (CR)OpenShift Dev Spaces Operator を持つクラスターでは、
CheCluster
カスタムリソース (CR) を作成できます。OpenShift Dev Spaces オペレーターは、この OpenShift Dev Spaces インスタンス上で OpenShift Dev Spaces サーバーコンポーネントの完全なライフサイクル管理を行います。
3.3.1.2. Dev Workspace Operator リンクのコピーリンクがクリップボードにコピーされました!
Dev Workspace Operator (DWO) は OpenShift Dev Spaces の依存関係であり、OpenShift Dev Spaces の機能に不可欠です。DWO は主に、Dev Workspace カスタムリソース (CR) を調整します。
Dev Workspace CR は、OpenShift Dev Spaces ワークスペースの OpenShift リソース表現です。ユーザーがバックグラウンドで OpenShift Dev Spaces を使用してワークスペースを作成するたびに、Dashboard OpenShift Dev Spaces はクラスター内に Dev Workspace CR を作成します。すべての OpenShift Dev Spaces ワークスペースには、クラスター上に基盤となる Dev Workspace CR が存在します。
図 1 は、クラスター内の Dev Workspace CR の例を示しています。
図3.3 クラスター内の Dev Workspace CR の例
devfile を使用して OpenShift Dev Spaces でワークスペースを作成すると、Dev Workspace CR に devfile の詳細が含まれます。さらに、OpenShift Dev Spaces は、ワークスペースに選択されたエディターに応じて、エディター定義を Dev Workspace CR に追加します。OpenShift Dev Spaces は、CheCluster
CR の設定方法に応じてワークスペースをさらに設定する Dev Workspace に属性も追加します。
DevWorkspaceTemplate
は、Dev Workspaces の再利用可能な spec.template
を定義するカスタムリソースです。
ワークスペースが起動すると、DWO は対応する Dev Workspace CR を読み取り、デプロイメント、シークレット、configmap、ルートなどの必要なリソースを作成して最後に devfile で定義された開発環境を表すワークスペース Pod が作成されます。
カスタムリソースの概要
以下のカスタムリソース定義は、Dev Workspace Operator によって提供されます。
-
Dev Workspace
-
DevWorkspaceTemplate
-
DevWorkspaceOperatorConfig
-
DevWorkspaceRouting
Dev Workspace
Dev Workspace カスタムリソースには、OpenShift Dev Spaces ワークスペースに関する詳細が含まれています。特に、devfile の詳細とエディター定義への参照が含まれています。
DevWorkspaceTemplate
OpenShift Dev Spaces では、DevWorkspaceTemplate
カスタムリソースは通常、OpenShift Dev Spaces ワークスペース用のエディター (Visual Studio Code - Open Source など) を定義するために使用されます。このカスタムリソースを使用して、複数の Dev Workspaces で再利用される再利用可能な spec.template
コンテンツを定義できます。
DevWorkspaceOperatorConfig
DevWorkspaceOperatorConfig
(DWOC) カスタムリソースは、DWO の設定オプションを定義します。DWOC には 2 つの種類があります。
- グローバル設定
- 非グローバル設定
グローバル設定は、devworkspace-operator-config
という名前の DWOC カスタムリソースであり、通常は DWO インストール namespace に配置されます。デフォルトでは、グローバル設定はインストール時には作成されません。グローバル設定で指定された設定フィールドは、DWO およびすべての Dev Workspaces に適用されます。ただし、DWOC 設定はグローバル以外の設定で上書きできます。
devworkspace-operator-config
以外の DWOC カスタムリソースは、非グローバル設定と見なされます。非グローバル設定は、Dev Workspace に DWOC への参照が含まれていない限り、どの Dev Workspace にも適用されません。グローバル設定と非グローバル設定に同じフィールドがある場合は、非グローバル設定フィールドが優先されます。
Global DWOC | OpenShift Dev Spaces が所有する DWOC | |
---|---|---|
リソース名 |
|
|
namespace | DWO インストールの namespace | OpenShift Dev Spaces インストールの namespace |
デフォルト作成 | DWO のインストール時にはデフォルトでは作成されません | OpenShift Dev Spaces インストールにデフォルトで作成されます |
スコープ | DWO 自体と、DWO で管理されるすべての Dev Workspaces に適用されます | OpenShift Dev Spaces で作成された Dev Workspaces に適用されます |
優先度 | OpenShift Dev Spaces 所有設定で指定されたフィールドが優先されます | 両方が同じフィールドを定義する場合はグローバル設定よりも優先されます |
主な使用例 | DWO 全般に適用されるデフォルトの広範な設定を定義するために使用されます。 | OpenShift Dev Spaces で作成された Dev Workspaces の特定の設定を定義するために使用されます |
たとえば、デフォルトでは、OpenShift Dev Spaces は、devworkspace-config
という名前の OpenShift Dev Spaces namespace でグローバルではない DWOC を作成して管理します。この DWOC には OpenShift Dev Spaces ワークスペースに固有の設定が含まれており、CheCluster CR の設定方法に応じて OpenShift Dev Spaces によって維持されます。OpenShift Dev Spaces がワークスペースを作成すると、OpenShift Dev Spaces は controller.devfile.io/devworkspace-config
属性を使用して OpenShift Dev Spaces が所有する DWOC への参照を追加します。
図3.4 Dev Workspace 設定属性の例
DevWorkspaceRouting
DevWorkspaceRouting
カスタムリソースは、Dev Workspace のエンドポイントの詳細を定義します。すべての Dev Workspace には、対応する DevWorkspaceRouting
オブジェクトがあり、ワークスペースのコンテナーエンドポイントを指定します。devfile から定義されるエンドポイントおよびエディター定義で指定されるエンドポイントは、DevWorkspaceRouting
カスタムリソースに表示されます。
3.3.1.2.1. Dev Workspace Operator のオペランド リンクのコピーリンクがクリップボードにコピーされました!
Dev Workspace Operator には 2 つのオペランドがあります。
- コントローラーのデプロイメント
- Webhook デプロイメント
oc get pods -l 'app.kubernetes.io/part-of=devworkspace-operator' -o custom-columns=NAME:.metadata.name -n openshift-operators
$ oc get pods -l 'app.kubernetes.io/part-of=devworkspace-operator' -o custom-columns=NAME:.metadata.name -n openshift-operators
NAME
devworkspace-controller-manager-66c6f674f5-l7rhj
devworkspace-webhook-server-d4958d9cd-gh7vr
devworkspace-webhook-server-d4958d9cd-rfvj6
Dev Workspace-controller-manager デプロイメントの設定
Dev Workspace Operator Subscription オブジェクトで devworkspace-controller-manager
Pod を設定できます。
設定の詳細は、この ドキュメント を参照してください。
Dev Workspace-webhook-server デプロイメントの設定
グローバル DWOC で devworkspace-webhook-server
デプロイメントを設定できます。
3.3.1.3. Gateway リンクのコピーリンクがクリップボードにコピーされました!
関連情報
OpenShift Dev Spaces ゲートウェイには、以下のロールがあります。
- 要求をルーティングする。Traefik を使用します。
- OpenID Connect(OIDC) でユーザーを認証する。OpenShift OAuth2 プロキシー を使用します。
- OpenShift ロールベースのアクセス制御 (RBAC) ポリシーを適用して、OpenShift Dev Spaces リソースへのアクセスを制御します。`kube-rbac-proxy` を使用します。
OpenShift Dev Spaces Operator はこれを che-gateway
Deployment として管理します。
以下へのアクセスを制御します。
図3.5 OpenShift Dev Spaces ゲートウェイと他のコンポーネントとの対話
関連情報
3.3.1.4. ユーザーダッシュボード リンクのコピーリンクがクリップボードにコピーされました!
ユーザーダッシュボードは、Red Hat OpenShift Dev Spaces のランディングページです。OpenShift Dev Spaces ユーザーは、ユーザーダッシュボードを参照してワークスペースにアクセスし、管理します。これは React のアプリケーションです。OpenShift Dev Spaces デプロイメントは、devspaces-dashboard
Deployment で起動します。
以下へのアクセス権が必要です。
- 「Dev Spaces サーバー」
- 「プラグインレジストリー」
- OpenShift API
図3.6 User ダッシュボードと他のコンポーネントとの対話
ユーザーがユーザーダッシュボードにワークスペースの起動を要求すると、ユーザーダッシュボードはこの一連のアクションを実行します。
- リポジトリー URL を 「Dev Spaces サーバー」 に送信し、ユーザーがリモート devfile からワークスペースを作成する際に devfile が返されることを想定します。
- ワークスペースを記述した devfile を読み込みます。
- 「プラグインレジストリー」 から追加のメタデータを収集します。
- その情報を Dev Workspace Custom Resource に変換します。
- OpenShift API を使用して、ユーザープロジェクトに Dev Workspace Custom Resource を作成します。
- Dev Workspace Custom Resource のステータスを監視します。
- 実行中のワークスペース IDE にユーザーをリダイレクトします。
3.3.1.5. Dev Spaces サーバー リンクのコピーリンクがクリップボードにコピーされました!
関連情報
OpenShift Dev Spaces サーバーの主な機能は次のとおりです。
- ユーザーネームスペースの作成
- ユーザーネームスペースに必要なシークレットと config map のプロビジョニング
- Git サービスプロバイダーとの統合による devfile の取得および認証
OpenShift Dev Spaces サーバーは、HTTP REST API を公開する Java Web サービスで、以下へのアクセスが必要です。
- Git サービスプロバイダー
- OpenShift API
図3.7 OpenShift Dev Spaces サーバーと他のコンポーネントとの対話
3.3.1.6. プラグインレジストリー リンクのコピーリンクがクリップボードにコピーされました!
各 OpenShift Dev Spaces ワークスペースは、特定のエディターと関連する拡張機能のセットを使用して起動します。OpenShift Dev Spaces のプラグインレジストリーは、使用可能なエディターとエディター拡張機能のリストを提供するものです。各エディターや拡張機能は、Devfile v2 に記載されています。
「ユーザーダッシュボード」 は、レジストリーの内容を読み取っています。
図3.8 他のコンポーネントとのプラグインレジストリーの相互作用
3.3.2. User ワークスペース リンクのコピーリンクがクリップボードにコピーされました!
図3.9 User ワークスペースと他のコンポーネントとの対話
User ワークスペースは、コンテナー内で動作する Web IDE です。
User ワークスペースは、Web アプリケーションです。コンテナー内で動作するマイクロサービスで構成されており、ブラウザー上で動作する最新の IDE のすべてのサービスを提供します。
- Editor
- 言語オートコンプリート
- 言語サーバー
- デバッグツール
- プラグイン
- アプリケーションのランタイム
ワークスペースは、ワークスペースコンテナーと有効なプラグイン、および関連する OpenShift コンポーネントを含む 1 つの OpenShift Deployment です。
- コンテナー
- ConfigMap
- サービス
- Endpoints
- Ingress またはルート
- シークレット
- 永続ボリューム (PV)
OpenShift Dev Spaces ワークスペースには、OpenShift 永続ボリューム (PV) で永続化されるプロジェクトのソースコードが含まれます。マイクロサービスは、この共有ディレクトリーに読み書き可能なアクセス権があります。
devfile v2 形式を使用して、OpenShift Dev Spaces ワークスペースのツールおよびランタイムアプリケーションを指定します。
以下の図は、実行中の 1 つの OpenShift Dev Spaces ワークスペースとそのコンポーネントを示しています。
図3.10 OpenShift Dev Spaces ワークスペースコンポーネント
この図では、実行中のワークスペースが 1 つあります。