インタラクティブな作業環境を作成する
インタラクティブな作業環境をクラスタ上に作成するにはワークスペース機能を使用します。 ワークスペースは、ブラウザからアクセスできるインタラクティブな作業環境です。 JupyterLab などのインターフェイスを通して PFCP の計算リソースを利用できます。
ワークスペースの隔離
ワークスペースの各インスタンスを隔離する単位は、個人ユーザ と ネームスペース の 2 通りがあります。 ワークスペースを作成する際に、どちらかの隔離タイプを選んで作成できます。
個人ユーザ
個人ユーザ単位で隔離するワークスペースは、ワークスペースを作成したユーザのみが利用できます。 そのため、SSH 秘密鍵など個人の認証情報を安全に保存できます。
組織管理者を含め、他のユーザは利用できません。 ただし、組織管理者はワークスペースを休止・削除できます。
利用可能な操作を以下に一覧します。
| 操作 | ワークスペースを作成したユーザ | 組織管理者 | その他のユーザ | 
|---|---|---|---|
| ブラウザからワークスペースへのアクセス | o | ||
| ワークスペースの更新 | o | ||
| 稼働中のワークスペースの休止 | o | o | |
| 休止中のワークスペースの再開 | o | ||
| ワークスペースの削除 | o | o | 
ネームスペース
ネームスペース単位で隔離するワークスペースは、ワークスペースが作成されたネームスペースに対し org-edit Role をもつユーザが利用できます。
そのため、ネームスペースに対する権限をもつユーザ間でワークスペースを共有できます。
ネームスペースに対し org-edit Role をもたないユーザは利用できません。
ワークスペースを作成する
個人ユーザ単位で隔離するワークスペースは、ルートネームスペースにのみ作成可能です。
そのため、作成にはルートネームスペースに対する org-edit または org-workspace-edit ClusterRole の付与が必要です。
ClusterRole を付与する方法は、RoleBinding の作成 をご参照ください。
- ポータルの ワークスペースページ にアクセスし、新規作成 ボタンをクリックします。
 - フォームを入力し、作成 ボタンをクリックします。
 
ワークスペースにアクセスする
- ポータルの ワークスペースページ にアクセスします。
 - アクセスしたいワークスペースの URL 列にあるリンクをクリックします。
 
ワークスペースを休止・再開する
利用していないワークスペースを休止することで、計算リソースを節約できます。
- ポータルの ワークスペースページ にアクセスします。
 - 休止したいワークスペースを選択し、休止 ボタンをクリックします。
 
休止したワークスペースは、同様の手順で再開できます。
- ポータルの ワークスペースページ にアクセスします。
 - 再開したいワークスペースを選択し、再開 ボタンをクリックします。
 
ワークスペースを削除する
- ポータルの ワークスペースページ にアクセスします。
 - 削除したいワークスペースを選択し、削除 ボタンをクリックします。
 
Kubernetes マニフェストでワークスペースを管理する
ワークスペースはポータルでの操作のほかに、Kubernetes マニフェストを使った管理も可能です。 マニフェストを使うことで、ワークスペースの管理を自動化でき、ワークスペース設定の再現性を高めることができます。
Workspace カスタムリソース
ワークスペースの各インスタンスは、Workspace カスタムリソースで表現されます。
Workspace リソースから、ワークスペースの実体となる Pod が作成されます。 Workspace リソースを作成・更新・削除することで、ワークスペースを管理できます。
Workspace リソースは以下の形式で定義されます。
apiVersion: preferred.jp/v1alpha1
kind: Workspace
metadata:
  name: ...
  namespace: ...
spec:
  owner:
    type: Individual
  presetRef: ...
  podTemplate: ...
  volumeClaimTemplates:
  - ...
spec.owner.typeフィールド- ワークスペースの隔離タイプを指定します。
 - 個人ユーザで隔離する場合は 
Individual、ネームスペースで隔離する場合はNamespaceを指定します。 
spec.presetRefフィールド- ワークスペースに適用する プリセット を指定します。
 
spec.podTemplateフィールド- ワークスペースの実体となる Pod に適用する PodTemplateSpec を指定します。
 
spec.volumeClaimTemplatesフィールド- ワークスペースから作成する PersistentVolumeClaim のリストを指定します。
 - 作成する PersistentVolumeClaim を 
spec.podTemplateで参照することで、ワークスペースから PersistentVolume を利用できます。 
プリセット
ワークスペースの実体となる Pod の構成を プリセット として事前に定義できます。 プリセットを定義することで、似た構成をもつワークスペースの管理を簡素化できます。
プリセットは、ワークスペースに適用する spec.podTemplate フィールドのデフォルト値を定義します。
Workspace リソースからワークスペースの実体となる Pod が作成される際、Workspace リソースの spec.podTemplate フィールドに記述しなかったフィールドはプリセットから引き継がれます。
spec.podTemplate フィールドに記述したフィールドは、その値で上書きされ Pod が作成されます。
プリセットには、ClusterWorkspacePreset カスタムリソースと WorkspacePreset カスタムリソースの 2 種類があります。
ClusterWorkspacePreset カスタムリソース
ClusterWorkspacePreset カスタムリソースは、PFCP マネージドなクラスタ全体で共有されるプリセットです。 すべての組織のワークスペースで利用できます。
利用可能な ClusterWorkspacePreset リソースは、kubectl get clusterworkspacepreset コマンド(または kubectl get cwspreset)で確認できます。
Workspace リソースの spec.presetRef フィールドを以下のように設定することで、適用したい ClusterWorkspacePreset を選択できます。
apiVersion: preferred.jp/v1alpha1
kind: Workspace
spec:
  presetRef:
    apiVersion: preferred.jp/v1alpha1
    kind: ClusterWorkspacePreset
    name: NAME
spec.presetRef フィールドを省略した場合、default ClusterWorkspacePreset が適用されます。
default ClusterWorkspacePreset の一部の値を抜粋すると、以下のようになっています。
apiVersion: preferred.jp/v1alpha1
kind: ClusterWorkspacePreset
metadata:
  name: default
spec:
  podTemplate:
    spec:
      containers:
      - name: workspace
        image: registry.pfcomputing.internal/mncore-sdk/mncore-sdk-full
        command:
        - /app/jupyter/bin/jupyter
        - lab
Workspace リソースの spec.podTemplate フィールドを記述しなかった場合、この値に従い、MN-Core SDK のコンテナイメージで JupyterLab を起動する workspace コンテナをもつ Pod が作成されます。
spec.podTemplate フィールドでコンテナイメージやコマンドなどを指定することで、このデフォルト設定を上書きできます。
また、workspace コンテナのリソース要求の設定や、workspace 以外のコンテナの追加も可能です。
WorkspacePreset カスタムリソース
WorkspacePreset カスタムリソースは、ネームスペース単位で共有されるプリセットです。
ネームスペースに対する org-edit Role をもつユーザが作成・更新・削除できます。
ネームスペースに存在する WorkspacePreset リソースは、kubectl get workspacepreset コマンド(または kubectl get wspreset)で確認できます。
Workspace リソースの spec.presetRef フィールドを以下のように設定することで、適用したい WorkspacePreset を選択できます。
apiVersion: preferred.jp/v1alpha1
kind: Workspace
spec:
  presetRef:
    apiVersion: preferred.jp/v1alpha1
    kind: WorkspacePreset
    name: NAME