5.2. 配置项目


对于每个用户,OpenShift Dev Spaces 在项目中隔离工作区。OpenShift Dev Spaces 通过存在标签和注解来识别用户项目。启动工作区时,如果所需的项目不存在,OpenShift Dev Spaces 会使用模板名称创建项目。

您可以通过以下方法修改 OpenShift Dev Spaces 行为:

5.2.1. 配置项目名称

您可以在启动一个工作区时配置 OpenShift Dev Spaces 用来创建所需项目的项目名称模板。

有效的项目名称模板遵循以下约定:

  • &lt ;username&gt; 或 <userid > 占位符是必需的。
  • 用户名和 ID 不能包含无效字符。如果用户名或 ID 的格式与 OpenShift 对象的命名约定不兼容,OpenShift Dev Spaces 通过将不兼容的字符替换为有效的名称来更改有效名称。
  • OpenShift Dev Spaces 将 & lt;userid > 占位符评估为 14 个字符长字符串,并添加随机六个字符的后缀以防止 ID 冲突。结果保存在用户首选项中以供重复使用。
  • Kubernetes 将项目名称的长度限制为 63 个字符。
  • OpenShift 限制的长度为 49 个字符。

流程

  • 配置 CheCluster 自定义资源。请参阅 第 5.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”

    spec:
      components:
        devEnvironments:
          defaultNamespace:
            template: <workspace_namespace_template_>
    Copy to Clipboard Toggle word wrap

    例 5.3. 用户工作区项目名称模板示例

    Expand
    用户工作区项目名称模板生成的项目示例

    <username>-devspaces (默认)

    user1-devspaces

    <userid>-namespace

    cge1egvsb2nhba-namespace-ul1411

    <userid>-aka-<username>-namespace

    cgezegvsb2nhba-aka-user1-namespace-6m2w2b

5.2.2. 提前置备项目

您可以提前置备工作区项目,而不依赖于自动配置。为每个用户重复上述步骤。

流程

  1. CheCluster 级别禁用自动命名空间置备:

    devEnvironments:
      defaultNamespace:
        autoProvision: false
    Copy to Clipboard Toggle word wrap
  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>
    Copy to Clipboard Toggle word wrap
    1
    使用您选择的项目名称。

5.2.3. 配置用户命名空间

此流程指导您使用 OpenShift Dev Spaces 将 ConfigMap、Secret、PersistentVolume VolumeClaim 和其他 Kubernetes 对象从 openshift-devspaces 命名空间复制到多个特定于用户的命名空间。OpenShift Dev Spaces 会自动同步重要配置数据,如共享凭证、配置文件和证书到用户命名空间。

如果您在 openshift-devspaces 命名空间中更改 Kubernetes 资源,OpenShift Dev Spaces 会立即在所有用户命名空间中复制更改。相反,如果在用户命名空间中修改了 Kubernetes 资源,OpenShift Dev Spaces 将立即恢复更改。

流程

  1. 创建以下 ConfigMap 以复制到每个用户项目中。为增强配置性,您可以通过添加额外的标签和注解来自定义 ConfigMap。默认情况下,ConfigMap 会自动挂载到用户工作区。如果您不希望 ConfigMap 挂载,请明确添加以下标签来覆盖行为:

    controller.devfile.io/watch-configmap: "false"
    controller.devfile.io/mount-to-devworkspace: "false"
    Copy to Clipboard Toggle word wrap

    有关其他可能的标签和注解,请参阅 自动挂载卷、configmap 和 secret

    例 5.4. 将 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
        controller.devfile.io/watch-configmap: "false"
        controller.devfile.io/mount-to-devworkspace: "false"
    data:
      ...
    Copy to Clipboard Toggle word wrap

    例 5.5. 将 ConfigMap 复制到每个用户项目中,并通过路径 /home/user/.m2 自动将 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>
    Copy to Clipboard Toggle word wrap
  2. 创建以下 Secret 以复制到每个用户项目中。为增强配置性,您可以通过添加额外的标签和注解来自定义 Secret。默认情况下,Secret 会自动挂载到用户工作区。如果您不希望挂载 Secret,请明确添加以下标签来覆盖行为:

    controller.devfile.io/watch-secret: "false"
    controller.devfile.io/mount-to-devworkspace: "false"
    Copy to Clipboard Toggle word wrap

    有关其他可能的标签和注解,请参阅 自动挂载卷、configmap 和 secret

    例 5.6. 将 Secret 复制到每个用户项目中:

    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
        controller.devfile.io/watch-secret: "false"
        controller.devfile.io/mount-to-devworkspace: "false"
      annotations:
        controller.devfile.io/mount-as: env
    stringData:
      ...
    Copy to Clipboard Toggle word wrap

    例 5.7. 将 Secret 复制到每个用户项目中,并通过路径 /etc/pki/ca-trust/source/anchors 自动将 trusted-certificates.crt 文件挂载到每个用户容器中:

    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: |
        ...
    Copy to Clipboard Toggle word wrap
    注意

    在工作区启动时运行 update-ca-trust 命令来导入证书。它可以手动实现,或者通过将此命令添加到 devfile 中的 postStart 事件中。请参阅 在 devfile 中添加事件绑定

    例 5.8. 将 Secret 复制到每个用户项目中,并作为环境变量自动挂载到每个用户容器中:

    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
    Copy to Clipboard Toggle word wrap
  3. 在下面创建 PersistentVolumeClaim,将它复制到每个用户项目中。

    为增强配置,您可以通过添加额外的标签和注解来自定义 PersistentVolumeClaim。有关其他可能的标签和注解,请参阅 自动挂载卷、configmap 和 secret

    要修改 PersistentVolumeClaim,请将其删除并在 openshift-devspaces 命名空间中创建新名称。

    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:
      ...
    Copy to Clipboard Toggle word wrap

    例 5.9. 将 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
    Copy to Clipboard Toggle word wrap
  4. 要使用 OpenShift Kubernetes Engine,您可以创建一个 Template 对象来复制模板中定义的所有资源。

    除了前面提到的 ConfigMapSecretPersistentVolumeClaim 外,Template 对象还可以包括:

    • LimitRange
    • NetworkPolicy
    • ResourceQuota
    • 角色
    • 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
      Copy to Clipboard Toggle word wrap

      参数是可选的,定义可以使用哪些参数。目前,只支持 PROJECT_NAMEPROJECT_ADMIN_USERPROJECT_NAME 是 OpenShift Dev Spaces 命名空间的名称,而 PROJECT_ADMIN_USER 是命名空间的 OpenShift Dev Spaces 用户。

      对象中的 namespace 名称将在同步期间替换为用户的命名空间名称。

      例 5.10. 将 Kubernetes 资源复制到用户项目:

      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
      Copy to Clipboard Toggle word wrap
      注意

      只有在 OpenShift 中才支持创建模板 Kubernetes 资源。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat