管理ガイド


Red Hat OpenShift Dev Spaces 3.12

Administering Red Hat OpenShift Dev Spaces 3.12

Robert Kratky

Fabrice Flore-Thébault

Red Hat Developer Group Documentation Team

概要

管理者による Red Hat OpenShift Dev Spaces の操作に関する情報。

第1章 インストールの準備

OpenShift Dev Spaces インストールを準備するには、OpenShift Dev Spaces エコシステムおよびデプロイメントの制約について確認します。

1.1. サポート対象のプラットフォーム

OpenShift Dev Spaces は、次の CPU アーキテクチャー上の OpenShift 4.12 - 4.15 で実行されます。

  • AMD64 および Intel 64 (x86_64)
  • IBM Power (ppc64le) および IBM Z (s390x)

1.2. dsc 管理ツールのインストール

Red Hat OpenShift Dev Spaces コマンドライン管理ツールである dsc は、Microsoft Windows、Apple MacOS、および Linux にインストールできます。dsc を使用すると、サーバーの起動、停止、更新、削除など、OpenShift Dev Spaces サーバーの操作を実行できます。

前提条件

手順

  1. https://developers.redhat.com/products/openshift-dev-spaces/download から $HOME などのディレクトリーにアーカイブをダウンロードします。
  2. アーカイブで tar xvzf を実行して、/dsc ディレクトリーをデプロイメントします。
  3. デプロイメントした /dsc/bin サブディレクトリーを $PATH に追加します。

検証

  • dsc を実行して、その情報を表示します。

    $ dsc

1.3. アーキテクチャー

図1.1 Dev Workspace Operator を使用した高度な OpenShift Dev Spaces アーキテクチャー

devspaces と devworkspace との連携

OpenShift Dev Spaces は、3 つのコンポーネントのグループで実行されます。

OpenShift Dev Spaces サーバーコンポーネント
ユーザープロジェクトおよびワークスペースの管理。主な設定要素はユーザーダッシュボードで、ユーザーはここから自分のワークスペースを制御します。
Dev ワークスペースの演算子
User ワークスペースの実行に必要な OpenShift オブジェクトを作成し、制御します。PodServices、および PersistentVolumes が含まれます。
User ワークスペース
コンテナーベースの開発環境、IDE を含みます。

これらの OpenShift の機能のロールは中心的なものです。

Dev ワークスペースのカスタムリソース
ユーザーワークスペースを表す有効な OpenShift オブジェクト。OpenShift Dev Spaces で操作します。3 つのグループのコンポーネントのコミュニケーションチャンネルとなります。
OpenShift のロールベースアクセスコントロール (RBAC)
すべてのリソースへのアクセスを制御します。

1.3.1. サーバーコンポーネント

OpenShift Dev Spaces サーバーコンポーネントにより、マルチテナンシーとワークスペースの管理が確保されます。

図1.2 Dev Workspace Operator と対話する OpenShift Dev Spaces サーバーコンポーネント

devspaces デプロイメントが devworkspace と対話する
1.3.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.3.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.3.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 ゲートウェイと他のコンポーネントとの対話

OpenShift Dev Spaces ゲートウェイと他のコンポーネントとの対話
1.3.1.4. ユーザーダッシュボード

ユーザーダッシュボードは、Red Hat OpenShift Dev Spaces のランディングページです。OpenShift Dev Spaces ユーザーは、ユーザーダッシュボードを参照してワークスペースにアクセスし、管理します。これは React のアプリケーションです。OpenShift Dev Spaces デプロイメントは、devspaces-dashboard Deployment で起動します。

以下へのアクセス権が必要です。

図1.4 User ダッシュボードと他のコンポーネントとの対話

User ダッシュボードと他のコンポーネントとの対話

ユーザーがユーザーダッシュボードにワークスペースの起動を要求すると、ユーザーダッシュボードはこの一連のアクションを実行します。

  1. ユーザーがコードサンプルからワークスペースを作成する際に、「Devfile レジストリー」 から devfile を収集します。
  2. リポジトリー URL を 「Dev Spaces サーバー」 に送信し、ユーザーがリモート devfile からワークスペースを作成する際に devfile が返されることを想定します。
  3. ワークスペースを記述した devfile を読み込みます。
  4. 「プラグインレジストリー」 から追加のメタデータを収集します。
  5. その情報を Dev Workspace Custom Resource に変換します。
  6. OpenShift API を使用して、ユーザープロジェクトに Dev Workspace Custom Resource を作成します。
  7. Dev Workspace Custom Resource のステータスを監視します。
  8. 実行中のワークスペース IDE にユーザーをリダイレクトします。
1.3.1.5. Devfile レジストリー

関連情報

OpenShift Dev Spaces devfile レジストリーは、すぐに使用できるワークスペースを作成するためのサンプル devfile のリストを提供するサービスです。「ユーザーダッシュボード」 は、DashboardCreate Workspace ページにサンプルリストを表示します。各サンプルには、Devfile v2 が含まれています。OpenShift Dev Spaces デプロイメントでは、devfile-registry デプロイメントで 1 つの devfile レジストリーインスタンスを起動します。

図1.5 他のコンポーネントとの相互作用を登録する Devfile

devspaces devfile レジストリーの対話
1.3.1.6. Dev Spaces サーバー

OpenShift Dev Spaces サーバーの主な機能は次のとおりです。

  • ユーザーネームスペースの作成
  • ユーザーネームスペースに必要なシークレットと Config Map のプロビジョニング
  • Git サービスプロバイダーとの統合による devfile の取得および認証

OpenShift Dev Spaces サーバーは、HTTP REST API を公開する Java Web サービスで、以下へのアクセスが必要です。

  • Git サービスプロバイダー
  • OpenShift API

図1.6 OpenShift Dev Spaces サーバーと他のコンポーネントとの対話

OpenShift Dev Spaces サーバーと他のコンポーネントとの対話
1.3.1.7. プラグインレジストリー

各 OpenShift Dev Spaces ワークスペースは、特定のエディターおよび関連する拡張機能のセットで始まります。OpenShift Dev Spaces プラグインレジストリーは、利用可能なエディターおよびエディターエクステンションの一覧を提供します。各エディターや拡張機能については、Devfile v2 に記載されています。

「ユーザーダッシュボード」 は、レジストリーの内容を読み取っています。

図1.7 他のコンポーネントとのプラグインレジストリーの相互作用

他のコンポーネントとのプラグインレジストリーの相互作用

1.3.2. User ワークスペース

図1.8 User ワークスペースと他のコンポーネントとの対話

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.9 OpenShift Dev Spaces ワークスペースコンポーネント

ワークスペースコンポーネント

この図では、実行中のワークスペースが 1 つあります。

1.4. Dev Spaces リソース要件の計算

OpenShift Dev Spaces Operator、Dev Workspace Controller、およびユーザーワークスペースは Pod のセットで設定されます。Pod は、CPU とメモリーの制限と要求のリソース消費に影響します。

注記

example devfile への次のリンクは、上流コミュニティーからの資料へのポインターです。この資料は、利用可能な最新のコンテンツと最新のベストプラクティスを表しています。これらのヒントは Red Hat の QE 部門によってまだ精査されておらず、広範なユーザーグループによってまだ証明されていません。この情報は慎重に使用してください。生産目的ではなく、教育および開発目的で使用するのが最適です。

手順

  1. 開発環境の定義に使用される devfile に依存するワークスペースのリソース要件を特定します。これには、devfile の components セクションで明示的に指定されたワークスペースコンポーネントの識別が含まれます。

    • 以下は、次のコンポーネントを含む devfile の例 です。

      例1.1 tools

      devfile の tools コンポーネントは、以下の要求および制限を定義します。

          memoryLimit: 6G
          memoryRequest: 512M
          cpuRequest: 1000m
          cpuLimit: 4000m

      例1.2 postgresql

      postgresql コンポーネントはリクエストと制限を定義しないため、専用コンテナーのデフォルトに戻ります。

          memoryLimit: 128M
          memoryRequest: 64M
          cpuRequest: 10m
          cpuLimit: 1000m
    • ワークスペースの起動中、内部 che-gateway コンテナーには次のリクエストと制限が暗黙的にプロビジョニングされます。

          memoryLimit: 256M
          memoryRequest: 64M
          cpuRequest: 50m
          cpuLimit: 500m
  2. 各ワークスペースに必要なリソースの合計を計算します。複数の devfile を使用する場合は、予想されるすべての devfile に対してこの計算を繰り返します。

    例1.3 前の手順の example devfile のワークスペース要件

    目的Podコンテナー名メモリー制限メモリー要求CPU limitCPU request

    開発者ツール

    workspace

    tools

    6 GiB

    512 MiB

    4000 m

    1000 m

    Database

    workspace

    postgresql

    128 MiB

    64 MiB

    1000 m

    10 m

    OpenShift Dev Spaces ゲートウェイ

    workspace

    che-gateway

    256 MiB

    64 MiB

    500 m

    50 m

    Total

    6.4 GiB

    640 MiB

    5500 m

    1060 m

  3. ワークスペースごとに計算されたリソースに、すべてのユーザーが同時に実行すると予想されるワークスペースの数を掛けます。
  4. OpenShift Dev Spaces Operator、オペランド、および Dev Workspace Controller の要件の合計を計算します。

    表1.1 OpenShift Dev Spaces Operator、オペランド、および Dev Workspace Controller のデフォルト要件
    目的Pod の名前コンテナー名メモリー制限メモリー要求CPU limitCPU request

    OpenShift Dev Spaces 演算子

    devspaces-operator

    devspaces-operator

    256 MiB

    64 MiB

    500 m

    100 m

    OpenShift Dev Spaces Server

    devspaces

    devspaces-server

    1 GiB

    512 MiB

    1000 m

    100 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

    1000 m

    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 MiB

    32 MiB

    500 m

    100 m

    プラグインレジストリー

    plugin-registry

    plugin-registry

    256 MiB

    32 MiB

    500 m

    100 m

    Dev Workspace Controller Manager

    devworkspace-controller-manager

    devworkspace-controller

    1 GiB

    100 MiB

    1000 m

    250 m

    Dev Workspace Controller Manager

    devworkspace-controller-manager

    kube-rbac-proxy

    該当なし

    該当なし

    該当なし

    該当なし

    Dev Workspace Webhook Server

    devworkspace-webhook-server

    webhook-server

    300 MiB

    20 MiB

    200 m

    100 m

    Dev Workspace Operator Catalog

    devworkspace-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

    該当なし

    該当なし

    該当なし

    該当なし

    Total

    9 GiB

    1.2 GiB

    6.9

    1.3

第2章 Dev Spaces のインストール

このセクションでは、Red Hat OpenShift Dev Spaces をインストールする手順を説明します。

OpenShift Dev Spaces のインスタンスは、クラスターごとに 1 つだけデプロイできます。

2.1. クラウドでの Dev Spaces のインストール

Red Hat OpenShift Dev Spaces をクラウドでデプロイして実行します。

前提条件

2.1.1. クラウドでの OpenShift Dev Spaces のデプロイ

dsc ツールを使用してクラウドで OpenShift Dev Spaces Server を起動するには、以下の手順に従ってください。

2.1.2. CLI を使用して OpenShift に Dev Spaces をインストールする

OpenShift Dev Spaces を OpenShift にインストールできます。

前提条件

手順

  1. オプション: この OpenShift クラスターに OpenShift Dev Spaces をデプロイした場合は、以前の OpenShift Dev Spaces インスタンスが削除されていることを確認してください。

    $ dsc server:delete
  2. OpenShift Dev Spaces インスタンスを作成します。

    $ dsc server:deploy --platform openshift

検証手順

  1. OpenShift Dev Spaces インスタンスのステータスを確認します。

    $ dsc server:status
  2. OpenShift Dev Spaces クラスターインスタンスに移動します。

    $ dsc dashboard:open

2.1.3. Web コンソールを使用して OpenShift に Dev Spaces をインストールする

コマンドラインで OpenShift Dev Spaces をインストール できない場合は、OpenShift Web コンソールからインストールできます。

前提条件

手順

  1. OpenShift Web コンソールの 管理者 ビューで、OperatorsOperatorHub に移動し、Red Hat OpenShift Dev Spaces を検索します。
  2. Red Hat OpenShift Dev Spaces Operator をインストールします。

    ヒント
    注意

    Red Hat OpenShift Dev Spaces Operator は、Dev Workspace Operator に依存します。Red Hat OpenShift Dev Spaces Operator を手動でデフォルト以外の namespace にインストールする場合は、Dev Workspace Operator も同じ namespace にインストールされていることを確認してください。これは、Operator Lifecycle Manager が、Red Hat OpenShift Dev Spaces Operator namespace 内の依存関係として Dev Workspace Operator をインストールしようとすることから、Red Hat OpenShift Dev Spaces Operator が別の namespace にインストールされている場合は、Dev Workspace Operator は 2 つの競合するインストールとなる可能性があるため、確認が必要となります。

注意

クラスターに Web Terminal Operator を オンボードする場合は、両方とも Dev Workspace Operator に依存しているため、Red Hat OpenShift Dev Spaces Operator と同じインストール名前空間を使用するようにしてください。Web Terminal Operator、Red Hat OpenShift Dev Spaces Operator、および Dev Workspace Operator は、同じ名前空間にインストールする必要があります。

  1. 次のように、OpenShift で openshift-devspaces プロジェクトを作成します。

    oc create namespace openshift-devspaces
  2. OperatorsInstalled OperatorsRed Hat OpenShift Dev Spaces インスタンスの仕様Create CheClusterYAML view に移動します。
  3. YAML view で、namespace: openshift-operatorsnamespace: openshift-devspaces に置き換えます。
  4. Create を選択します。

    ヒント

検証

  1. Red Hat OpenShift Dev Spaces インスタンスの仕様 で、devspaces に移動し、Details タブに移動します。

  1. Message の下に None があることを確認します。これはエラーがないことを意味します。
  2. Red Hat OpenShift Dev Spaces URL で、OpenShift Dev Spaces インスタンスの URL が表示されるまで待ち、URL を開いて OpenShift Dev Spaces ダッシュボードを確認します。
  3. Resources タブで、OpenShift Dev Spaces デプロイメントのリソースとそのステータスを表示します。

2.1.4. 制限された環境での Dev Spaces のインストール

制限されたネットワークで動作する OpenShift クラスターでは、パブリックリソースは利用できません。

ただし、OpenShift Dev Spaces をデプロイしてワークスペースを実行するには、以下のパブリックリソースが必要です。

  • Operator カタログ
  • コンテナーイメージ
  • サンプルプロジェクト

これらのリソースを使用可能にするには、OpenShift クラスターからアクセス可能なレジストリー内のそれらのコピーに置き換えます。

前提条件

手順

  1. ミラーリングスクリプトをダウンロードして実行し、カスタム Operator カタログをインストールし、関連するイメージをミラーリングします (prepare-restricted-environment.sh)。

    $ bash prepare-restricted-environment.sh \
      --devworkspace_operator_index registry.redhat.io/redhat/redhat-operator-index:v4.15\
      --devworkspace_operator_version "v0.26.0" \
      --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.15" \
      --prod_operator_package_name "devspaces" \
      --prod_operator_bundle_name "devspacesoperator" \
      --prod_operator_version "v3.12.0" \
      --my_registry "<my_registry>" 1
    1
    イメージがミラーリングされるプライベート Docker レジストリー
  2. 前の手順で で che-operator-cr-patch.yaml に指定した設定で OpenShift Dev Spaces をインストールします。

    $ dsc server:deploy \
      --platform=openshift \
      --olm-channel stable \
      --catalog-source-name=devspaces-disconnected-install \
      --catalog-source-namespace=openshift-marketplace \
      --skip-devworkspace-operator \
      --che-operator-cr-patch-yaml=che-operator-cr-patch.yaml
  3. OpenShift Dev Spaces namespace からユーザープロジェクト内のすべての Pod への受信トラフィックを許可します。「ネットワークポリシーの設定」 を参照してください。
2.1.4.1. Ansible サンプルのセットアップ

制限された環境で Ansible サンプルを使用するには、次の手順に従います。

前提条件

  • Microsoft Visual Studio Code - オープンソース IDE
  • 64 ビット x86 システム

手順

  1. 以下のイメージをミラーリングします。

    quay.io/devspaces/ansible-creator-ee@sha256:3ff5d2d5f17c9c1e4a352d9922e27be09641647ac028a56845aaab6f6e3c7958
    quay.io/devspaces/ansible-creator-ee@sha256:04c7aa48f34ab28dc21f36acfe472b249f29c24d1a52d98b2c8da75dd6587d79
  2. 以下のドメインへのアクセスを許可するようにクラスタープロキシーを設定します。

    .ansible.com
    .ansible-galaxy-ng.s3.dualstack.us-east-1.amazonaws.com
注記

以下の IDE および CPU アーキテクチャーのサポートは、今後のリリースで計画されています。

2.2. 完全修飾ドメイン名 (FQDN) の検索

組織の OpenShift Dev Spaces インスタンスの完全修飾ドメイン名 (FQDN) は、コマンドラインまたは OpenShift Web コンソールで取得できます。

ヒント

次のように、OpenShift Web コンソールの Administrator ビューで、組織の OpenShift Dev Spaces インスタンスの FQDN を見つけることができます。OperatorInstalled OperatorsRed Hat OpenShift Dev Spaces インスタンスの仕様devspacesRed Hat OpenShift Dev Spaces URL に移動します。

前提条件

手順

  1. 以下のコマンドを実行します。

    oc get checluster devspaces -n openshift-devspaces -o jsonpath='{.status.cheURL}'

第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 ファイルを編集して設定できます。このファイルには、各コンポーネント (devWorkspacecheServerpluginRegistrydevfileRegistrydashboard および imagePuller) を設定するセクションが含まれています。

Red Hat OpenShift Dev Spaces Operator は、CheCluster カスタムリソースを OpenShift Dev Spaces インストールの各コンポーネントで使用できる Config Map に変換します。

OpenShift プラットフォームは、設定を各コンポーネントに適用し、必要な Pod を作成します。OpenShift がコンポーネントの設定で変更を検知すると、Pod を適宜再起動します。

例3.1 OpenShift Dev Spaces サーバーコンポーネントの主なプロパティーの設定

  1. cheServer コンポーネントセクションで適切な変更を加えた CheCluster カスタムリソース YAML ファイルを適用します。
  2. Operator は、che ConfigMap を生成します。
  3. OpenShift は ConfigMap の変更を検出し、OpenShift Dev Spaces Pod の再起動をトリガーします。

3.1.1. dsc を使用したインストール時に CheCluster カスタムリソースの設定

適切な設定で OpenShift Dev Space をデプロイするには、OpenShift Dev Space のインストール時に CheCluster カスタムリソース YAML ファイルを編集します。それ以外の場合は、OpenShift Dev Spaces デプロイメントは Operator で設定されたデフォルト設定パラメーターを使用します。

前提条件

手順

  • 設定する 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>

検証

  1. 設定されたプロパティーの値を確認します。

    $ 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 の使用開始を 参照してください。

手順

  1. クラスター上の CheCluster カスタムリソースを編集します。

    $ oc edit checluster/devspaces -n openshift-devspaces
  2. ファイルを保存して閉じ、変更を適用します。

検証

  1. 設定されたプロパティーの値を確認します。

    $ oc get configmap che -o jsonpath='{.data.<configured_property>}' \
    -n openshift-devspaces

3.1.3. CheCluster カスタムリソースフィールドの参照

このセクションでは、CheCluster カスタムリソースのカスタマイズに使用できるすべてのフィールドについて説明します。

例3.2 最小の CheCluster カスタムリソースの例。

apiVersion: org.eclipse.che/v2
kind: CheCluster
metadata:
  name: devspaces
  namespace: openshift-devspaces
spec:
  components: {}
  devEnvironments: {}
  networking: {}
表3.1 開発環境の設定オプション。
プロパティー説明デフォルト

containerBuildConfiguration

コンテナーのビルド設定。

 

defaultComponents

DevWorkspaces に適用されるデフォルトコンポーネント。デフォルトコンポーネントは、Devfile にコンポーネントが含まれていない場合に使用します。

 

defaultEditor

一緒に作成するワークスペースのデフォルトエディター。プラグイン ID または URI を指定できます。プラグイン ID には publisher/plugin/version 形式が必要です。URI は http:// または https:// で始まる必要があります。

 

defaultNamespace

ユーザーのデフォルトの namespace。

{ "autoProvision": true, "template": "<username>-che"}

defaultPlugins

DevWorkspaces に適用されるデフォルトのプラグイン。

 

deploymentStrategy

DeploymentStrategy は、既存のワークスペース Pod を新しい Pod に置き換えるために使用するデプロイメントストラテジーを定義します。利用可能なデプロイメントは Recreate および RollingUpdate です。Recreate デプロイメントストラテジーでは、新規ワークスペース Pod が作成される前に既存のワークスペース Pod が強制終了されます。RollingUpdate デプロイメントストラテジーでは、新しいワークスペース Pod が作成され、新しいワークスペース Pod が ready 状態にある場合にのみ既存のワークスペース Pod が削除されます。指定しない場合、デフォルトの Recreate デプロイメントストラテジーが使用されます。

 

disableContainerBuildCapabilities

コンテナービルド機能を無効にします。false (デフォルト値) に設定すると、devEnvironments.security.containerSecurityContext フィールドは無視され、コンテナー SecurityContext (\n containerSecurityContext: allowPrivilegeEscalation: true capabilities: add: - SETGID - SETUID) が適用されます。

 

gatewayContainer

GatewayContainer の設定。

 

imagePullPolicy

imagePullPolicy は、DevWorkspace のコンテナーに使用される imagePullPolicy を定義します。

 

maxNumberOfRunningWorkspacesPerUser

ユーザーごとの実行中のワークスペースの最大数。値 -1 を指定すると、ユーザーはワークスペースを無制限に実行できます。

 

maxNumberOfWorkspacesPerUser

ユーザーが保持できる停止中と実行中の両方のワークスペースの総数。値 -1 を指定すると、ユーザーはワークスペースを無制限に保持できます。

-1

nodeSelector

ノードセレクターは、ワークスペース Pod を実行できるノードを制限します。

 

persistUserHome

persistUserHome は、ワークスペースでユーザーのホームディレクトリーを永続化するための設定オプションを定義します。

 

podSchedulerName

ワークスペース Pod の Pod スケジューラー。指定しない場合、Pod スケジューラーはクラスターのデフォルトのスケジューラーに設定されます。

 

projectCloneContainer

プロジェクトクローンコンテナーの設定。

 

secondsOfInactivityBeforeIdling

ワークスペースのアイドルタイムアウト (秒単位)。このタイムアウトは、アクティビティーがない場合にワークスペースがアイドル状態になるまでの期間です。非アクティブによるワークスペースのアイドリングを無効にするには、この値を -1 に設定します。

1800

secondsOfRunBeforeIdling

ワークスペースのタイムアウトを秒単位で実行します。このタイムアウトは、ワークスペースが実行される最大期間です。ワークスペースの実行タイムアウトを無効にするには、この値を -1 に設定します。

-1

security

ワークスペースのセキュリティー設定。

 

serviceAccount

ワークスペースの開始時に DevWorkspace オペレーターが使用する ServiceAccount。

 

serviceAccountTokens

投影されたボリュームとしてワークスペース Pod にマウントされる ServiceAccount トークンのリスト。

 

startTimeoutSeconds

StartTimeoutSeconds は、ワークスペースが自動的に失敗するまでの開始にかかる最大期間 (秒単位) を決定します。指定しない場合、デフォルト値の 300 秒 (5 分) が使用されます。

300

ストレージ

ワークスペースの永続ストレージ。

{ "pvcStrategy": "per-user"}

tolerations

ワークスペース Pod の Pod 許容範囲によって、ワークスペース Pod を実行できる場所が制限されます。

 

trustedCerts

信頼できる証明書の設定。

 

user

ユーザー設定

 
表3.2 defaultNamespace オプション。
プロパティー説明デフォルト

autoProvision

ユーザー namespace の自動作成を許可するかどうかを示します。false に設定すると、クラスター管理者がユーザー namespace を事前に作成する必要があります。

true

テンプレート

ユーザー namespace を事前に作成しない場合には、このフィールドは最初のワークスペースの起動時に作成される Kubernetes namespace を定義します。che-workspace-<username> など、<username><userid> のプレースホルダーを使用できます。

"<username>-che"

表3.3 defaultPlugins オプション。
プロパティー説明デフォルト

editor

デフォルトのプラグインを指定するエディター ID。

 

plugins

指定されたエディターのデフォルトのプラグイン URI。

 
表3.4 gatewayContainer オプション。
プロパティー説明デフォルト

env

コンテナーに設定する環境変数のリスト。

 

image

コンテナーイメージ。Operator によって提供されるデフォルトのコンテナーイメージを使用するには、これを省略するか、空のままにします。

 

imagePullPolicy

イメージプルポリシーデフォルト値は、nightlylatest、または latest イメージの場合は Always で、他の場合は IfNotPresent です。

 

name

コンテナー名

 

resources

このコンテナーに必要なコンピューティングリソース。

 
表3.5 storage オプション。
プロパティー説明デフォルト

perUserStrategyPvcConfig

per-user PVC ストラテジーを使用する場合の PVC 設定。

 

perWorkspaceStrategyPvcConfig

per-workspace PVC ストラテジーを使用する場合の PVC 設定。

 

pvcStrategy

OpenShift Dev Spaces サーバーの永続ボリューム要求ストラテジー。サポートされているストラテジーは、per-user (1 つのボリューム内のすべてのワークスペース PVC)、per-workspace (各ワークスペースに個別の PVC が与えられる)、ephemeral (ワークスペースが停止すると、ローカルの変更が失われる非永続ストレージ) です。

"per-user"

表3.6 per-user PVC ストラテジーオプション。
プロパティー説明デフォルト

claimSize

Persistent Volume Claim のサイズ。要求サイズを更新するには、要求サイズをプロビジョニングするストレージクラスがサイズ変更をサポートしている必要があります。

 

storageClass

Persistent Volume Claim のストレージクラス。省略されるか、空のままの場合は、デフォルトのストレージクラスが使用されます。

 
表3.7 per-workspace PVC ストラテジーオプション。
プロパティー説明デフォルト

claimSize

Persistent Volume Claim のサイズ。要求サイズを更新するには、要求サイズをプロビジョニングするストレージクラスがサイズ変更をサポートしている必要があります。

 

storageClass

Persistent Volume Claim のストレージクラス。省略されるか、空のままの場合は、デフォルトのストレージクラスが使用されます。

 
表3.8 trustedCerts オプション。
プロパティー説明デフォルト

gitTrustedCertsConfigMapName

ConfigMap には、OpenShift Dev Spaces コンポーネントに伝播し、Git に特定の設定を提供するための証明書が含まれています。次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/deploying-che-with-support-for-git-repositories-with-self-signed-certificates/ ConfigMap には、app.kubernetes.io/part-of=che.eclipse.org ラベルが付いています。

 
表3.9 containerBuildConfiguration オプション。
プロパティー説明デフォルト

openShiftSecurityContextConstraint

コンテナーを構築するための OpenShift セキュリティーコンテキスト制約。

"container-build"

表3.10 OpenShift Dev Spaces コンポーネントの設定。
プロパティー説明デフォルト

cheServer

OpenShift Dev Spaces サーバーに関連する一般的な設定。

{ "debug": false, "logLevel": "INFO"}

dashboard

OpenShift Dev Spaces インストールで使用されるダッシュボードに関連する設定。

 

devWorkspace

DevWorkspace Operator の設定。

 

devfileRegistry

OpenShift Dev Spaces インストールで使用される Devfile レジストリーに関連する設定。

 

imagePuller

Kubernetes Image Puller の設定。

 

metrics

OpenShift Dev Spaces サーバーのメトリック設定。

{ "enable": true}

pluginRegistry

OpenShift Dev Spaces インストールで使用されるプラグインレジストリーに関連する設定。

 
表3.11 OpenShift Dev Spaces サーバーコンポーネントに関連する一般的な設定。
プロパティー説明デフォルト

clusterRoles

OpenShift Dev Spaces ServiceAccount に割り当てられた追加の ClusterRoles。各ロールには、app.kubernetes.io/part-of=che.eclipse.org ラベルが必要です。デフォルトのロールは、<devspaces-namespace>-cheworkspaces-clusterrole - <devspaces-namespace>-cheworkspaces-namespaces-clusterrole - <devspaces-namespace>-cheworkspaces-devworkspace-clusterrole で、ここでの <che-namespace> は CheCluster CRD が作成される namespace です。OpenShift Dev Spaces Operator は、付与するためにはこれらの ClusterRoles のすべてのパーミッションをすでに持っていなければなりません。

 

debug

OpenShift Dev Spaces サーバーのデバッグモードを有効にします。

false

デプロイメント

デプロイメントオーバーライドオプション。

 

extraProperties

CheCluster カスタムリソース (CR) の他のフィールドからすでに生成されている値に加えて、OpenShift Dev Spaces サーバーによって使用される、生成された che ConfigMap に適用される追加の環境変数のマップ。extraProperties フィールドに、他の CR フィールドから che で通常生成されるプロパティーが含まれる場合、extraProperties で定義された値が代わりに使用されます。

 

logLevel

OpenShift Dev Spaces サーバーのログレベル: INFO または DEBUG

"INFO"

proxy

Kubernetes クラスターのプロキシーサーバー設定。OpenShift クラスターに追加の設定は必要ありません。これらの設定を OpenShift クラスターに指定することで、OpenShift プロキシー設定をオーバーライドします。

 
表3.12 proxy オプション。
プロパティー説明デフォルト

credentialsSecretName

プロキシーサーバーの userpassword 含むシークレット名。シークレットには、app.kubernetes.io/part-of=che.eclipse.org ラベルが必要です。

 

nonProxyHosts

プロキシーをバイパスして直接アクセスできるホストのリスト。ワイルドカードドメインを指定するには、次の形式 .<DOMAIN> を使用します。例: - localhost - my.host.com - 123.42.12.32 プロキシー設定が必要な場合にのみ使用します。Operator は OpenShift クラスター全体のプロキシー設定を尊重し、カスタムリソースで nonProxyHost を定義すると、クラスタープロキシー設定の非プロキシーホストリストとカスタムリソースで定義されたリストがマージされます。次のページを参照してください: https://docs.openshift.com/container-platform/4.4/networking/enable-cluster-wide-proxy.html

 

port

プロキシーサーバーポート。

 

url

プロキシーサーバーの URL (プロトコル + ホスト名)。プロキシー設定が必要な場合にのみ使用してください。Operator は OpenShift クラスター全体のプロキシー設定を尊重し、カスタムリソースで URL を定義すると、クラスタープロキシー設定がオーバーライドされます。次のページを参照してください: https://docs.openshift.com/container-platform/4.4/networking/enable-cluster-wide-proxy.html

 
表3.13 OpenShift Dev Spaces インストールで使用されるプラグインレジストリーコンポーネントに関連する設定。
プロパティー説明デフォルト

デプロイメント

デプロイメントオーバーライドオプション。

 

disableInternalRegistry

内部プラグインレジストリーを無効にします。

 

externalPluginRegistries

外部プラグインレジストリー。

 

openVSXURL

VSX レジストリー URL を開きます。省略した場合は、埋め込みインスタンスが使用されます。

 
表3.14 externalPluginRegistries オプション。
プロパティー説明デフォルト

url

プラグインレジストリーのパブリック URL。

 
表3.15 OpenShift Dev Spaces インストールで使用される Devfile レジストリーコンポーネントに関連する設定。
プロパティー説明デフォルト

デプロイメント

デプロイメントオーバーライドオプション。

 

disableInternalRegistry

内部 devfile レジストリーを無効にします。

 

externalDevfileRegistries

サンプルのすぐに使用できる devfile を提供する外部 devfile レジストリー。

 
表3.16 externalDevfileRegistries オプション。
プロパティー説明デフォルト

url

すぐに使用できるサンプルの devfile を提供する devfile レジストリーのパブリック UR。

 
表3.17 OpenShift Dev Spaces インストールで使用される Dashboard コンポーネントに関連する設定。
プロパティー説明デフォルト

branding

Dashboard のブランディングリソース

 

デプロイメント

デプロイメントオーバーライドオプション。

 

headerMessage

ダッシュボードのヘッダーメッセージ。

 

logLevel

ダッシュボードのログレベル。

"ERROR"

表3.18 headerMessage オプション。
プロパティー説明デフォルト

表示

ダッシュボードにメッセージを表示するように指示します。

 

text

ユーザーダッシュボードに表示される警告メッセージ。

 
表3.19 Kubernetes Image Puller コンポーネントの設定。
プロパティー説明デフォルト

enable

コミュニティーでサポートされている Kubernetes Image Puller Operator をインストールして設定します。仕様を指定せずに値を true に設定すると、Operator によって管理されるデフォルトの Kubernetes Image Puller オブジェクトが作成されます。値を false に設定すると、仕様が提供されているかどうかに関係なく、Kubernetes Image Puller オブジェクトが削除され、Operator がアンインストールされます。spec.images フィールドを空のままにしておくと、推奨されるワークスペース関連のイメージのセットが自動的に検出され、インストール後に事前にプルされます。この Operator とその動作はコミュニティーによってサポートされていますが、そのペイロードは商用サポートされているイメージをプルするために商用サポートされている場合があることに注意してください。

 

spec

CheCluster で Image Puller を設定するための Kubernetes Image Puller 仕様。

 
表3.20 OpenShift Dev Spaces サーバーメトリックコンポーネントの設定。
プロパティー説明デフォルト

enable

OpenShift Dev Spaces サーバーエンドポイントの metrics を有効にします。

true

表3.21 ユーザーがリモート Git リポジトリーを操作できるようにする設定。
プロパティー説明デフォルト

azure

ユーザーが Azure DevOps Service (dev.azure.com) でホストされているリポジトリーを操作できるようにします。

 

bitbucket

ユーザーが Bitbucket でホストされているリポジトリー (bitbucket.org または自己ホスト型) を操作できるようにします。

 

github

ユーザーが GitHub (github.com または GitHub Enterprise) でホストされているリポジトリーを操作できるようにします。

 

gitlab

ユーザーが GitLab (gitlab.com または自己ホスト型) でホストされているリポジトリーを操作できるようにします。

 
表3.22 github オプション。
プロパティー説明デフォルト

disableSubdomainIsolation

サブドメイン分離を無効にします。che.eclipse.org/scm-github-disable-subdomain-isolation アノテーションを優先して非推奨になりました。詳細については、次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-2-for-github/

 

endpoint

GitHub サーバーのエンドポイント URL。che.eclipse.org/scm-server-endpoint アノテーションが推奨されるため、非推奨になりました。詳細については、次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-2-for-github/

 

secretName

Kubernetes シークレット。Base64 でエンコードされた GitHub OAuth クライアント ID と GitHub OAuth クライアントシークレットが含まれます。詳細については、次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-2-for-github/

 
表3.23 gitlab オプション。
プロパティー説明デフォルト

endpoint

GitLab サーバーのエンドポイント URL。che.eclipse.org/scm-server-endpoint アノテーションが推奨されるため、非推奨になりました。次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-2-for-gitlab/

 

secretName

Kubernetes シークレット。Base64 でエンコードされた GitHub アプリケーション ID と GitLab アプリケーションクライアントシークレットが含まれます。次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-2-for-gitlab/

 
表3.24 bitbucket オプション。
プロパティー説明デフォルト

endpoint

Bitbucket サーバーのエンドポイント URL。che.eclipse.org/scm-server-endpoint アノテーションが推奨されるため、非推奨になりました。次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-1-for-a-bitbucket-server/

 

secretName

Kubernetes シークレット。Base64 でエンコードされた Bitbucket OAuth 1.0 または OAuth 2.0 データが含まれます。詳細は、https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-1-for-a-bitbucket-server/ および https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-2-for-the-bitbucket-cloud/ を参照してください。

 
表3.25 azure オプション。
プロパティー説明デフォルト

secretName

Kubernetes シークレット。Base64 でエンコードされた Azure DevOps Service アプリケーション ID とクライアントシークレットが含まれます。次のページを参照してください: https://www.eclipse.org/che/docs/stable/administration-guide/cconfiguring-oauth-2-for-microsoft-azure-devops-services

 
表3.26 ネットワーク、OpenShift Dev Spaces 認証、および TLS 設定。
プロパティー説明デフォルト

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

認証設定

{ "gateway": { "configLabels": { "app": "che", "component": "che-gateway-config" } }}

domain

OpenShift クラスターの場合、Operator はドメインを使用してルートのホスト名を生成します。生成されたホスト名は、che-<devspaces-namespace>.<domain> のパターンに従います。<devspaces-namespace> は、CheCluster CRD が作成される namespace です。ラベルと組み合わせて、デフォルト以外の Ingress Controller によって提供されるルートを作成します。Kubernetes クラスターの場合、グローバル Ingress ドメインが含まれます。デフォルト値はありません。指定する必要があります。

 

hostname

インストールされた OpenShift Dev Spaces サーバーのパブリックホスト名。

 

ingressClassName

IngressClassName は、IngressClass クラスターリソースの名前です。クラス名が IngressClassName フィールドと kubernetes.io/ingress.class アノテーションの両方で定義されている場合、IngressClassName フィールドが優先されます。

 

labels

Ingress (OpenShift プラットフォームのルート) に設定されるラベルを定義します。

 

tlsSecretName

Ingress TLS ターミネーションのセットアップに使用されるシークレットの名前。フィールドが空の文字列の場合、デフォルトのクラスター証明書が使用されます。シークレットには、app.kubernetes.io/part-of=che.eclipse.org ラベルが必要です。

 
表3.27 auth オプション。
プロパティー説明デフォルト

advancedAuthorization

高度な承認設定。Che へのアクセスを許可するユーザーとグループを決定します。ユーザーは、allowUsers リストに含まれているか、allowGroups リストのグループのメンバーであり、denyUsers リストに含まれず、denyGroups リストのグループのメンバーでもない場合に、OpenShift Dev Spaces へのアクセスを許可されます。allowUsersallowGroups が空の場合、すべてのユーザーが Che にアクセスできます。DenyUsersDenyGroups が空の場合、すべてのユーザーが Che へのアクセスを拒否されます。

 

gateway

ゲートウェイ設定。

{ "configLabels": { "app": "che", "component": "che-gateway-config" }}

identityProviderURL

アイデンティティープロバイダーサーバーの公開 URL。

 

identityToken

アップストリームに渡される ID トークン。サポートされるトークンには、id_tokenaccess_token の 2 種類があります。デフォルト値は id_token です。このフィールドは、Kubernetes 専用に作成された OpenShift Dev Spaces インストールに固有であり、OpenShift では無視されます。

 

oAuthAccessTokenInactivityTimeoutSeconds

OpenShift 側で ID フェデレーションをセットアップするために使用される OpenShift OAuthClient リソースに設定するトークンの非アクティブタイムアウト。0 は、このクライアントのトークンがタイムアウトしないことを意味します。

 

oAuthAccessTokenMaxAgeSeconds

OpenShift 側で ID フェデレーションをセットアップするために使用される OpenShift OAuthClient リソースに設定するアクセストークンの最大有効期間。0 は有効期限がないことを意味します。

 

oAuthClientName

OpenShift 側でアイデンティティーフェデレーションを設定するために使用される OpenShift OAuthClient リソースの名前。

 

oAuthScope

アクセストークンのスコープ。このフィールドは、Kubernetes 専用に作成された OpenShift Dev Spaces インストールに固有であり、OpenShift では無視されます。

 

oAuthSecret

OpenShift 側でアイデンティティーフェデレーションを設定するために使用される OpenShift OAuthClient リソースに設定されたシークレットの名前。

 
表3.28 gateway オプション。
プロパティー説明デフォルト

configLabels

ゲートウェイ設定ラベル。

{ "app": "che", "component": "che-gateway-config"}

デプロイメント

デプロイメントオーバーライドオプション。ゲートウェイのデプロイメントは複数のコンテナーで設定されているため、設定では次の名前で区別する必要があります。gateway - configbump - oauth-proxy - kube-rbac-proxy

 

kubeRbacProxy

OpenShift Dev Spaces ゲートウェイ Pod 内の kube-rbac-proxy の設定。

 

oAuthProxy

OpenShift Dev Spaces ゲートウェイ Pod 内の oauth-proxy の設定。

 

traefik

OpenShift Dev Spaces ゲートウェイ Pod 内の Traefik の設定。

 
表3.29 OpenShift Dev Spaces イメージを格納する代替レジストリーの設定。
プロパティー説明デフォルト

hostname

イメージのプルに使用する別のコンテナーレジストリーの任意のホスト名または URL。この値は、OpenShift Dev Spaces デプロイメントに含まれるすべてのデフォルトのコンテナーイメージで定義されたコンテナーレジストリーのホスト名をオーバーライドします。これは、制限された環境で OpenShift Dev Spaces をインストールする場合にとくに役立ちます。

 

組織

イメージのプルに使用する別のレジストリーのオプションのリポジトリー名。この値は、OpenShift Dev Spaces デプロイメントに含まれるすべてのデフォルトのコンテナーイメージで定義されたコンテナーレジストリー組織をオーバーライドします。これは、制限された環境で OpenShift Dev Spaces をインストールする場合にとくに役立ちます。

 
表3.30 deployment オプション。
プロパティー説明デフォルト

コンテナー

Pod に属するコンテナーのリスト。

 

securityContext

Pod を実行する必要があるセキュリティーオプション。

 
表3.31 containers オプション。
プロパティー説明デフォルト

env

コンテナーに設定する環境変数のリスト。

 

image

コンテナーイメージ。Operator によって提供されるデフォルトのコンテナーイメージを使用するには、これを省略するか、空のままにします。

 

imagePullPolicy

イメージプルポリシーデフォルト値は、nightlylatest、または latest イメージの場合は Always で、他の場合は IfNotPresent です。

 

name

コンテナー名

 

resources

このコンテナーに必要なコンピューティングリソース。

 
表3.32 containers オプション。
プロパティー説明デフォルト

limits

許可されるコンピューティングリソースの最大量について説明します。

 

request

必要なコンピューティングリソースの最小量について説明します。

 
表3.33 request オプション。
プロパティー説明デフォルト

cpu

CPU、コア単位。(500m = 0.5 コア) 値が指定されていない場合は、コンポーネントに応じてデフォルト値が設定されます。値が 0 の場合、コンポーネントには値が設定されません。

 

memory

メモリー (バイト単位)。(500Gi = 500GiB = 500 * 1024 * 1024 * 1024) 値が指定されていない場合は、コンポーネントに応じてデフォルト値が設定されます。値が 0 の場合、コンポーネントには値が設定されません。

 
表3.34 limits オプション。
プロパティー説明デフォルト

cpu

CPU、コア単位。(500m = 0.5 コア) 値が指定されていない場合は、コンポーネントに応じてデフォルト値が設定されます。値が 0 の場合、コンポーネントには値が設定されません。

 

memory

メモリー (バイト単位)。(500Gi = 500GiB = 500 * 1024 * 1024 * 1024) 値が指定されていない場合は、コンポーネントに応じてデフォルト値が設定されます。値が 0 の場合、コンポーネントには値が設定されません。

 
表3.35 securityContext オプション。
プロパティー説明デフォルト

fsGroup

Pod の全コンテナーに適用される特別な補助グループです。デフォルト値は 1724 です。

 

runAsUser

コンテナープロセスのエントリーポイントを実行するための UID。デフォルト値は 1724 です。

 
表3.36 CheCluster カスタムリソースの status が 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。

 

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 の実行中のインスタンス

手順

  1. OpenShift Dev Spaces がデプロイされている OpenShift プロジェクトに新しい OpenShift シークレットまたは ConfigMap を作成します。作成される予定のオブジェクトのラベルは、ラベルのセットと一致する必要があります。

    • app.kubernetes.io/part-of: che.eclipse.org
    • app.kubernetes.io/component: <DEPLOYMENT_NAME>-<OBJECT_KIND>
    • <DEPLOYMENT_NAME> には、以下のデプロイメントのいずれかを使用します。

      • devspaces-dashboard
      • 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
...
  1. アノテーションの値を設定します。アノテーションは、指定されたオブジェクトがファイルとしてマウントされていることを示す必要があります。

    • 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:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
...

または、以下を実行します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-data
  annotations:
    che.eclipse.org/mount-as: file
    che.eclipse.org/mount-path: /data
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
...

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 コンテナーでの変更を表示するには、シークレットまたは ConfigMap オブジェクト全体を再作成します。

3.3.1.2. シークレットまたは ConfigMap を subPath として OpenShift Dev Spaces コンテナーにマウントする

前提条件

  • Red Hat OpenShift Dev Spaces の実行中のインスタンス

手順

  1. OpenShift Dev Spaces がデプロイされている OpenShift プロジェクトに新しい OpenShift シークレットまたは ConfigMap を作成します。作成される予定のオブジェクトのラベルは、ラベルのセットと一致する必要があります。

    • app.kubernetes.io/part-of: che.eclipse.org
    • app.kubernetes.io/component: <DEPLOYMENT_NAME>-<OBJECT_KIND>
    • <DEPLOYMENT_NAME> には、以下のデプロイメントのいずれかを使用します。

      • devspaces-dashboard
      • 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
...
  1. アノテーションの値を設定します。アノテーションは、指定されたオブジェクトが subPath としてマウントされていることを示す必要があります。

    • che.eclipse.org/mount-as: subpath - オブジェクトが subPath としてマウントされていることを示します。
    • che.eclipse.org/mount-path: <TARGET_PATH> - 必要なマウントパスを指定します。

例3.8 以下に例を示します。

apiVersion: v1
kind: Secret
metadata:
  name: custom-data
  annotations:
    che.eclipse.org/mount-as: subpath
    che.eclipse.org/mount-path: /data
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
...

または、以下を実行します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-data
  annotations:
    che.eclipse.org/mount-as: subpath
    che.eclipse.org/mount-path: /data
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
...

OpenShift オブジェクトには、コンテナーにマウントされたファイル名と名前が一致する必要がある複数の項目を含めることができます。

例3.9 以下に例を示します。

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: subpath
    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: subpath
    che.eclipse.org/mount-path: /data
data:
  ca.crt: <data content here>

これにより、ca.crt という名前のファイルが OpenShift Dev Spaces コンテナーの /data パスにマウントされます。

重要

OpenShift Dev Spaces コンテナーでの変更を表示するには、シークレットまたは ConfigMap オブジェクト全体を再作成します。

3.3.1.3. シークレットまたは ConfigMap を環境変数として OpenShift Dev Spaces コンテナーにマウントする

前提条件

  • Red Hat OpenShift Dev Spaces の実行中のインスタンス

手順

  1. OpenShift Dev Spaces がデプロイされている OpenShift プロジェクトに新しい OpenShift シークレットまたは ConfigMap を作成します。作成される予定のオブジェクトのラベルは、ラベルのセットと一致する必要があります。

    • app.kubernetes.io/part-of: che.eclipse.org
    • app.kubernetes.io/component: <DEPLOYMENT_NAME>-<OBJECT_KIND>
    • <DEPLOYMENT_NAME> には、以下のデプロイメントのいずれかを使用します。

      • devspaces-dashboard
      • devfile-registry
      • plugin-registry
      • devspaces

        および

    • <jasper_KIND> は以下のいずれかになります。

      • secret

        または、以下を実行します。

      • configmap

例3.10 以下に例を示します。

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
...
  1. アノテーションの値を設定します。アノテーションは、指定されたオブジェクトが環境変数としてマウントされていることを示す必要があります。

    • che.eclipse.org/mount-as: env -: オブジェクトを環境変数としてマウントするように指定します。
    • che.eclipse.org/env-name: <FOOO_ENV>: オブジェクトキー値のマウントに必要な環境変数名を指定します。

例3.11 以下に例を示します。

apiVersion: v1
kind: Secret
metadata:
  name: custom-settings
  annotations:
    che.eclipse.org/env-name: FOO_ENV
    che.eclipse.org/mount-as: env
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
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:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
data:
  mykey: myvalue

これにより、2 つの環境変数が

  • FOO_ENV
  • myvalue

OpenShift Dev Spaces コンテナーにプロビジョニングされている。

オブジェクトに複数のデータ項目がある場合、環境変数の名前は以下のようにそれぞれのデータキーについて指定される必要があります。

例3.12 以下に例を示します。

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:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
stringData:
  mykey: <data_content_here>
  otherkey: <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:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
data:
  mykey: <data content here>
  otherkey: <data content here>

これにより、2 つの環境変数が

  • FOO_ENV
  • OTHER_ENV

OpenShift Dev Spaces コンテナーにプロビジョニングされている。

注記

OpenShift シークレットのアノテーション名の最大長さは 63 文字です。ここで、9 文字は、/ で終わる接頭辞用に予約されます。これは、オブジェクトに使用できるキーの最大長さの制限として機能します。

重要

OpenShift Dev Spaces コンテナーでの変更を表示するには、シークレットまたは ConfigMap オブジェクト全体を再作成します。

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.13 ワークスペースのデフォルトのメモリー制限の上書き

注記

OpenShift Dev Spaces Operator の以前のバージョンには、このロールを果たすために custom という名前の ConfigMap がありました。OpenShift Dev Spaces オペレーターが custom という名前の configMap を見つけると、それに含まれるデータを customCheProperties フィールドに追加し、OpenShift Dev Spaces を再デプロイして、カスタムconfigMap を削除します。

3.3.3. Red Hat OpenShift Dev Spaces コンテナーのレプリカ数の設定

Kubernetes HorizontalPodAutoscaler (HPA) を使用して OpenShift Dev Spaces オペランドのレプリカの数を設定するには、デプロイメント用の HPA リソースを定義します。HPA は 指定されたメトリクスに基づいてレプリカの数を動的に調整します。

手順

  1. ターゲットメトリクスと必要なレプリカ数を指定して、デプロイメント用の HPA リソースを作成します。

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: scaler
      namespace: openshift-devspaces
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: <deployment_name> 1
      ...
    1
    <deployment_name> は、次のデプロイメントのいずれかに対応します。
    • devspaces
    • che-gateway
    • devspaces-dashboard
    • plugin-registry
    • devfile-registry

例3.14 devspaces デプロイメント用の HorizontalPodAutoscaler を作成します。

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: devspaces-scaler
  namespace: openshift-devspaces
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: devspaces
  minReplicas: 2
  maxReplicas: 5
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 75

この例では、HPA は devspaces という名前のデプロイメントをターゲットにしており、レプリカは最小 2 つ、最大 5 つで、CPU 使用率に基づいてスケーリングされます。

3.4. ワークスペースのグローバル設定

このセクションでは、管理者がワークスペースをグローバルに設定する方法について説明します。

3.4.1. ユーザーが保持できるワークスペースの数を制限する

デフォルトでは、ユーザーはダッシュボードに無制限の数のワークスペースを保持できますが、この数を制限してクラスターの需要を減らすことができます。

この設定は、CheCluster カスタムリソースの一部です。

spec:
  devEnvironments:
    maxNumberOfWorkspacesPerUser: <kept_workspaces_limit>1
1
ユーザーごとのワークスペースの最大数を設定します。デフォルト値 -1 では、ユーザーは無制限の数のワークスペースを保持できます。ユーザーごとのワークスペースの最大数を設定するには、正の整数を使用します。

手順

  1. OpenShift Dev Spaces namespace の名前を取得します。デフォルトは openshift-devspaces です。

    $ oc get checluster --all-namespaces \
      -o=jsonpath="{.items[*].metadata.namespace}"
  2. maxNumberOfWorkspacesPerUser を設定します。

    $ oc patch checluster/devspaces -n openshift-devspaces \1
    --type='merge' -p \
    '{"spec":{"devEnvironments":{"maxNumberOfWorkspacesPerUser": <kept_workspaces_limit>}}}'2
    1
    ステップ 1 で取得した OpenShift Dev Spaces namespace 。
    2
    <kept_workspaces_limit> の値を選択します。

3.4.2. ユーザーが複数のワークスペースを同時に実行できるようにする

デフォルトでは、ユーザーは一度に 1 つのワークスペースしか実行できません。ユーザーが複数のワークスペースを同時に実行できるようにすることができます。

注記

デフォルトのストレージ方法を使用している際、マルチノードクラスター内のノード全体に Pod が分散されている場合は、ワークスペースを同時に実行すると問題が発生する可能性があります。ユーザーごとの common ストレージストラテジーから per-workspace ストレージストラテジーに切り替えるか、ephemeral ストレージタイプを使用すると、これらの問題を回避または解決できます。

この設定は、CheCluster カスタムリソースの一部です。

spec:
  devEnvironments:
    maxNumberOfRunningWorkspacesPerUser: <running_workspaces_limit>1
1
ユーザーごとに同時に実行されるワークスペースの最大数を設定します。値 -1 を指定すると、ユーザーはワークスペースを無制限に実行できます。デフォルト値は 1 です。

手順

  1. OpenShift Dev Spaces namespace の名前を取得します。デフォルトは openshift-devspaces です。

    $ oc get checluster --all-namespaces \
      -o=jsonpath="{.items[*].metadata.namespace}"
  2. maxNumberOfRunningWorkspacesPerUser を設定します。

    $ oc patch checluster/devspaces -n openshift-devspaces \1
    --type='merge' -p \
    '{"spec":{"devEnvironments":{"maxNumberOfRunningWorkspacesPerUser": <running_workspaces_limit>}}}'2
    1
    ステップ 1 で取得した OpenShift Dev Spaces namespace 。
    2
    <running_workspaces_limit> の値を選択します。

3.4.3. 自己署名証明書を使用した Git

自己署名証明書を使用する Git プロバイダーでの操作をサポートするように OpenShift Dev Spaces を設定できます。

前提条件

  • OpenShift クラスターへの管理権限を持つアクティブな oc セッション。OpenShift CLI の使用開始を 参照してください。
  • Git バージョン 2 以降

手順

  1. Git サーバーの詳細情報を使用して新規の configMap を作成します。

    $ oc create configmap che-git-self-signed-cert \
      --from-file=ca.crt=<path_to_certificate> \  1
      --from-literal=githost=<git_server_url> -n openshift-devspaces  2
    1
    自己署名証明書へのパス。
    2
    Git サーバーの URL を指定するオプションのパラメーター (例: https://git.example.com:8443)。省略すると、自己署名証明書が HTTPS 経由のすべてのリポジトリーに使用されます。
    注記
    • 証明書ファイルは、通常、以下のような Base64 ASCII ファイルとして保存されます。.pem, .crt, .ca-bundle.証明書ファイルを保持するすべての ConfigMap はバイナリーデータ証明書ではなく Base64 ASCII 証明書を使用する必要があります。
    • 証明書の信頼チェーンが必要です。ca.crt が認証局 (CA) によって署名されている場合は、CA 証明書が ca.crt ファイルに含まれている必要があります。
  2. 必要なラベルを ConfigMap に追加します。

    $ oc label configmap che-git-self-signed-cert \
      app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
  3. Git リポジトリーに自己署名証明書を使用するように OpenShift Dev Spaces オペランドを設定します。「CLI を使用して CheCluster カスタムリソースの設定」 を参照してください。

    spec:
      devEnvironments:
        trustedCerts:
          gitTrustedCertsConfigMapName: che-git-self-signed-cert

検証手順

  • 新規ワークスペースを作成および開始します。ワークスペースによって使用されるすべてのコンテナーは、自己署名証明書のあるファイルを含む特殊なボリュームをマウントします。コンテナーの /etc/gitconfig ファイルには、Git サーバーホスト (その URL) と http セクションの証明書へのパスについての情報が含まれます (git-config に関する Git ドキュメントを参照してください)。

    例3.15 /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 を設定する方法を説明します。

手順

  1. NodeSelector の使用

    OpenShift Dev Spaces は、CheCluster カスタムリソースを使用して nodeSelector を設定します。

    spec:
      devEnvironments:
        nodeSelector:
          key: value

    このセクションには、nodeSelector ルールを形成するために、各 ノードラベルキー = 値の ペアのセットが含まれている必要があります。

  2. 汚染と許容の使用

    これは nodeSelector とは逆の働きをします。Pod がスケジュールされるノードを指定する代わりに、Pod がスケジュールされないノードを指定します。詳細は、https ://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration を参照してください。

    OpenShift Dev Spaces は、CheCluster カスタムリソースを使用して 許容範囲 を設定します。

    spec:
      devEnvironments:
        tolerations:
          - effect: NoSchedule
            key: key
            value: value
            operator: Equal
重要

nodeSelector は、OpenShift Dev Spaces のインストール時に設定する必要があります。これにより、既存のワークスペース PVC および Pod が異なるゾーンにスケジュールされることによってボリュームのアフィニティーの競合が生じ、既存のワークスペースが実行できなくなることを防ぐことができます。

大規模なマルチゾーンクラスターの異なるゾーンに Pod および PVC がスケジュールされないようにするには、PVC の作成プロセスを調整する追加の StorageClass オブジェクトを作成します (allowedTopologies フィールドに注目してください)。

CheCluster カスタムリソースを通じて、新しく作成された StorageClass の名前を OpenShift Dev Spaces に渡します。詳細は、以下を参照してください。「ストレージクラスの設定」

3.4.5. VSX レジストリー URL を開く

エクステンションを検索してインストールするために、Microsoft Visual Studio Code - オープンソースエディターは、組み込みの Open VSX レジストリーインスタンスを使用します。組み込みのレジストリーインスタンスではなく、別の Open VSX レジストリーインスタンスを使用するように OpenShift Dev Spaces を設定することもできます。

手順

  • CheCluster カスタムリソースの spec.components.pluginRegistry.openVSXURL フィールドに Open VSX レジストリーインスタンスの URL を設定します。

    spec:
       components:
    # [...]
         pluginRegistry:
           openVSXURL: <your_open_vsx_registy>
    # [...]

3.4.6. ユーザー名前空間の設定

この手順では、OpenShift Dev Spaces を使用して、ConfigMapsSecrets、および PersistentVolumeClaim をopenshift-devspaces 名前空間から多数のユーザー固有の名前空間に複製するプロセスについて説明します。OpenShift Dev Spaces は、共有認証情報、設定ファイル、証明書などの重要な設定データのユーザー名前空間への同期を自動化します。

openshift-devspaces 名前空間の Kubernetes リソースに変更を加えると、OpenShift Dev Spaces はすべてのユーザー名前空間にわたって変更を直ちに複製します。逆に、Kubernetes リソースがユーザー名前空間で変更された場合、OpenShift Dev Spaces は変更を直ちに元に戻します。

手順

  1. 以下の ConfigMap を作成して、すべてのユーザー名前空間に複製します。設定可能性を高めるために、追加のラベルとアノテーションを追加して ConfigMap を カスタマイズできます。その他の可能なラベルとアノテーションについては 、ボリューム、設定マップ、シークレットの自動マウント を参照してください。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: user-configmap
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
    data:
      ...

    例3.16 ユーザーワークスペースに settings.xml ファイルをマウントします。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: user-settings-xml
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
      annotations:
        controller.devfile.io/mount-as: subpath
        controller.devfile.io/mount-path: /home/user/.m2
    data:
      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 https://maven.apache.org/xsd/settings-1.0.0.xsd">
          <localRepository>/home/user/.m2/repository</localRepository>
          <interactiveMode>true</interactiveMode>
          <offline>false</offline>
        </settings>
  2. 以下の Secret を作成して、それをすべてのユーザー名前空間に複製します。設定可能性を高めるために、追加のラベルとアノテーションを追加して Secret を カスタマイズできます。その他の可能なラベルとアノテーションについては 、ボリューム、設定マップ、シークレットの自動マウント を参照してください。

    kind: Secret
    apiVersion: v1
    metadata:
      name: user-secret
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
    data:
      ...

    例3.17 ユーザーワークスペースに証明書をマウントする:

    kind: Secret
    apiVersion: v1
    metadata:
      name: user-certificates
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
      annotations:
        controller.devfile.io/mount-as: subpath
        controller.devfile.io/mount-path: /etc/pki/ca-trust/source/anchors
    stringData:
      trusted-certificates.crt: |
        ...
    注記

    ワークスペースの起動時に update-ca-trust コマンドを実行して証明書をインポートします。これは手動で実行することも、devfile の postStart イベントにこのコマンドを追加することで実行することもできます。devfile でのイベントバインディングの追加を 参照してください。

    例3.18 環境変数をユーザーワークスペースにマウントする:

    kind: Secret
    apiVersion: v1
    metadata:
      name: user-env
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
      annotations:
        controller.devfile.io/mount-as: env
    stringData:
      ENV_VAR_1: value_1
      ENV_VAR_2: value_2
  3. 以下の PersistentVolumeClaim を作成して、それをすべてのユーザー名前空間に複製します。

    設定可能性を高めるために、追加のラベルとアノテーションを追加して PersistentVolumeClaim をカスタマイズできます。その他の可能なラベルとアノテーションについては 、ボリューム、設定マップ、シークレットの自動マウント を参照してください。

    PersistentVolumeClaim を変更するには、これを削除し、openshift-devspaces 名前空間に新しいものを作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: user-pvc
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
    spec:
      ...

    例3.19 PersistentVolumeClaim をユーザーワークスペースにマウントする:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: user-pvc
      namespace: openshift-devspaces
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-config
        controller.devfile.io/mount-to-devworkspace: 'true'
      annotations:
        controller.devfile.io/mount-path: /home/user/data
        controller.devfile.io/read-only: 'true'
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      volumeMode: Filesystem

3.5. ワークスペースの起動を迅速化するイメージのキャッシュ

OpenShift Dev Spaces ワークスペースの起動時間のパフォーマンスを改善するには、Image Puller を使用して OpenShift クラスターのイメージの事前プルに使用できる OpenShift Dev Spaces に依存しないコンポーネントを使用します。Image Puller は、関連する OpenShift Dev Spaces ワークスペースイメージを各ノードで事前にプルするように設定できる DaemonSet を作成する追加の OpenShift デプロイメントです。これらのイメージは、OpenShift Dev Spaces ワークスペースの起動時にすでに利用可能なため、ワークスペースの開始時間が改善されています。

Image Puller は、設定用に以下のパラメーターを提供します。

表3.37 Image Puller パラメーター
パラメーター使用方法デフォルト

CACHING_INTERVAL_HOURS

デーモンセットのヘルスチェック間隔 (時間単位)

"1"

CACHING_MEMORY_REQUEST

Puller の実行中にキャッシュされる各イメージのメモリー要求。「メモリー設定の定義」 を参照してください。

10Mi

CACHING_MEMORY_LIMIT

Puller の実行中にキャッシュされる各イメージのメモリー制限。「メモリー設定の定義」 を参照してください。

20Mi

CACHING_CPU_REQUEST

Puller の実行中にキャッシュされる各イメージのプロセッサー要求

.05 または 50 ミリコア

CACHING_CPU_LIMIT

Puller の実行中にキャッシュされる各イメージのプロセッサー制限

.2 または 200 ミリコア

DAEMONSET_NAME

作成するデーモンセットの名前

kubernetes-image-puller

DEPLOYMENT_NAME

作成するデプロイメントの名前

kubernetes-image-puller

NAMESPACE

作成するデーモンセットが含まれる OpenShift プロジェクト

k8s-image-puller

IMAGES

プルするイメージのセミコロンで区切られたリスト (<name1>=<image1>;<name2>=<image2> の形式)。「イメージ一覧の定義」を参照してください。

 

NODE_SELECTOR

デーモンセットによって作成される Pod に適用するノードセレクター

'{}'

AFFINITY

DaemonSet によって作成される Pod に適用されるアフィニティー

'{}'

IMAGE_PULL_SECRETS

DeamonSet で作成される Pod に追加する pullsecret1;…​ 形式のイメージプルシークレットのリスト。これらのシークレットはイメージ puller の namespace に配置し、クラスター管理者はそれらを作成する必要があります。

""

3.5.1. イメージ一覧の定義

Image Puller は、che-machine-exec などの scratch イメージを含むほとんどのイメージを事前プルできます。ただし、traefik などの Dockerfile にボリュームをマウントするイメージは、OpenShift 3.11 における事前プルではサポートされません。

手順

  1. https://<openshift_dev_spaces_fqdn>/plugin-registry/v3/external_images.txt URL に移動して、プルする関連コンテナーイメージのリストを収集します。
  2. プル前のリストからイメージを判別します。ワークスペースの起動時間を短縮するには、universal-developer-imageche-codeche-gateway などのワークスペース関連のイメージをプルすることを検討してください。

3.5.2. メモリー設定の定義

メモリー要求および制限パラメーターを定義して、コンテナーをプルし、プラットフォームに実行するのに十分なメモリーがあることを確認します。

手順

  1. CACHING_MEMORY_REQUEST または CACHING_MEMORY_LIMIT の最小値を定義するには、プルする各コンテナーイメージの実行に必要なメモリー容量を考慮してください。
  2. 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 にインストールできます。

前提条件

手順

  1. コミュニティーでサポートされている Kubernetes Image Puller Operator をインストールします。Web コンソールを使用して OperatorHub からインストールするを 参照してください。
  2. コミュニティーでサポートされている Kubernetes Image Puller Operator から KubernetesImagePuller オペランドを作成します。インストールされた Operators からアプリケーションを作成するを 参照してください。

3.5.4. CLI を使用した OpenShift への Image Puller のインストール

OpenShift oc 管理ツールを使用して、OpenShift に Kubernetes Image Puller をインストールできます。

前提条件

手順

  1. Image Puller リポジトリーのクローンを作成し、OpenShift テンプレートが含まれるディレクトリーを取得します。

    $ git clone https://github.com/che-incubator/kubernetes-image-puller
    $ cd kubernetes-image-puller/deploy/openshift
  2. 以下のパラメーターを使用して、app.yamlconfigmap.yaml および serviceaccount.yaml OpenShift テンプレートを設定します。

    表3.38 app.yaml の Image Puller OpenShift テンプレートパラメーター
    使用方法デフォルト

    DEPLOYMENT_NAME

    ConfigMap の DEPLOYMENT_NAME の値

    kubernetes-image-puller

    IMAGE

    kubernetes-image-puller デプロイメントに使用されるイメージ

    registry.redhat.io/devspaces/imagepuller-rhel8

    IMAGE_TAG

    プルするイメージタグ

    latest

    SERVICEACCOUNT_NAME

    デプロイメントで作成され、使用される ServiceAccount の名前

    kubernetes-image-puller

    表3.39 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.40 serviceaccount.yaml の Image Puller OpenShift テンプレートパラメーター
    使用方法デフォルト

    SERVICEACCOUNT_NAME

    デプロイメントで作成され、使用される ServiceAccount の名前

    kubernetes-image-puller

  3. Image Puller をホストする OpenShift プロジェクトを作成します。

    $ oc new-project <k8s-image-puller>
  4. テンプレートを処理してから適用し、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 -

検証手順

  1. <kubernetes-image-puller> デプロイメントおよび <kubernetes-image-puller> デーモンセットがあることを確認します。デーモンセットでは、クラスター内の各ノードに Pod が必要です。

    $ oc get deployment,daemonset,pod --namespace <k8s-image-puller>
  2. <kubernetes-image-puller> ConfigMap の値を確認します。

    $ oc get configmap <kubernetes-image-puller> --output yaml

3.6. 可観測性の設定

OpenShift Dev Spaces 可観測性機能を設定するには、以下を参照してください。

3.6.1. 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 サーバーにデプロイします。

    1. CheCluster カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」 を参照してください。

      spec:
        devEnvironments:
          defaultPlugins:
          - editor: eclipse/che-theia/next     1
            plugins:                           2
            - 'https://your-web-server/plugin.yaml'
      1
      テレメトリープラグインを設定するための editorId
      2
      Telemetry プラグインの devfile v2 定義への URL。

3.6.2. 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.2.1. スタートガイド

以下では、OpenShift Dev Spaces Telemetry システムを拡張してカスタムバックエンドと通信するために必要な手順を説明します。

  1. イベントを受信するサーバープロセスの作成
  2. イベントをサーバーに送信するバックエンドを作成する OpenShift Dev Spaces ライブラリーの拡張
  3. コンテナーでの Telemetry バックエンドのパッケージ化およびイメージレジストリーへのデプロイ
  4. バックエンドのプラグインを追加し、OpenShift Dev Space に Dev Workspaces にプラグインを読み込むよう指示

Telemetry バックエンドの最終的な例については、here を参照してください。

イベントを受信するサーバーの作成

この例は、Telemetry プラグインからイベントを受信し、標準出力に書き込むサーバーを作成する方法を示しています。

実稼働環境のユースケースでは、独自の Telemetry サーバーを作成するのではなく、サードパーティーの Telemetry システム (Segment、Woopra など) との統合を検討してください。この場合、プロバイダーの API を使用してイベントをカスタムバックエンドからシステムに送信します。

以下の Go コードは、ポート 8080 でサーバーを起動し、イベントを標準出力に書き込みます。

例3.20 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.2.2. バックエンドプロジェクトの作成
注記

開発時に迅速なフィードバックを得るには、Dev Workspace 内で開発を行うことが推奨されます。これにより、クラスターでアプリケーションを実行し、フロントエンドの Telemetry プラグインからイベントを受信できます。

  1. 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
  2. src/main/java/mygroupsrc/test/java/mygroup の下にあるファイルを削除します。
  3. backend-base の最新バージョンおよび Maven コーディネートについては、GitHub パッケージ を参照してください。
  4. 以下の依存関係を pom.xml に追加します。

    例3.21 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>
  5. read:packages パーミッションでパーソナルアクセストークンを作成し、GitHub パッケージ から org.eclipse.che.incubator.workspace-telemetry:backend-base 依存関係をダウンロードします。
  6. GitHub ユーザー名、パーソナルアクセストークン、che-incubator リポジトリーの詳細を ~/.m2/settings.xml ファイルに追加します。

    例3.22 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.2.3. AnalyticsManager の具体的な実装の作成および特殊なロジックの追加

src/main/java/mygroup の下に、プロジェクトに 2 つのファイルを作成します。

  • MainConfiguration.java - AnalyticsManager に提供される設定が含まれます。
  • AnalyticsManager.java: Telemetry システム固有のロジックが含まれます。

例3.23 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.24 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() {}
}
1
提供された場合は Welcome メッセージをログに記録します。
2
フロントエンドプラグインから受け取ったイベントをログに記録します。

org.my.group.AnalyticsManagerorg.my.group.MainConfiguration は代替の Bean であるため、src/main/resources/application.propertiesquarkus.arc.selected-alternatives プロパティーを使用して指定します。

例3.25 application.properties

quarkus.arc.selected-alternatives=MainConfiguration,AnalyticsManager
3.6.2.4. Dev Workspace 内でのアプリケーションの実行
  1. Dev Workspace に DEVWORKSPACE_TELEMETRY_BACKEND_PORT 環境変数を設定します。ここで、値は 4167 に設定されます。

    spec:
      template:
        attributes:
          workspaceEnv:
            - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT
              value: '4167'
  2. Red Hat OpenShift Dev Spaces ダッシュボードから Dev Workspace を再起動します。
  3. Dev Workspace のターミナルウィンドウ内で以下のコマンドを実行し、アプリケーションを起動します。--settings フラグを使用して、GitHub アクセストークンが含まれる settings.xml ファイルの場所へのパスを指定します。

    $ mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}

    アプリケーションは、フロントエンドプラグインからポート 4167 を使用して Telemetry イベントを受け取るようになりました。

検証手順

  1. 以下の出力がログに記録されていることを確認します。

    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]
  2. AnalyticsManageronEvent() メソッドがフロントエンドプラグインからイベントを受信することを確認するには、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.2.5. isEnabled() の実装

この例では、このメソッドは呼び出されるたびに true を返します。

例3.26 AnalyticsManager.java

@Override
public boolean isEnabled() {
    return true;
}

より複雑なロジックを isEnabled() に設定することができます。たとえば、ホストされている OpenShift Dev Spaces Woopra バックエンド は、バックエンドが有効になっているかどうかを判断する前に、設定プロパティーが存在することを確認します。

3.6.2.6. onEvent() の実装

onEvent() は、バックエンドが受信したイベントを Telemetry システムに送信します。サンプルアプリケーションでは、HTTP POST ペイロードを Telemetry サーバーから /event エンドポイントに送信します。

3.6.2.6.1. サンプル Telemetry サーバーへの POST 要求の送信

以下の例では、Telemetry サーバーアプリケーションは http://little-telemetry-server-che.apps-crc.testing の URL で OpenShift にデプロイされます。ここで、apps-crc.testing は OpenShift クラスターの Ingress ドメイン名です。

  1. TelemetryService.java を作成して RESTEasy REST Client を設定します。

    例3.27 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 リクエストを行うエンドポイント。
  2. src/main/resources/application.properties ファイルで TelemetryService のベース URL を指定します。

    例3.28 application.properties

    org.my.group.TelemetryService/mp-rest/url=http://little-telemetry-server-che.apps-crc.testing
  3. TelemetryServiceAnalyticsManager に挿入し、onEvent()POST リクエストを送信します

    例3.29 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.2.7. increaseDuration() の実装

多くの Telemetry システムはイベント期間を認識します。AbstractAnalyticsManager は、同じ期間内で発生する同様のイベントを 1 つのイベントにマージします。increaseDuration() のこの実装は no-op です。この方法では、ユーザーの Telemetry プロバイダーの API を使用してイベントまたはイベントプロパティーを変更し、イベントの延長期間を反映します。

例3.30 AnalyticsManager.java

@Override
public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) {}
3.6.2.8. onActivity() の実装

非アクティブなタイムアウトの制限を設定し、最後のイベント時間がタイムアウトよりも長くなる場合は、onActivity() を使用して WORKSPACE_INACTIVE イベントを送信します。

例3.31 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.2.9. destroy() の実装

destroy() が呼び出される際に、WORKSPACE_STOPPED イベントを送信し、接続プールなどのリソースをシャットダウンします。

例3.32 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.2.10. Quarkus アプリケーションのパッケージ化

アプリケーションをコンテナーにパッケージ化する最適な方法については、Quarkus ドキュメント を参照してください。コンテナーをビルドし、選択したコンテナーレジストリーにプッシュします。

3.6.2.10.1. JVM で実行する Quarkus イメージをビルドするための Dockerfile の例

例3.33 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 .
3.6.2.10.2. Quarkus ネイティブイメージをビルドするための Dockerfile の例

例3.34 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.2.11. プラグインの plugin.yaml の作成

DevWorkspacePod でカスタムバックエンドを実行する DevWorkspace プラグインを表す plugin.yamldevfilev2 ファイルを作成します。devfile v2 の詳細については、Devfile v2 documentation を参照してください。

例3.35 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.36 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.2.12. Dev Workspace での Telemetry プラグインの指定
  1. 以下を既存の Dev Workspace の components フィールドに追加します。

    components:
      ...
      - name: telemetry-plugin
        plugin:
          uri: http://apache-che.apps-crc.testing/plugin.yaml
  2. OpenShift Dev Spaces ダッシュボードから Dev Workspace を起動します。

検証手順

  1. Telemetry-plug-in コンテナーが Dev Workspace Pod で稼働していることを確認します。ここでは、これはエディターで Workspace ビューをチェックして検証されます。

    Dev Workspace Telemetry プラグイン
  2. エディター内のファイルを編集し、Telemetry サーバーのログのサンプルでイベントを確認します。
3.6.2.13. すべての Dev Workspaces の Telemetry プラグインの適用

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'
    1
    デフォルトのプラグインを設定するエディターの ID。
    2
    devfile v2 プラグインへの URL の一覧。

検証手順

  1. Red Hat OpenShift Dev Spaces ダッシュボードから新規または既存の Dev Workspace を起動します。
  2. 「Dev Workspace での Telemetry プラグインの指定」 の検証手順に従って、Telemetry プラグインが機能していることを確認します。
3.6.2.14. サーバーロギングの設定

OpenShift Dev Spaces サーバーで利用可能な個別のロガーのログレベルを微調整できます。

OpenShift Dev Spaces サーバー全体のログレベルは、Operator の cheLogLevel 設定プロパティーを使用してグローバルに設定されます。CheCluster カスタムリソースフィールドの参照」 を参照してください。Operator によって管理されないインストールでグローバルログレベルを設定するには、che ConfigMap で CHE_LOG_LEVEL 環境変数を指定します。

CHE_LOGGER_CONFIG 環境変数を使用して、OpenShift Dev Spaces サーバーの個々のロガーのログレベルを設定することができます。

3.6.2.14.1. ログレベルの設定

手順

  • CheCluster カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」 を参照してください。

    spec:
      components:
        cheServer:
          extraProperties:
            CHE_LOGGER_CONFIG: "<key1=value1,key2=value2>" 1
    1
    キーと値のペアのコンマ区切りリスト。キーは OpenShift Dev Spaces サーバーログ出力に表示されるロガーの名前で、値は必要なログレベルになります。

    例3.37 WorkspaceManager のデバッグモードの設定

    spec:
      components:
        cheServer:
          extraProperties:
            CHE_LOGGER_CONFIG: "org.eclipse.che.api.workspace.server.WorkspaceManager=DEBUG"
3.6.2.14.2. ロガーの命名

ロガーの名前は、それらのロガーを使用する内部サーバークラスのクラス名に従います。

3.6.2.14.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.2.15. 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.3. Dev Workspace Operator のモニタリング

OpenShift クラスター内監視スタックを設定して、Dev Workspace Operator によって公開されるメトリックを取得できます。

3.6.3.1. Dev Workspace Operator メトリクスの収集

クラスター内 Prometheus インスタンスを使用して、Dev Workspace Operator に関するメトリックを収集、保存、クエリーするには:

前提条件

  • OpenShift Dev Spaces の組織インスタンスが Red Hat OpenShift にインストールされ、実行されています。
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。
  • devworkspace-controller-metrics サービスは、ポート 8443 でメトリックを公開している。これはデフォルトで事前設定されています。

手順

  1. Dev Workspace Operator メトリックサービスを検出するための ServiceMonitor を作成します。

    例3.38 ServiceMonitor

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: devworkspace-controller
      namespace: openshift-devspaces 1
    spec:
      endpoints:
        - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
          interval: 10s 2
          port: metrics
          scheme: https
          tlsConfig:
            insecureSkipVerify: true
      namespaceSelector:
        matchNames:
          - openshift-operators
      selector:
        matchLabels:
          app.kubernetes.io/name: devworkspace-controller
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    ターゲットが収集されるレート。
  2. クラスター内の Prometheus インスタンスが OpenShift Dev Spaces namespace 内の ServiceMonitor を検出できるようにします。デフォルトの OpenShift Dev Spaces namespace はopenshift-devspaces です。

    $ oc label namespace openshift-devspaces openshift.io/cluster-monitoring=true

検証

  1. OpenShift Dev Spaces を新規インストールする場合は、ダッシュボードから OpenShift Dev Spaces ワークスペースを作成してメトリックを生成します。
  2. OpenShift Web コンソールの Administrator ビューで、ObserveMetrics に移動します。
  3. PromQL クエリーを実行して、メトリックが利用可能であることを確認します。たとえば、devworkspace_started_total を入力し、Run queries をクリックします。

    その他のメトリクスは、「Dev Workspace 固有のメトリック」 を参照してください。

ヒント

不足しているメトリクスのトラブルシューティングを行うには、Prometheus コンテナーログで RBAC 関連のエラーを確認します。

  1. Prometheus Pod の名前を取得します。

    $ oc get pods -l app.kubernetes.io/name=prometheus -n openshift-monitoring -o=jsonpath='{.items[*].metadata.name}'
  2. 前のステップの Prometheus Pod から Prometheus コンテナーログの最後の 20 行を出力します。

    $ oc logs --tail=20 <prometheus_pod_name> -c prometheus -n openshift-monitoring
3.6.3.2. Dev Workspace 固有のメトリック

次の表は、devworkspace-controller-metrics サービスによって公開される Dev Workspace 固有のメトリックについて説明しています。

表3.41 メトリクス
名前説明Labels

devworkspace_started_total

カウンター

Dev Workspace の開始イベントの数。

sourceroutingclass

devworkspace_started_success_total

カウンター

Running 段階に移行した Dev Workspaces の数。

sourceroutingclass

devworkspace_fail_total

カウンター

失敗した Dev Workspaces の数。

sourcereason

devworkspace_startup_time

ヒストグラム

Dev Workspace の起動にかかった総時間 (秒)。

sourceroutingclass

表3.42 Labels
名前説明

source

Dev Workspace の controller.devfile.io/devworkspace-source ラベルです。

string

routingclass

Dev Workspace の spec.routingclass です。

"basic|cluster|cluster-tls|web-terminal"

reason

ワークスペースの起動失敗の理由です。

"BadRequest|InfrastructureFailure|Unknown"

表3.43 スタートアップ失敗の理由
名前説明

BadRequest

Dev Workspace の作成に使用された devfile が無効であるため、起動に失敗しました。

InfrastructureFailure

CreateContainerErrorRunContainerErrorFailedSchedulingFailedMount のエラーによる起動の失敗。

Unknown

不明な失敗理由。

3.6.3.3. OpenShift Web コンソールダッシュボードからの Dev Workspace Operator メトリックの表示

Dev Workspace Operator メトリックを収集するようにクラスター内 Prometheus インスタンスを設定した後、OpenShift Web コンソールの Administrator パースペクティブのカスタムダッシュボードにメトリックを表示できます。

前提条件

  • OpenShift Dev Spaces の組織インスタンスが Red Hat OpenShift にインストールされ、実行されています。
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。
  • クラスター内の Prometheus インスタンスはメトリックを収集しています。「Dev Workspace Operator メトリクスの収集」 を参照してください。

手順

  • openshift-config-managed プロジェクトでダッシュボード定義の ConfigMap を作成し、必要なラベルを適用します。

    1. $ oc create configmap grafana-dashboard-dwo \
        --from-literal=dwo-dashboard.json="$(curl https://raw.githubusercontent.com/devfile/devworkspace-operator/main/docs/grafana/openshift-console-dashboard.json)" \
        -n openshift-config-managed
      注記

      前のコマンドには、アップストリームコミュニティーからの資料へのリンクが含まれています。この資料は、利用可能な最新のコンテンツと最新のベストプラクティスを表しています。これらのヒントは Red Hat の QE 部門によってまだ精査されておらず、広範なユーザーグループによってまだ証明されていません。この情報は慎重に使用してください。

    2. $ oc label configmap grafana-dashboard-dwo console.openshift.io/dashboard=true -n openshift-config-managed
      注記

      ダッシュボード定義は、Grafana 6.x ダッシュボードに基づいています。すべての Grafana 6.x ダッシュボード機能が OpenShift Web コンソールでサポートされているわけではありません。

検証手順

  1. OpenShift Web コンソールの Administrator ビューで、ObserveDashboards に移動します。
  2. DanshboardChe Server JVM に移動し、ダッシュボードパネルにデータが含まれていることを確認します。
3.6.3.4. 開発ワークスペースオペレーター用のダッシュボード

OpenShift Web コンソールのカスタムダッシュボードは Grafana 6.x に基づいており、Dev Workspace Operator からの次のメトリックを表示します。

注記

Grafana 6.x ダッシュボードのすべての機能が OpenShift Web コンソールダッシュボードとしてサポートされているわけではありません。

3.6.3.4.1. Dev Workspace メトリック

開発ワークスペース固有のメトリックは、Dev Workspace Metrics パネルに表示されます。

図3.1 Dev Workspace Metrics パネル

`DevWorkspace の起動に関連するメトリックを含む Grafana ダッシュボードパネル
ワークスペースの平均起動時間
ワークスペースの平均起動時間。
ワークスペースの起動
ワークスペースの起動の成功と失敗の回数。
開発ワークスペースの成功と失敗
DevWorkspace の起動の成功と失敗の比較。
Dev Workspace の失敗率
ワークスペースの起動失敗回数と総起動回数の比率。
Dev Workspace 起動失敗の理由

ワークスペース起動失敗の分布を表示する円グラフ:

  • BadRequest
  • InfrastructureFailure
  • Unknown
3.6.3.4.2. Operator メトリクス

Operator 固有のメトリクスは Operator Metrics パネルに表示されます。

図3.2 Operator Metrics パネル

Operator メトリクスを含む Grafana ダッシュボードパネル
進行中の Webhook
さまざまな Webhook リクエストの数の比較。
作業キューの深さ
作業キューにある調整リクエストの数。
メモリー
Dev Workspace コントローラーと Dev Workspace Webhook サーバーのメモリー使用状況。
1 秒あたりの平均調整数 (DWO)
Dev Workspace コントローラーの 1 秒あたりの平均調整回数。

3.6.4. Dev Spaces サーバーの監視

OpenShift Dev Spaces サーバーの JVM メモリーやクラスローディングなどの JVM メトリックを公開するように OpenShift Dev Spaces を設定できます。

3.6.4.1. OpenShift Dev Spaces サーバーメトリックの有効化と公開

OpenShift Dev Spaces は、che-host サービスのポート 8087 で JVM メトリックを公開します。この動作を設定できます。

手順

3.6.4.2. Prometheus を使用した OpenShift Dev Spaces メトリックの収集

クラスター内 Prometheus インスタンスを使用して OpenShift Dev Spaces Server の JVM メトリックを収集、保存、およびクエリーするには:

前提条件

手順

  1. OpenShift Dev Spaces JVM メトリックサービスを検出するための ServiceMonitor を作成します。

    例3.39 ServiceMonitor

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: che-host
      namespace: openshift-devspaces 1
    spec:
      endpoints:
        - interval: 10s 2
          port: metrics
          scheme: http
      namespaceSelector:
        matchNames:
          - openshift-devspaces 3
      selector:
        matchLabels:
          app.kubernetes.io/name: devspaces
    1 3
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    ターゲットが収集されるレート。
  2. Prometheus がメトリックを表示できるようにするには、Role と RoleBinding を作成します。

    例3.40 Role

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: prometheus-k8s
      namespace: openshift-devspaces 1
    rules:
      - verbs:
          - get
          - list
          - watch
        apiGroups:
          - ''
        resources:
          - services
          - endpoints
          - pods
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。

    例3.41 RoleBinding

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: view-devspaces-openshift-monitoring-prometheus-k8s
      namespace: openshift-devspaces 1
    subjects:
      - kind: ServiceAccount
        name: prometheus-k8s
        namespace: openshift-monitoring
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: prometheus-k8s
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
  3. クラスター内の Prometheus インスタンスが OpenShift Dev Spaces namespace 内の ServiceMonitor を検出できるようにします。デフォルトの OpenShift Dev Spaces namespace はopenshift-devspaces です。

    $ oc label namespace openshift-devspaces openshift.io/cluster-monitoring=true

検証

  1. OpenShift Web コンソールの Administrator ビューで、ObserveMetrics に移動します。
  2. PromQL クエリーを実行して、メトリックが利用可能であることを確認します。たとえば、process_uptime_seconds{job="che-host"} と入力し、Run queries をクリックします。
ヒント

不足しているメトリクスのトラブルシューティングを行うには、Prometheus コンテナーログで RBAC 関連のエラーを確認します。

  1. Prometheus Pod の名前を取得します。

    $ oc get pods -l app.kubernetes.io/name=prometheus -n openshift-monitoring -o=jsonpath='{.items[*].metadata.name}'
  2. 前のステップの Prometheus Pod から Prometheus コンテナーログの最後の 20 行を出力します。

    $ oc logs --tail=20 <prometheus_pod_name> -c prometheus -n openshift-monitoring
3.6.4.3. OpenShift Web コンソールダッシュボードからの OpenShift Dev Spaces Server の表示

OpenShift Dev Spaces Server JVM メトリックを収集するようにクラスター内 Prometheus インスタンスを設定した後、OpenShift Web コンソールの Administrator パースペクティブのカスタムダッシュボードにメトリックを表示できます。

前提条件

手順

  • openshift-config-managed プロジェクトでダッシュボード定義の ConfigMap を作成し、必要なラベルを適用します。

    1. $ oc create configmap grafana-dashboard-devspaces-server \
        --from-literal=devspaces-server-dashboard.json="$(curl https://raw.githubusercontent.com/eclipse-che/che-server/main/docs/grafana/openshift-console-dashboard.json)" \
        -n openshift-config-managed
      注記

      前のコマンドには、アップストリームコミュニティーからの資料へのリンクが含まれています。この資料は、利用可能な最新のコンテンツと最新のベストプラクティスを表しています。これらのヒントは Red Hat の QE 部門によってまだ精査されておらず、広範なユーザーグループによってまだ証明されていません。この情報は慎重に使用してください。

    2. $ oc label configmap grafana-dashboard-devspaces-server console.openshift.io/dashboard=true -n openshift-config-managed
      注記

      ダッシュボード定義は、Grafana 6.x ダッシュボードに基づいています。すべての Grafana 6.x ダッシュボード機能が OpenShift Web コンソールでサポートされているわけではありません。

検証手順

  1. OpenShift Web コンソールの Administrator ビューで、ObserveDashboards に移動します。
  2. DashboardDev Workspace Operator に移動し、ダッシュボードパネルにデータが含まれていることを確認します。

    図3.3 クイックファクト

    *JVM クイックファクト* パネル

    図3.4 JVM メモリー

    *JVM メモリー* パネル

    図3.5 JVM Misc

    *JVM その他* パネル

    図3.6 JVM メモリープール (ヒープ)

    *JVM メモリープール (ヒープ)* パネル

    図3.7 JVM メモリープール (非ヒープ)

    *JVM メモリープール (非ヒープ)* パネル

    図3.8 ガベージコレクション

    *JVM ガベージコレクション* パネル

    図3.9 クラスローディング

    *JVM クラスのローディング* パネル

    図3.10 バッファープール

    *JVM バッファープール* パネル

3.7. ネットワークの設定

3.7.1. ネットワークポリシーの設定

デフォルトでは、OpenShift クラスター内のすべての Pod は、異なる namespace にある場合でも相互に通信できます。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 namespace からユーザープロジェクト内のすべての Pod への受信トラフィックを許可します。

    例3.42 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
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    空の podSelector は、プロジェクト内のすべての Pod を選択します。
  • オプション: ネットワークポリシーを使用してマルチテナント分離を設定するを 適用した場合は、allow-from-openshift-apiserver および allow-from-workspaces-namespaces NetworkPolicies も openshift-devspaces に適用する必要があります。allow-from-openshift-apiserver NetworkPolicy は、openshift-apiserver namespaceから devworkspace-webhook-server への受信トラフィックを許可し、Webhook を有効にします。allow-from-workspaces-namespaces NetworkPolicy は、各ユーザープロジェクトから che-gateway Pod への受信トラフィックを許可します。

    例3.43 allow-from-openshift-apiserver.yaml

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-from-openshift-apiserver
      namespace: openshift-devspaces   1
    spec:
      podSelector:
        matchLabels:
          app.kubernetes.io/name: devworkspace-webhook-server   2
      ingress:
        - from:
            - podSelector: {}
              namespaceSelector:
                matchLabels:
                  kubernetes.io/metadata.name: openshift-apiserver
      policyTypes:
        - Ingress
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    podSelector は、devworkspace-webhook-server Pod のみを選択します

    例3.44 allow-from-workspaces-namespaces.yaml

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-from-workspaces-namespaces
      namespace: openshift-devspaces   1
    spec:
      podSelector:
        matchLabels:
          app.kubernetes.io/component: che-gateway   2
      ingress:
        - from:
            - podSelector: {}
              namespaceSelector:
                matchLabels:
                  app.kubernetes.io/component: workspaces-namespace
      policyTypes:
        - Ingress
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    podSelector は、che-gateway Pod のみを選択します

3.7.2. Dev Spaces ホスト名の設定

この手順では、カスタムホスト名を使用するように OpenShift Dev Space を設定する方法を説明します。

前提条件

  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。
  • 証明書とプライベートキーファイルが生成されます。
重要

秘密鍵と証明書のペアを生成するには、他の OpenShift Dev Spaces ホストと同じ認証局 (CA) を使用する必要があります。

重要

DNS プロバイダーに対し、カスタムホスト名をクラスター Ingress を参照するよう要求します。

手順

  1. OpenShift Dev Spaces のプロジェクトを作成します。

    $ oc create project openshift-devspaces
  2. TLS Secret を作成します。

    $ oc create secret TLS <tls_secret_name> \ 1
    --key <key_file> \ 2
    --cert <cert_file> \ 3
    -n openshift-devspaces
    1
    TLS Secret 名
    2
    プライベートキーを含むファイル
    3
    証明書を含むファイル
  3. シークレットに必要なラベルを追加します。

    $ oc label secret <tls_secret_name> \ 1
    app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
    1
    TLS Secret 名
  4. CheCluster カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」 を参照してください。

    spec:
      networking:
        hostname: <hostname>     1
        tlsSecretName: <secret>  2
    1
    カスタム Red Hat OpenShift Dev Spaces サーバーのホスト名
    2
    TLS Secret 名
  5. 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 証明書を自動的に挿入します。

前提条件

  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。
  • openshift-devspaces プロジェクトが存在する。
  • インポートする CA チェーンごとに root CA と中間証明書がある (PEM 形式、ca-cert-for-devspaces-<count>.pem ファイル)。

手順

  1. インポートするすべての CA チェーン PEM ファイルを custom-ca-certificates.pem ファイルに連結し、Java トラストストアと互換性のない戻り文字を削除します。

    $ cat ca-cert-for-devspaces-*.pem | tr -d '\r' > custom-ca-certificates.pem
  2. 必要な TLS 証明書を使用して custom-ca-certificates Config Map を作成します。

    $ oc create configmap custom-ca-certificates \
        --from-file=custom-ca-certificates.pem \
        --namespace=openshift-devspaces
  3. 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
  4. 以前にデプロイされていない場合は、OpenShift Dev Spaces をデプロイします。それ以外の場合は、OpenShift Dev Spaces コンポーネントのロールアウトが完了するまで待ちます。
  5. 変更を有効にするには、実行中のワークスペースを再起動します。

検証手順

  1. 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
  2. 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
  3. OpenShift Dev Spaces サーバーコンテナーにカスタム CA 証明書があることを確認します。このコマンドは、カスタム CA 証明書を PEM 形式で返します。

    $ oc exec -t deploy/devspaces \
        --namespace=openshift-devspaces \
        -- cat /public-certs/custom-ca-certificates.pem
  4. OpenShift Dev Spaces サーバーログで、インポートされた証明書の数が null でないことを確認します。

    $ oc logs deploy/devspaces --namespace=openshift-devspaces \
        | grep custom-ca-certificates.pem
  5. 証明書の SHA256 フィンガープリントを一覧表示します。

    $ for certificate in ca-cert*.pem ;
      do openssl x509 -in $certificate -digest -sha256 -fingerprint -noout | cut -d= -f2;
      done
  6. 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
  7. ワークスペースを開始し、これが作成されたプロジェクト名 <workspace_namespace> を取得して、ワークスペースが開始されるのを待ちます。
  8. 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}'
  9. ワークスペース 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
  10. 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'
  11. ワークスペース Pod 名 <workspace_pod_name> を取得します。

    $ oc get pod \
        --namespace=<workspace_namespace> \
        --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \
        --output='jsonpath={.items[0:].metadata.name}' \
  12. ワークスペースコンテナーにカスタム CA 証明書があることを確認します。このコマンドは、カスタム CA 証明書を PEM 形式で返します。

    $ oc exec <workspace_pod_name> \
        --namespace=<workspace_namespace> \
        -- cat /public-certs/custom-ca-certificates.custom-ca-certificates.pem

3.7.4. ラベルとアノテーションの追加

3.7.4.1. ルーターのシャード化と連携するように OpenShift ルートを設定

OpenShift Route が ルーターのシャード化 と連携するようにラベル、アノテーション、およびドメインを設定できます。

前提条件

手順

  • CheCluster カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」 を参照してください。

    spec:
      networking:
        labels: <labels> 1
        domain: <domain> 2
        annotations: <annotations> 3
    1
    ターゲット Ingress Controller が一連のルートをフィルター処理してサービスを提供するために使用する、ラベルの構造化されていないキー値マップ。
    2
    ターゲット Ingress Controller が提供する DNS 名。
    3
    リソースと共に格納される構造化されていないキー値マップ。

3.8. ストレージの設定

警告

OpenShift Dev Spaces は Network File System (NFS) プロトコルをサポートしていません。

3.8.1. ストレージクラスの設定

設定されたインフラストラクチャーストレージを使用するように OpenShift Dev Spaces を設定するには、ストレージクラスを使用して OpenShift Dev Spaces をインストールします。これは、デフォルト以外のプロビジョナーによって提供される永続ボリュームをバインドする場合に特に便利です。

OpenShift Dev Spaces には、データを保存するために永続ボリュームを必要とするコンポーネントが 1 つあります。

  • OpenShift Dev Spaces ワークスペース。OpenShift Dev Spaces ワークスペースは、/projects ボリュームなどのボリュームを使用してソースコードを保存します。
注記

OpenShift Dev Spaces ワークスペースソースコードは、ワークスペースが一時的ではない場合にのみ永続ボリュームに保存されます。

永続ボリューム要求 (PVC) のファクト:

  • OpenShift Dev Spaces は、インフラストラクチャーに永続ボリュームを作成しません。
  • OpenShift Dev Spaces は、永続ボリュームクレーム (PVC) を使用して永続ボリュームをマウントします。
  • 「Dev ワークスペースの演算子」 は、永続ボリューム要求を作成します。

    OpenShift Dev Spaces PVC のストレージクラス機能を使用するには、OpenShift Dev Spaces 設定でストレージクラス名を定義します。

手順

CheCluster カスタムリソース定義を使用してストレージクラスを定義します。

  1. ストレージクラス名を定義します。CheCluster カスタムリソースを設定し、OpenShift Dev Spaces をインストールします。「dsc を使用したインストール時に CheCluster カスタムリソースの設定」 を参照してください。

    spec:
      devEnvironments:
        storage:
          perUserStrategyPvcConfig:
            claimSize: <claim_size> 1
            storageClass: <storage_class_name> 2
          perWorkspaceStrategyPvcConfig:
            claimSize: <claim_size> 3
            storageClass: <storage_class_name> 4
          pvcStrategy: <pvc_strategy> 5
    1 3
    Persistent Volume Claim のサイズ。
    2 4
    Persistent Volume Claim のストレージクラス。省略されるか、空のままの場合は、デフォルトのストレージクラスが使用されます。
    5
    永続ボリューム要求ストラテジー。サポートされているストラテジーは、per-user (1 つのボリュームにすべてのワークスペースの永続ボリューム要求)、per-workspace (各ワークスペースに個別の永続ボリューム要求が与えられる)、ephemeral (ワークスペースが停止すると、ローカルの変更が失われる非永続ストレージ) です。

3.8.2. ストレージストラテジーの設定

OpenShift Dev Spaces は、ストレージストラテジーを選択することで、ワークスペースに永続ストレージまたは非永続ストレージを提供するように設定できます。選択したストレージストラテジーは、デフォルトで新しく作成されたすべてのワークスペースに適用されます。ユーザーは、devfile または URL パラメーター を通じて、ワークスペースにデフォルト以外のストレージストラテジーを選択できます。

利用可能なストレージストラテジー:

  • per-user: ユーザーによって作成されたすべてのワークスペースに単一の PVC を使用します。
  • per-workspace: 各ワークスペースには独自の PVC が付与されます。
  • ephemeral: 非永続ストレージ。ワークスペースが停止すると、ローカルの変更は失われます。

OpenShift Dev Spaces で使用されるデフォルトのストレージストラテジーは per-user です。

手順

  1. Che Cluster カスタムリソースの pvcStrategy フィールドを、per-userper-workspace または ephemeral に設定します。
注記
spec:
  devEnvironments:
    storage:
      pvc:
        pvcStrategy: 'per-user' 1
1
利用可能なストレージストラテジーは、per-userper-workspace および ephemeral です。

3.8.3. ストレージサイズの設定

永続ボリューム要求 (PVC) サイズは、per-user または per-workspace のストレージストラテジーを使用して設定できます。CheCluster カスタムリソースの PVC サイズを Kubernetes リソース数量 の形式で指定する必要があります。利用可能なストレージストラテジーの詳細は、こちらのページ を参照してください。

デフォルトの永続ボリューム要求サイズ:

  • per-user: 10Gi
  • per-workspace: 5Gi

手順

  1. Che Cluster カスタムリソースで、必要なストレージストラテジーの適切な claimSize フィールドを設定します。
注記
spec:
  devEnvironments:
    storage:
      pvc:
        pvcStrategy: '<strategy_name>'  1
        perUserStrategyPvcConfig: 2
          claimSize: <resource_quantity> 3
        perWorkspaceStrategyPvcConfig:  4
          claimSize: <resource_quantity> 5
1
ストレージストラテジー (per-userper-workspace または ephemeral) を選択します。注記: ephemeral ストレージストラテジーは永続ストレージを使用しないため、そのストレージサイズまたは他の PVC 関連の属性を設定できません。
2 4
次の行で要求サイズを指定するか、次の行を省略して、デフォルトの要求サイズ値を設定します。指定された要求サイズは、このストレージストラテジーを選択する場合にのみ使用されます。
3 5
要求サイズは、Kubernetes リソース数量 として指定する必要があります。利用可能な数量の単位には、EiPiTiGiMi、および Ki が含まれます。

3.9. ダッシュボードの設定

3.9.1. 使用開始サンプルの設定

この手順では、カスタムサンプルを表示するように OpenShift Dev Spaces Dashboard を設定する方法を説明します。

前提条件

  • OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. サンプル設定で JSON ファイルを作成します。ファイルにはオブジェクトの配列が含まれている必要があります。各オブジェクトはサンプルを表します。

    cat > my-samples.json <<EOF
    [
      {
        "displayName": "<display_name>", 1
        "description": "<description>", 2
        "tags": <tags>, 3
        "url": "<url>", 4
        "icon": {
          "base64data": "<base64data>", 5
          "mediatype": "<mediatype>" 6
        }
      }
    ]
    EOF
    1
    サンプルの表示名。
    2
    サンプルの説明。
    3
    タグの JSON 配列 (例: ["java", "spring"])。
    4
    devfile を含むリポジトリーへの URL。
    5
    アイコンの base64 でエンコードされたデータ。
    6
    アイコンのメディアタイプ。たとえば image/png
  2. サンプル設定で ConfigMap を作成します。

    oc create configmap getting-started-samples --from-file=my-samples.json -n openshift-devspaces
  3. 必要なラベルを ConfigMap に追加します。

    oc label configmap getting-started-samples app.kubernetes.io/part-of=che.eclipse.org app.kubernetes.io/component=getting-started-samples -n openshift-devspaces
  4. OpenShift Dev Spaces Dashboard ページを更新して、新しいサンプルを表示します。

3.10. ID および承認の管理

このセクションでは、Red Hat OpenShift Dev Spaces の ID および承認の管理のさまざまな側面について説明します。

3.10.1. Git プロバイダーの OAuth の設定

OpenShift Dev Spaces と Git プロバイダーの間で OAuth を設定して、ユーザーがリモート Git リポジトリーを操作できるようにすることができます。

3.10.1.1. Configuring OAuth 2.0 for GitHub

ユーザーが GitHub でホストされるリモート Git リポジトリーと連携できるようにするには、以下を実行します。

  1. GitHub OAuth アプリ (OAuth 2.0) をセットアップします。
  2. GitHub OAuth アプリケーションシークレットを適用します。
3.10.1.1.1. GitHub OAuth アプリケーションの設定

Set up a GitHub OAuth App using OAuth 2.0.

前提条件

  • GitHub にログインしている。

手順

  1. https://github.com/settings/applications/new にアクセスします。
  2. 以下の値を設定します。

    1. アプリケーション名: <application name>
    2. ホームページ URL: https://<openshift_dev_spaces_fqdn>/
    3. Authorization callback URL: https://<openshift_dev_spaces_fqdn>/api/oauth/callback
  3. Register application をクリックします。
  4. Generate new client secret をクリックします。
  5. GitHub OAuth アプリケーションシークレットを適用する際に使用するために GitHub OAuth クライアント ID をコピーして保存します。
  6. GitHub OAuth アプリケーションシークレットを適用する際に使用するために GitHub OAuth クライアントシークレット をコピーして保存します。
3.10.1.1.2. GitHub OAuth アプリケーションシークレットの適用

GitHub OAuth App Secret を準備し、これを適用します。

前提条件

  • GitHub OAuth アプリケーションのセットアップが完了します。
  • GitHub OAuth アプリケーションのセットアップ時に生成された以下の値が用意されています。

    • GitHub OAuth Client ID
    • GitHub OAuth Client Secret
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. 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
        che.eclipse.org/scm-github-disable-subdomain-isolation: true 3
    type: Opaque
    stringData:
      id: <GitHub_OAuth_Client_ID> 4
      secret: <GitHub_OAuth_Client_Secret> 5
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    これは、組織が使用している GitHub 製品によって異なります。GitHub.com または GitHub Enterprise Cloud でリポジトリーをホストする場合は、この行を省略するか、デフォルトの https://github.com を入力します。GitHub Enterprise Server でリポジトリーをホストする場合は、GitHub Enterprise Server の URL を入力します。
    3
    この行は、サブドメイン分離 オプションが無効になっている GitHub Enterprise Server にのみ追加されます。GitHub Enterprise Server でサブドメイン分離オプションが有効になっている場合は、このアノテーションを省略するか、false に設定する必要があります。
    4
    GitHub OAuth クライアント ID
    5
    GitHub OAuth クライアントシークレット
  2. シークレットを適用します。

    $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
  3. 出力に Secret が作成されたことを確認します。

別の GitHub プロバイダー用に OAuth 2.0 を設定するには、上記の手順を繰り返し、別の名前で 2 つ目の GitHub OAuth Secret を作成する必要があります。

3.10.1.2. GitLab の OAuth 2.0 の設定

ユーザーが GitLab インスタンスを使用してホストされるリモート Git リポジトリーと連携できるようにするには、以下を実行します。

  1. GitLab で承認されたアプリケーション (OAuth 2.0) をセットアップします。
  2. GitLab で承認されたアプリケーションシークレットを適用します。
3.10.1.2.1. GitLab で承認されたアプリケーションの設定

OAuth 2.0 を使用して GitLab で承認されたアプリケーションを設定します。

前提条件

  • GitLab にログインしている。

手順

  1. アバターをクリックして、プロファイルアプリケーション の編集に移動します。
  2. NameOpenShift Dev Spaces を入力します。
  3. Redirect URI として https://<openshift_dev_spaces_fqdn>/api/oauth/callback を入力します。
  4. Confidential および Expire access tokens のチェックボックスを選択します。
  5. Scopes の下で、apiwrite_repository、および openid のチェックボックスにチェックを入れます。
  6. Save application をクリックします。
  7. GitLab-authorized アプリケーションシークレットを適用する際に使用するために GitLab アプリケーション ID をコピーして保存します。
  8. GitLab-authorized アプリケーションシークレットを適用する際に使用するために GitLab クライアントシークレット をコピーして保存します。
3.10.1.2.2. GitLab で承認されるアプリケーションシークレットの適用

GitLab で承認されるアプリケーションシークレットを準備し、これを適用します。

前提条件

  • GitLab 認証アプリケーションの設定が完了します。
  • GitLab で承認されたアプリケーションのセットアップ時に生成された以下の値が用意されています。

    • GitLab Application ID
    • GitLab Client Secret
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. 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
    stringData:
      id: <GitLab_Application_ID> 3
      secret: <GitLab_Client_Secret> 4
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    GitLab サーバーの URL です。SAAS バージョンには https://gitlab.com を使用します。
    3
    GitLab アプリケーション ID
    4
    GitLab クライアントシークレット
  2. シークレットを適用します。

    $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
  3. 出力に Secret が作成されたことを確認します。
3.10.1.3. Bitbucket サーバーの OAuth 2.0 の設定

OAuth 2.0 を使用すると、ユーザーが Bitbucket Server でホストされているリモート Git リポジトリーを操作できるようになります。

  1. Bitbucket Server で OAuth 2.0 アプリケーションリンクをセットアップします。
  2. Bitbucket Server のアプリケーションリンクシークレットを適用します。
3.10.1.4. Bitbucket Cloud 向け OAuth 2.0 の設定

Bitbucket Cloud でホストされているリモート Git リポジトリーをユーザーが操作できるようにすることができます。

  1. Bitbucket Cloud で OAuth コンシューマー (OAuth 2.0) をセットアップします。
  2. Bitbucket Cloud に OAuth コンシューマーシークレットを適用します。
3.10.1.4.1. Bitbucket Cloud で OAuth コンシューマーを設定する

Bitbucket Cloud で OAuth 2.0 の OAuth コンシューマーをセットアップします。

前提条件

  • Bitbucket Cloud にログインしている。

手順

  1. アバターをクリックして、All workspaces ページに移動します。
  2. ワークスペースを選択してクリックします。
  3. SettingsOAuth consumersAdd consumer に移動します。
  4. NameOpenShift Dev Spaces を入力します。
  5. Callback URL として https://<openshift_dev_spaces_fqdn>/api/oauth/callback と入力します。
  6. Permissions で、AccountRepositories のすべてのチェックボックスをオンにして、Save をクリックします。
  7. 追加されたコンシューマーを展開し、Bitbucket OAuth コンシューマーシークレットを適用する際に使用するために キー 値をコピーして保存します。
  8. Bitbucket OAuth コンシューマーシークレットを適用する際に使用するために シークレット 値をコピーして保存します。
3.10.1.4.2. Bitbucket Cloud に OAuth コンシューマーシークレットを適用する

Bitbucket Cloud の OAuth コンシューマーシークレットを準備して適用します。

前提条件

  • OAuth コンシューマーは Bitbucket Cloud でセットアップされます。
  • Bitbucket OAuth コンシューマーのセットアップ時に生成された次の値が準備されています。

    • Bitbucket OAuth コンシューマーキー
    • Bitbucket OAuth コンシューマーシークレット
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. 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
    stringData:
      id: <Bitbucket_Oauth_Consumer_Key> 2
      secret: <Bitbucket_Oauth_Consumer_Secret> 3
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    Bitbucket OAuth コンシューマーキー
    3
    Bitbucket OAuth コンシューマーシークレット
  2. シークレットを適用します。

    $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
  3. 出力に Secret が作成されたことを確認します。
3.10.1.5. Bitbucket サーバー向け OAuth 1.0 の設定

ユーザーが Bitbucket サーバーでホストされるリモート Git リポジトリーと連携できるようにするには、以下を実行します。

  1. Bitbucket Server でアプリケーションリンク (OAuth 1.0) を設定します。
  2. Bitbucket Server のアプリケーションリンクシークレットを適用します。
3.10.1.6. Microsoft Azure DevOps サービス用の OAuth 2.0 の設定

ユーザーが Microsoft Azure Repos でホスティングされているリモート Git リポジトリーを操作できるようにするには:

  1. Microsoft Azure DevOps Services OAuth アプリケーション (OAuth 2.0) をセットアップします。
  2. Microsoft Azure DevOps Services OAuth アプリケーションシークレットを適用します。

3.10.1.6.1. Microsoft Azure DevOps Services OAuth アプリケーションのセットアップ

OAuth 2.0 を使用して、Microsoft Azure DevOps Services OAuth アプリケーションをセットアップします。

前提条件

  • Microsoft Azure DevOps Services にログインしています。

    重要

    Third-party application access via OAuth が、組織で有効になっています。Change application connection & security policies for your organization を参照してください。

    手順

    1. https://app.vsaex.visualstudio.com/app/register/ にアクセスしてください。
    2. 以下の値を設定します。

      1. 会社名: OpenShift Dev Spaces
      2. アプリケーション名: OpenShift Dev Spaces
      3. Application website: https://<openshift_dev_spaces_fqdn>/
      4. Authorization callback URL: https://<openshift_dev_spaces_fqdn>/api/oauth/callback
    3. Select Authorized scopes で、Code (read and write) を選択します。
    4. Create application をクリックします。
    5. Microsoft Azure DevOps Services OAuth アプリケーションシークレットを適用する際に使用するために アプリケーション ID をコピーして保存します。
    6. Show をクリックして、Client Secret を表示します。
    7. Microsoft Azure DevOps Services OAuth アプリケーションシークレットを適用する際に使用するために クライアントシークレット をコピーして保存します。

3.10.1.6.2. Microsoft Azure DevOps Services OAuth アプリケーションシークレットの適用

Microsoft Azure DevOps Services シークレットを準備および適用します。

前提条件

  • Microsoft Azure DevOps Services OAuth アプリケーションのセットアップが完了しました。
  • Microsoft Azure DevOps Services OAuth アプリの設定時に生成された次の値が用意されています。

    • アプリケーション ID
    • Client Secret
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. Secret を準備します。

    kind: Secret
    apiVersion: v1
    metadata:
      name: azure-devops-oauth-config
      namespace: openshift-devspaces1
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: oauth-scm-configuration
      annotations:
        che.eclipse.org/oauth-scm-server: azure-devops
    type: Opaque
    stringData:
      id: <Microsoft_Azure_DevOps_Services_OAuth_App_ID>2
      secret: <Microsoft_Azure_DevOps_Services_OAuth_Client_Secret>3
    1
    OpenShift Dev Spaces namespace。デフォルトは openshift-devspaces です。
    2
    Microsoft Azure DevOps Services OAuth アプリケーション ID
    3
    Microsoft Azure DevOps Services OAuth クライアントシークレット
  2. シークレットを適用します。

    $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
  3. 出力に Secret が作成されたことを確認します。
  4. OpenShift Dev Spaces サーバーコンポーネントのロールアウトが完了するまで待ちます。

3.10.2. Dev Spaces ユーザーのクラスターロールの設定

OpenShift Dev Spaces ユーザーにクラスターロールを追加することで、より多くのクラスター権限を付与できます。

前提条件

  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. ユーザーロール名を定義します。

    $ USER_ROLES=<name> 1
    1
    一意のリソース名。
  2. OpenShift Dev Spaces Operator がデプロイされている namespace を見つけます。

    $ OPERATOR_NAMESPACE=$(oc get pods -l app.kubernetes.io/component=devspaces-operator -o jsonpath={".items[0].metadata.namespace"} --all-namespaces)
  3. 必要なロールを作成します。

    $ kubectl apply -f - <<EOF
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: ${USER_ROLES}
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
    rules:
      - verbs:
          - <verbs> 1
        apiGroups:
          - <apiGroups> 2
        resources:
          - <resources> 3
    EOF
    1
    <verbs> として、このルールに含まれるすべての ResourceKind および AttributeRestrictions に適用されるすべての動詞をリストします。* を使用してすべての動詞を表すことができます。
    2
    <apiGroups> として、リソースを含む APIGroups に名前を付けます。
    3
    <resources> として、このルールが適用されるすべてのリソースをリストします。* を使用してすべての動詞を表すことができます。
  4. ロールを OpenShift Dev Spaces Operator に委譲します。

    $ kubectl apply -f - <<EOF
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: ${USER_ROLES}
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
    subjects:
      - kind: ServiceAccount
        name: devspaces-operator
        namespace: ${OPERATOR_NAMESPACE}
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: ${USER_ROLES}
    EOF
  5. ロールを che サービスアカウントに委譲するように OpenShift Dev Spaces Operator を設定します。

    $ kubectl patch checluster devspaces \
      --patch '{"spec": {"components": {"cheServer": {"clusterRoles": ["'${USER_ROLES}'"]}}}}' \
      --type=merge -n openshift-devspaces
  6. ロールをユーザーに委譲するように OpenShift Dev Spaces サーバーを設定します。

    $ kubectl patch checluster devspaces \
      --patch '{"spec": {"devEnvironments": {"user": {"clusterRoles": ["'${USER_ROLES}'"]}}}}' \
      --type=merge -n openshift-devspaces
  7. OpenShift Dev Spaces サーバーコンポーネントのロールアウトが完了するまで待ちます。
  8. ログアウトして、新しいロールを適用するようにユーザーに依頼します。

3.10.3. 高度な認証の設定

OpenShift Dev Spaces へのアクセスを許可するユーザーとグループを決定できます。

前提条件

  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. CheCluster カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」 を参照してください。

    spec:
      networking:
        auth:
          advancedAuthorization:
            allowUsers:
              - <allow_users> 1
            allowGroups:
              - <allow_groups> 2
            denyUsers:
              - <deny_users> 3
            denyGroups:
              - <deny_groups> 4
    1
    Red Hat OpenShift Dev Spaces へのアクセスが許可されているユーザーのリスト。
    2
    Red Hat OpenShift Dev Spaces へのアクセスが許可されているユーザーのグループのリスト (OpenShift Container Platform のみ)。
    3
    Red Hat OpenShift Dev Spaces へのアクセスを拒否されたユーザーのリスト。
    4
    Red Hat OpenShift Dev Spaces へのアクセスを拒否されたユーザーのグループのリスト (OpenShift Container Platform のみ)。
  2. OpenShift Dev Spaces サーバーコンポーネントのロールアウトが完了するまで待ちます。
注記

OpenShift Dev Spaces へのアクセスをユーザーに許可するには、そのユーザーを allowUsers リストに追加します。あるいは、ユーザーがメンバーとなっているグループを選択し、そのグループを allowGroups リストに追加します。OpenShift Dev Spaces へのユーザーのアクセスを拒否するには、そのユーザーを denyUsers リストに追加します。あるいは、ユーザーがメンバーとなっているグループを選択し、そのグループを denyGroups リストに追加します。ユーザーが allowdeny の両方のリストに登録されている場合は、OpenShift Dev Spaces へのアクセスは拒否されます。

allowUsersallowGroups が空の場合、deny リストにあるユーザーを除くすべてのユーザーが OpenShift Dev Spaces へのアクセスを許可されます。denyUsersdenyGroups が空の場合、allow リストのユーザーのみが OpenShift Dev Spaces へのアクセスを許可されます。

allowdeny リストの両方が空の場合、すべてのユーザーが OpenShift Dev Spaces にアクセスできます。

3.10.4. GDPR に準拠したユーザーデータの削除

個人データを消去する権利を個人に強制する General Data Protection Regulation (GDPR) に従って、OpenShift Container Platform 上のユーザーのデータを削除できます。他の Kubernetes インフラストラクチャーのプロセスは異なる場合があります。Red Hat OpenShift Dev Spaces のインストールに使用しているプロバイダーのユーザー管理のベストプラクティスに従ってください。

警告

次のようにユーザーデータを削除すると、元に戻すことはできません。削除されたデータはすべて削除され、復元できなくなります。

前提条件

手順

  1. 次のコマンドを使用して、OpenShift クラスター内のすべてのユーザーをリスト表示します。

    $ oc get users
  2. ユーザーエントリーを削除します。
重要

ユーザーに関連するリソース (プロジェクト、ロール、サービスアカウントなど) がある場合は、ユーザーを削除する前に、まずそれらを削除する必要があります。

$ oc delete user <username>

3.11. Fuse-overlayfs の設定

デフォルトでは、Universal Developer Image (UDI) には、ワークスペース内でコンテナーイメージをビルドおよびプッシュするために使用できる Podman と Buildah が含まれています。ただし、UDI の Podman と Buildah は、コピーオンライトのサポートを提供しない vfs ストレージドライバーを使用するように設定されています。より効率的なイメージ管理を行うには、ルートレス環境でコピーオンライトをサポートする Fuse-overlayfs ストレージドライバーを使用します。

3.11.1. OpenShift の/dev/Fuse へのコンテナーアクセスを有効にする

Fuse-overlayfs を使用するには、まず /dev/Fuse を ワークスペースコンテナーからアクセスできるようにする必要があります。

注記

OpenShift バージョン 4.15 以降では、/dev/Fuse デバイスがデフォルトで使用できるため、この手順は必要ありません。リリースノートを 参照してください。

警告

OpenShift クラスター上で MachineConfig リソースを作成することは、クラスターに高度なシステムレベルの変更を加えることになるため、潜在的に危険なタスクです。

詳細および考えられるリスクについては、MachineConfig のドキュメント を参照してください。

前提条件

  • 使用しているオペレーティングシステムに Butane ツール (butane) がインストールされています。
  • 宛先 OpenShift クラスターへの管理権限を持つアクティブな oc セッション。CLI の使用開始を 参照してください。

手順

  1. OpenShift クラスターのタイプ (シングルノードクラスター、または個別のコントロールプレーンとワーカーノードを持つマルチノードクラスター) に基づいて環境変数を設定します。

    • シングルノードクラスターの場合は、次のように設定します。

      $ NODE_ROLE=master
    • マルチノードクラスターの場合は、次のように設定します。

      $ NODE_ROLE=worker
  2. OpenShift Butane 設定バージョンの環境変数を設定します。この変数は、OpenShift クラスターのメジャーバージョンとマイナーバージョンです。たとえば、4.12.04.13.0、または 4.14.0 です。

    $ VERSION=4.12.0
  3. NODE_ROLE ノードに 99-podman-Fuse という名前のドロップイン CRI-O 設定ファイルを作成する MachineConfig リソースを作成します。この設定ファイルにより、特定の Pod が /dev/Fuse デバイスにアクセスできるようになります。

    cat << EOF | butane | oc apply -f -
    variant: openshift
    version: ${VERSION}
    metadata:
      labels:
        machineconfiguration.openshift.io/role: ${NODE_ROLE}
      name: 99-podman-dev-fuse-${NODE_ROLE}
    storage:
      files:
      - path: /etc/crio/crio.conf.d/99-podman-fuse 1
        mode: 0644
        overwrite: true
        contents: 2
          inline: |
            [crio.runtime.workloads.podman-fuse] 3
            activation_annotation = "io.openshift.podman-fuse" 4
            allowed_annotations = [
              "io.kubernetes.cri-o.Devices" 5
            ]
            [crio.runtime]
            allowed_devices = ["/dev/fuse"] 6
    EOF
    1
    CRI-O の新しいドロップイン設定ファイルへの絶対ファイルパス。
    2
    新しいドロップイン設定ファイルの内容。
    3
    podman-Fuse ワークロードを定義します。
    4
    podman-Fuse ワークロード設定をアクティブにする Pod アノテーション。
    5
    podman-Fuse ワークロードが処理できるアノテーションのリスト。
    6
    ユーザーが io.kubernetes.cri-o.Devices アノテーションを使用して指定できるホスト上のデバイスのリスト。
  4. MachineConfig リソースを適用した後、変更が適用されると、ワーカー ロールを持つ各ノードのスケジュール設定が一時的に無効になります。ノードのステータスを表示します。

    $ oc get nodes

    出力例:

    NAME                           STATUS                     ROLES    AGE   VERSION
    ip-10-0-136-161.ec2.internal   Ready                      worker   28m   v1.27.9
    ip-10-0-136-243.ec2.internal   Ready                      master   34m   v1.27.9
    ip-10-0-141-105.ec2.internal   Ready,SchedulingDisabled   worker   28m   v1.27.9
    ip-10-0-142-249.ec2.internal   Ready                      master   34m   v1.27.9
    ip-10-0-153-11.ec2.internal    Ready                      worker   28m   v1.27.9
    ip-10-0-153-150.ec2.internal   Ready                      master   34m   v1.27.9
  5. ワーカー ロールを持つすべてのノードのステータスが Ready に なると、次のアノテーションを持つすべての Pod で /dev/Fuse が利用できるようになります。

    io.openshift.podman-fuse: ''
    io.kubernetes.cri-o.Devices: /dev/fuse

検証手順

  1. ワーカー ロールを持つノードの名前を取得します。

    $ oc get nodes
  2. ワーカーノードへの oc デバッグ セッションを開きます。

    $ oc debug node/<nodename>
  3. 99-podman-Fuse という名前の新しい CRI-O 設定ファイルが存在することを確認します。

    sh-4.4# stat /host/etc/crio/crio.conf.d/99-podman-fuse

3.11.2. ワークスペース内で Podman と Buildah に Fuse-overlayfs を使用する

ユーザーは、https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.12/html-single/user_guide/index#end-user-guide :using-the-Fuse-overlay-storage-driver に従って、既存のワークスペースを更新し、Podman および Buildah 用の Fuse-overlayfs ストレージドライバーを使用できます。

第4章 IDE 拡張機能の管理

IDE は拡張機能またはプラグインを使用して機能を拡張します。拡張機能を管理するメカニズムは IDE によって異なります。

4.1. Microsoft Visual Studio Code の拡張機能 - オープンソース

拡張機能を管理するために、この IDE は次の Open VSX レジストリーインスタンスのいずれかを使用します。

  • エアギャップ環境、オフライン環境、およびプロキシー制限環境をサポートする OpenShift Dev Spaces の プラグインレジストリー Pod で実行される Open VSX レジストリーの組み込みインスタンス。組み込みの Open VSX レジストリーには、open-vsx.org で公開されている拡張機能のサブセットのみが含まれています。このサブセットは カスタマイズ可能 です。
  • インターネット経由でアクセスされるパブリック open-vsx.org レジストリー。
  • OpenShift Dev Spaces ワークスペース Pod からアクセスできるネットワーク上にデプロイされるスタンドアロンの Open VSX レジストリーインスタンス。

デフォルトは、Open VSX レジストリーの埋め込みインスタンスです。

4.1.1. Open VSX レジストリーインスタンスの選択

デフォルトは、Open VSX レジストリーの埋め込みインスタンスです。

デフォルトの Open VSX レジストリーインスタンスが必要なものではない場合は、次のいずれかのインスタンスを選択できます。

  • インターネットへのアクセスを必要とする、https://open-vsx.org の Open VSX レジストリーインスタンス。
  • OpenShift Dev Spaces ワークスペース Pod からアクセスできるネットワーク上にデプロイされるスタンドアロンの Open VSX レジストリーインスタンス。

手順

  • CheCluster カスタムリソースの openVSXURL 値を編集します。

    spec:
      components:
        pluginRegistry:
          openVSXURL: "<url_of_an_open_vsx_registry_instance>" 1
    1
    例: openVSXURL: "https://open-vsx.org"
    ヒント
    • plugin-registry Pod に組み込まれた Open VSX レジストリーインスタンスを選択するには、openVSXURL: '' を使用します。含まれる拡張機能のリストをカスタマイズ できます。
    • また、その URL が組織のクラスター内からアクセス可能であり、プロキシーによってブロックされていない場合は、スタンドアロンの Open VSX レジストリーインスタンスの URL で openVSXURL を指すこともできます。

4.1.2. 組み込みの Open VSX レジストリーインスタンスでの拡張機能の追加または削除

埋め込まれた Open VSX レジストリーインスタンスの拡張機能を追加または削除できます。これにより、組織のワークスペースで使用できる Open VSX レジストリーのカスタムビルドが作成されます。

ヒント

OpenShift Dev Spaces の更新後に最新のセキュリティー修正を取得するには、最新のタグまたは SHA に基づいてコンテナーを再構築します。

手順

  1. 選択した各拡張機能の発行元と名前を取得します。

    1. Open VSX レジストリー Web サイト で拡張機能を見つけ、拡張機能のリストページの URL をコピーします。
    2. コピーした URL から <publisher><extension> の名前を抽出します。

      https://www.open-vsx.org/extension/<publisher>/<extension>
      ヒント

      拡張機能が Microsoft Visual Studio Marketplace からのみ入手可能で、Open VSX からは入手できない場合は、拡張機能の発行者に、これらの 手順 に従って open-vsx.org にも公開するように依頼できます。この GitHub アクション を使用する可能性があります。

      拡張機能の発行者がいない場合や、または拡張機能を open-vsx.org に公開してくれない場合、および拡張機能に相当する Open VSX がない場合は、Open VSX チームに 問題を報告する ことを検討してください。

  2. プラグインレジストリーリポジトリー をダウンロードするか、フォークしてクローンします。
  3. OpenShift Dev Spaces のバージョンに対応するブランチをチェックアウトします。

    git checkout devspaces-$PRODUCT_VERSION-rhel-8
  4. 追加または削除する必要がある拡張機能ごと に、openvsx-sync.json ファイル を編集します。

    • 拡張機能を追加するには、発行元と拡張機能の名前を openvsx-sync.json ファイルに追加します。
    • 拡張機能を削除するには、openvsx-sync.json ファイルから発行元と拡張機能の名前を削除します。
    • 次の JSON 構文を使用します。

          {
              "id": "<publisher>.<extension>"
          }
      ヒント
      • open-vsx.org の最新の拡張バージョンがデフォルトです。または、新しい行に "version": "<extension_version>" を追加して、バージョンを指定することもできます。
      • クローズドソースの拡張機能または社内の内部使用のみを目的として開発された拡張機能がある場合は、カスタムプラグインレジストリーコンテナーにアクセスできる URL を使用して、.vsix ファイルから直接、拡張機能を追加できます。

            {
                "id": "<publisher>.<extension>",
                "download": "<url_to_download_vsix_file>",
                "version": "<extension_version>"
            }
      • リソースを使用する前に、Microsoft Visual Studio Marketplace利用規約 をお読みください。
  5. プラグインレジストリーコンテナーイメージをビルドし、quay.io などのコンテナーレジストリーに公開します。

    1. $ ./build.sh -o <username> -r quay.io -t custom
    2. $ podman push quay.io/<username/plugin_registry:custom>
  6. イメージ (quay.io など) を指すように、社内のクラスター内の CheCluster カスタムリソースを編集し、変更を保存します。

    spec:
      components:
        pluginRegistry:
          deployment:
            containers:
              - image: quay.io/<username/plugin_registry:custom>
          openVSXURL: ''

検証

  1. plugin-registry Pod が再始動して実行中であることを確認します。
  2. ワークスペースを再起動し、ワークスペース IDE の 拡張機能 ビューで使用可能な拡張機能を確認します。

第5章 Dev Spaces サーバー API の使用

OpenShift Dev Spaces サーバーのワークロードを管理するには、Swagger Web ユーザーインターフェイスを使用して OpenShift Dev Spaces サーバー API をナビゲートします。

手順

  • Swagger API Web ユーザーインターフェイス: https://<openshift_dev_spaces_fqdn>/swagger に移動します。

関連情報

第6章 Dev Spaces のアップグレード

この章では、CodeReady Workspaces 3.1 から OpenShift Dev Spaces 3.12 にアップグレードする方法について説明します。

6.1. chectl 管理ツールのアップグレード

このセクションでは、dsc 管理ツールをアップグレードする方法について説明します。

6.2. 更新承認ストラテジーの指定

Red Hat OpenShift Dev Spaces Operator は、2 つのアップグレードストラテジーをサポートしています。

Automatic
Operator は、新しい更新が利用可能になったときにそれらをインストールします。
Manual
インストールを開始する前に、新しい更新を手動で承認する必要があります。

OpenShift Web コンソールを使用して、Red Hat OpenShift Dev Spaces Operator の更新承認ストラテジーを指定できます。

前提条件

  • クラスター管理者による OpenShift Web コンソールセッション。Web コンソールへのアクセスを 参照してください。
  • Red Hat エコシステムカタログを使用してインストールされた OpenShift Dev Spaces のインスタンス。

手順

  1. OpenShift Web コンソールで、OperatorsInstalled Operators に移動します。
  2. インストールされているオペレーターのリストで Red Hat OpenShift Dev Spaces をクリックします。
  3. Subscription タブに移動します。
  4. 更新承認 ストラテジーを Automatic または Manual に設定します。

6.3. OpenShift Web コンソールを使用した Dev Spaces のアップグレード

OpenShift Web コンソールの Red Hat エコシステムカタログにある Red Hat OpenShift Dev Spaces Operator を使用して、以前のマイナーバージョンからのアップグレードを手動で承認できます。

前提条件

  • クラスター管理者による OpenShift Web コンソールセッション。Web コンソールへのアクセスを 参照してください。
  • Red Hat エコシステムカタログを使用してインストールされた OpenShift Dev Spaces のインスタンス。
  • サブスクリプションの承認ストラテジーは Manual になります。「更新承認ストラテジーの指定」 を参照してください。

手順

検証手順

  1. OpenShift Dev Spaces インスタンスに移動します。
  2. 3.12 のバージョン番号はページの下部に表示されます。

6.4. CLI 管理ツールを使用した Dev Spaces のアップグレード

本セクションでは、CLI 管理ツールを使用して以前のマイナーバージョンからアップグレードする方法を説明します。

前提条件

  • OpenShift の管理者アカウント。
  • 以前のマイナーバージョンの CodeReady Workspaces の実行中のインスタンス。これは openshift-devspaces OpenShift プロジェクトの同じ OpenShift インスタンス上で CLI 管理ツールを使用してインストールします。
  • OpenShift Dev Spaces バージョン 3.12 用の dsc「dsc 管理ツールのインストール」 を参照してください。

手順

  1. 実行中のすべての CodeReady Workspaces 3.1 ワークスペースの変更を保存し、Git リポジトリーにプッシュします。
  2. CodeReady Workspaces 3.1 インスタンスのすべてのワークスペースをシャットダウンします。
  3. OpenShift Dev Spaces をアップグレードします。

    $ dsc server:update -n openshift-devspaces
    注記

    低速なシステムまたはインターネット接続の場合は、--k8spodwaittimeout=1800000 フラグオプションを追加して、Pod のタイムアウト期間を 1800000 ms 以上に拡張します。

検証手順

  1. OpenShift Dev Spaces インスタンスに移動します。
  2. 3.12 のバージョン番号はページの下部に表示されます。

6.5. 制限された環境での Dev Spaces のアップグレード

このセクションでは、Red Hat OpenShift Dev Spaces をアップグレードして、制限された環境で CLI 管理ツールを使用してマイナーバージョンの更新を実行する方法を説明します。

前提条件

手順

  1. ミラーリングスクリプトをダウンロードして実行し、カスタム Operator カタログをインストールし、関連するイメージをミラーリングします (prepare-restricted-environment.sh)。

    $ bash prepare-restricted-environment.sh \
      --devworkspace_operator_index registry.redhat.io/redhat/redhat-operator-index:v4.15\
      --devworkspace_operator_version "v0.26.0" \
      --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.15" \
      --prod_operator_package_name "devspaces" \
      --prod_operator_bundle_name "devspacesoperator" \
      --prod_operator_version "v3.12.0" \
      --my_registry "<my_registry>" 1
    1
    イメージがミラーリングされるプライベート Docker レジストリー
  2. CodeReady Workspaces 3.1 インスタンスで実行されているすべてのワークスペースで、変更を保存し、Git リポジトリーに再度プッシュします。
  3. CodeReady Workspaces 3.1 インスタンスのすべてのワークスペースを停止します。
  4. 以下のコマンドを実行します。

    $ dsc server:update --che-operator-image="$TAG" -n openshift-devspaces --k8spodwaittimeout=1800000

検証手順

  1. OpenShift Dev Spaces インスタンスに移動します。
  2. 3.12 のバージョン番号はページの下部に表示されます。

6.6. OpenShift での Dev Workspace Operator の修復

OLM の 再起動やクラスターのアップグレードなどの特定の条件下では、クラスター上にすでに Dev Workspace Operator が存在している場合でも、OpenShift Dev Spaces の Dev Spaces Operator によって自動的にインストールされることがあります。その場合、次のように OpenShift で Dev Workspace Operator を修復できます。

前提条件

  • 宛先 OpenShift クラスターへのクラスター管理者としてのアクティブな oc セッション。CLI の使用開始を 参照してください。
  • OpenShift Web コンソールの Installed Operators ページに、Dev Workspace Operator の複数のエントリーが表示されるか、1 つのエントリーが ReplaceingPending のループに陥っています。

手順

  1. 失敗した Pod を含む devworkspace-controller namespace を削除します。
  2. DevWorkspace および DevWorkspaceTemplate カスタムリソース定義 (CRD) を更新するには、変換ストラテジーを None に設定し、webhook セクション全体を削除します。

    spec:
      ...
      conversion:
        strategy: None
    status:
    ...
    ヒント

    AdministrationCustomResourceDefinitionsDevWorkspace を検索することにより、OpenShift Web コンソールの Administrator パースペクティブで DevWorkspace および DevWorkspaceTemplate CRD を見つけて編集できます。

    注記

    DevWorkspaceOperatorConfig および DevWorkspaceRouting CRD の変換ストラテジーは、デフォルトで None に設定されています。

  3. Dev Workspace Operator サブスクリプションを削除します。

    $ oc delete sub devworkspace-operator \
    -n openshift-operators 1
    1
    openshift-operators または Dev Workspace Operator がインストールされている OpenShift プロジェクト。
  4. <devworkspace-operator.vX.Y.Z> 形式で Dev Workspace Operator CSV を取得します。

    $ oc get csv | grep devworkspace
  5. 各 Dev Workspace Operator CSV を削除します。

    $ oc delete csv <devworkspace_operator.vX.Y.Z> \
    -n openshift-operators 1
    1
    openshift-operators または Dev Workspace Operator がインストールされている OpenShift プロジェクト。
  6. 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.26.0
    EOF
    1
    Automatic または Manual
    重要

    installPlanApproval: Manual の場合、OpenShift Web コンソールの Administrator パースペクティブで OperatorInstalled Operators に移動し、Dev Workspace Operator: Upgrade availablePreview InstallPlanApprove に対して以下を選択します。

  7. OpenShift Web コンソールの Administrator パースペクティブで、OperatorsInstalled Operators に移動し、Dev Workspace OperatorSucceeded ステータスを確認します。

第7章 Dev Spaces のアンインストール

警告

OpenShift Dev Spaces をアンインストールすると、OpenShift Dev Spaces 関連のすべてのユーザーデータが削除されます。

oc を使用して OpenShift Dev Spaces インスタンスをアンインストールします。

前提条件

手順

  • OpenShift Dev Spaces インスタンスを削除します。

    $ dsc server:delete
ヒント

--delete-namespace オプションは、OpenShift Dev Spaces namespace を削除します。

--delete-all オプションは、Dev Workspace Operator と関連リソースを削除します。

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.