4.2. プロジェクトの設定
OpenShift Dev Spaces は、ユーザーごとに、プロジェクト内のワークスペースを分離します。OpenShift Dev Spaces は、ラベルとアノテーションの存在によってユーザープロジェクトを識別します。ワークスペースを起動する際に必要なプロジェクトが存在しない場合、OpenShift Dev Spaces はテンプレート名を使用してプロジェクトを作成します。
OpenShift Dev Spaces の動作は、次の方法で変更できます。
4.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_>
例4.3 ユーザーワークスペースプロジェクト名テンプレートの例
ユーザーワークスペースプロジェクト名テンプレート 結果のプロジェクト例 <username>-devspaces
(デフォルト)user1-devspaces
<userid>-namespace
cge1egvsb2nhba-namespace-ul1411
<userid>-aka-<username>-namespace
cgezegvsb2nhba-aka-user1-namespace-6m2w2b
4.2.2. プロジェクトの事前プロビジョニング
自動プロビジョニングに依存するのではなく、ワークスペースプロジェクトを事前にプロビジョニングできます。ユーザーごとに手順を繰り返します。
手順
CheCluster
レベルでの自動 namespace プロビジョニングを無効にします。devEnvironments: defaultNamespace: autoProvision: false
次のラベルとアノテーションを使用して、<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
- 選択したプロジェクト名を使用します。
4.2.3. ユーザー namespace の設定
この手順では、OpenShift Dev Spaces を使用して ConfigMaps
、Secrets
、PersistentVolumeClaim
、およびその他の Kubernetes オブジェクトを openshift-devspaces
namespace から多数のユーザー固有の namespace にレプリケートするプロセスを説明します。OpenShift Dev Spaces は、共有認証情報、設定ファイル、証明書などの重要な設定データのユーザー namespace への同期を自動化します。
openshift-devspaces namespace の Kubernetes リソースに変更を加えると、OpenShift Dev Spaces はすべてのユーザー namespace にわたって変更を直ちに複製します。逆に、Kubernetes リソースがユーザー namespace で変更されると、OpenShift Dev Spaces は変更を直ちに元に戻します。
手順
以下の
ConfigMap
を作成して、すべてのユーザー namespace に複製します。設定可能性を高めるために、追加のラベルとアノテーションを追加してConfigMap
をカスタマイズできます。その他の可能なラベルとアノテーションは、ボリューム、configmap、シークレットの自動マウント を参照してください。kind: ConfigMap apiVersion: v1 metadata: name: devspaces-user-configmap namespace: openshift-devspaces labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config data: ...
例4.4 ユーザーワークスペースに
settings.xml
ファイルをマウントkind: ConfigMap apiVersion: v1 metadata: name: devspaces-user-configmap 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>
以下の
Secret
を作成して、それをすべてのユーザー namespace に複製します。設定可能性を高めるために、追加のラベルとアノテーションを追加してSecret
をカスタマイズできます。その他の可能なラベルとアノテーションは、ボリューム、configmap、シークレットの自動マウント を参照してください。kind: Secret apiVersion: v1 metadata: name: devspaces-user-secret namespace: openshift-devspaces labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config data: ...
例4.5 ユーザーワークスペースに証明書をマウントする
kind: Secret apiVersion: v1 metadata: name: devspaces-user-secret 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 でのイベントバインディングの追加 を参照してください。例4.6 環境変数をユーザーワークスペースにマウントする
kind: Secret apiVersion: v1 metadata: name: devspaces-user-secret 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
以下の
PersistentVolumeClaim
を作成して、それをすべてのユーザー namespace に複製します。設定可能性を高めるために、追加のラベルとアノテーションを追加して
PersistentVolumeClaim
をカスタマイズできます。その他の可能なラベルとアノテーションは、ボリューム、configmap、シークレットの自動マウント を参照してください。PersistentVolumeClaim
を変更するには、一度削除し、openshift-devspaces namespace に新しいものを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: devspaces-user-pvc namespace: openshift-devspaces labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config spec: ...
例4.7
PersistentVolumeClaim
をユーザーワークスペースにマウントapiVersion: v1 kind: PersistentVolumeClaim metadata: name: devspaces-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
OpenShift Kubernetes Engine を利用するには、
Template
オブジェクトを作成して、各ユーザー namespace 間でテンプレート内に定義されたすべてのリソースをレプリケートできます。前述の
ConfigMap
、Secret
、およびPersistentVolumeClaim
とは別に、Template
オブジェクトには以下を含むことができます。-
LimitRange
-
NetworkPolicy
-
ResourceQuota
-
Role
RoleBinding
apiVersion: template.openshift.io/v1 kind: Template metadata: name: devspaces-user-namespace-configurator namespace: openshift-devspaces labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config objects: ... parameters: - name: PROJECT_NAME - name: PROJECT_ADMIN_USER
parameters
はオプションであり、使用可能なパラメーターを定義します。現時点では、PROJECT_NAME
およびPROJECT_ADMIN_USER
のみがサポートされています。PROJECT_NAME
は OpenShift Dev Spaces namespace の名前で、PROJECT_ADMIN_USER
は namespace の OpenShift Dev Spaces ユーザーです。オブジェクトの namespace 名は、同期中にユーザーの namespace 名に置き換えられます。
例4.8 Kubernetes リソースをユーザー namespace にレプリケートします。
apiVersion: template.openshift.io/v1 kind: Template metadata: name: devspaces-user-namespace-configurator namespace: openshift-devspaces labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config objects: - apiVersion: v1 kind: ResourceQuota metadata: name: devspaces-user-resource-quota spec: ... - apiVersion: v1 kind: LimitRange metadata: name: devspaces-user-resource-constraint spec: ... - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: devspaces-user-roles rules: ... - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: devspaces-user-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: devspaces-user-roles subjects: - kind: User apiGroup: rbac.authorization.k8s.io name: ${PROJECT_ADMIN_USER} parameters: - name: PROJECT_ADMIN_USER
注記Template Kubernetes リソースの作成は、OpenShift でのみサポートされます。
-
関連情報
- https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.18/html-single/user_guide/index#end-user-guide:mounting-configmaps
- https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.18/html-single/user_guide/index#end-user-guide:mounting-secrets
- https://access.redhat.com/documentation/ja-jp/red_hat_openshift_dev_spaces/3.18/html-single/user_guide/index#end-user-guide:requesting-persistent-storage-for-workspaces
- ボリューム、configmaps、シークレットの自動マウント
-
Template
の OpenShift API リファレンス - OpenShift プロジェクト作成の設定