3.3. 架构


图 3.1. 使用 Dev Workspace operator 的高级别 OpenShift Dev Spaces 架构

与 devworkspace 交互的 devspace

OpenShift Dev Spaces 在三个组件组上运行:

OpenShift Dev Spaces 服务器组件
管理用户项目和工作区.主要组件是 User dashboard,用户可从中控制其工作区。
dev Workspace operator
创建和控制运行用户工作区所需的 OpenShift 对象。包括 PodServicesPersistentVolume
用户工作区
基于容器的开发环境,包括 IDE。

这些 OpenShift 功能的角色是中心:

dev Workspace 自定义资源
代表用户工作区并由 OpenShift Dev Spaces 操作的有效 OpenShift 对象。它是三组组件的通信通道。
OpenShift 基于角色的访问控制(RBAC)
控制对所有资源的访问。

3.3.1. 服务器组件

OpenShift Dev Spaces 服务器组件确保多租户和工作区管理。

图 3.2. OpenShift Dev Spaces 服务器组件与 Dev Workspace operator 交互

与 devworkspace 交互的 devspaces 部署

3.3.1.1. dev Spaces operator

OpenShift Dev Spaces operator 确保 OpenShift Dev Spaces 服务器组件的完整生命周期管理。它引进了:

CheCluster 自定义资源定义(CRD)
定义 CheCluster OpenShift 对象。
OpenShift Dev Spaces 控制器
创建并控制所需的 OpenShift 对象,以运行 OpenShift Dev Spaces 实例,如 pod、服务和持久性卷。
CheCluster 自定义资源(CR)

在使用 OpenShift Dev Spaces operator 的集群中,可以创建 CheCluster 自定义资源(CR)。OpenShift Dev Spaces operator 可确保此 OpenShift Dev Spaces 实例中 OpenShift Dev Spaces 服务器组件的完整生命周期管理:

3.3.1.2. dev Workspace operator

Dev Workspace Operator (DWO)是 OpenShift Dev Spaces 的依赖项,是 OpenShift Dev Spaces 功能的一个完整部分。DWO 的主要职责之一是协调 Dev Workspace 自定义资源(CR)。

Dev Workspace CR 是 OpenShift Dev Spaces 工作区的 OpenShift 资源表示。当用户在后台使用 OpenShift Dev Spaces 创建工作区时,Dashboard OpenShift Dev Spaces 会在集群中创建一个 Dev Workspace CR。对于每个 OpenShift Dev Spaces 工作区,集群中都有一个底层的 Dev Workspace CR。

图 1 显示了集群中的 Dev Workspace CR 示例:

图 3.3. 集群中的 Dev Workspace CR 示例

DevWorkspace CR 示例

当使用 devfile 使用 OpenShift Dev Spaces 创建工作区时,Dev Workspace CR 包含 devfile 详情。另外,OpenShift Dev Spaces 根据为工作区选择的编辑器将编辑器定义添加到 Dev Workspace CR 中。OpenShift Dev Spaces 还会将属性添加到 Dev Workspace 中,它根据您配置 CheCluster CR 的方式进一步配置工作区。

DevWorkspaceTemplate 是一个自定义资源,它为 Dev Workspaces 定义可重复使用的 spec.template

当一个工作区启动时,DWO 会读取对应的 Dev Workspace CR,并创建必要的资源,如部署、secret、configmap、路由,以便在代表 devfile 中定义的开发环境的末尾是一个工作区 pod。

自定义资源概述

以下自定义资源定义由 Dev Workspace Operator 提供:

  • dev Workspace
  • DevWorkspaceTemplate
  • DevWorkspaceOperatorConfig
  • DevWorkspaceRouting

dev Workspace

Dev Workspace 自定义资源包含有关 OpenShift Dev Spaces 工作区的详情。值得注意的是,它包含 devfile 详情以及编辑器定义的引用。

DevWorkspaceTemplate

在 OpenShift Dev Spaces 中,DevWorkspaceTemplate 自定义资源通常用于为 OpenShift Dev Spaces 工作区定义编辑器(如 Visual Studio Code - Open Source)。您可以使用此自定义资源来定义由多个 Dev Workspaces 重复使用的可重复使用的 spec.template 内容。

DevWorkspaceOperatorConfig

DevWorkspaceOperatorConfig (DWOC)自定义资源定义 DWO 的配置选项。DWOC 有两种不同类型的:

  • 全局配置
  • 非全局配置

全局配置是名为 devworkspace-operator-config 的 DWOC 自定义资源,通常位于 DWO 安装命名空间中。默认情况下,安装时不会创建全局配置。全局配置字段中设置的配置字段将应用到 DWO 和所有 Dev Workspaces。但是,非全局配置可以覆盖 DWOC 配置。

任何 devworkspace-operator-config 以外的任何其他 DWOC 自定义资源都被视为非全局配置。非全局配置不适用于任何 Dev Workspaces,除非 Dev Workspace 包含对 DWOC 的引用。如果全局配置和非全局配置具有相同的字段,非全局配置字段将具有优先权。

Expand
表 3.1. 全局 DWOC 和 OpenShift Dev Spaces-owned DWOC 比较
 全局 DWOCOpenShift Dev Spaces-owned DWOC

资源名称

devworkspace-operator-config

devworkspace-config

Namespace

DWO 安装命名空间

OpenShift Dev Spaces 安装命名空间

默认创建

在 DWO 安装时默认不会创建

在 OpenShift Dev Spaces 安装中默认创建

影响范围

适用于 DWO 本身以及 DWO 管理的所有 Dev Workspaces

适用于由 OpenShift Dev Spaces 创建的 Dev Workspaces

优先级

被 OpenShift Dev Spaces-owned 配置中设置的字段覆盖

如果两者都定义了相同的字段,则优先于全局配置

主要用例

用于定义通常适用于 DWO 的默认、广泛的设置。

用于为 OpenShift Dev Spaces 创建的 Dev Workspaces 定义特定的配置

例如,默认情况下,OpenShift Dev Spaces 在 OpenShift Dev Spaces 命名空间中创建和管理一个非全局 DWOC,名为 devworkspace-config。此 DWOC 包含特定于 OpenShift Dev Spaces 工作区的配置,由 OpenShift Dev Spaces 维护,具体取决于您如何配置 CheCluster CR。当 OpenShift Dev Spaces 创建工作区时,OpenShift Dev Spaces 使用 controller.devfile.io/devworkspace-config 属性添加对 OpenShift Dev Spaces-owned DWOC 的引用。

图 3.4. Dev Workspace 配置属性示例

DevWorkspace config 属性示例

DevWorkspaceRouting

DevWorkspaceRouting 自定义资源定义 Dev Workspace 的端点的详情。每个 Dev Workspace 都有对应的 DevWorkspaceRouting 对象,用于指定工作区的容器端点。从 devfile 定义的端点以及编辑器定义的端点将出现在 DevWorkspaceRouting 自定义资源中。

apiVersion: controller.devfile.io/v1alpha1
kind: DevWorkspaceRouting
metadata:
  annotations:
    controller.devfile.io/devworkspace-started: 'false'
  name: routing-workspaceb14aa33254674065
  labels:
    controller.devfile.io/devworkspace_id: workspaceb14aa33254674065
spec:
  devworkspaceId: workspaceb14aa33254674065
  endpoints:
    universal-developer-image:
      - attributes:
          cookiesAuthEnabled: true
          discoverable: false
          type: main
          urlRewriteSupported: true
        exposure: public
        name: che-code
        protocol: https
        secure: true
        targetPort: 3100
  podSelector:
    controller.devfile.io/devworkspace_id: workspaceb14aa33254674065
  routingClass: che
status:
  exposedEndpoints:
    ...
3.3.1.2.1. dev Workspace Operator 的操作对象

Dev Workspace Operator 有两个操作对象:

  • 控制器部署
  • Webhook 部署。
$ oc get pods -l 'app.kubernetes.io/part-of=devworkspace-operator' -o custom-columns=NAME:.metadata.name -n openshift-operators
NAME
devworkspace-controller-manager-66c6f674f5-l7rhj 
1

devworkspace-webhook-server-d4958d9cd-gh7vr 
2

devworkspace-webhook-server-d4958d9cd-rfvj6 
3
1
Dev Workspace 控制器 pod,它负责协调自定义资源
2 3
Dev Workspace operator webhook 服务器 pod

配置 Dev Workspace-controller-manager 部署

您可以在 Dev Workspace Operator Subscription 对象中配置 devworkspace-controller-manager pod:

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: devworkspace-operator
  namespace: openshift-operators
spec:
  config:
    affinity:
      nodeAffinity: ...
      podAffinity: ...
    resources:
      limits:
        memory: ...
        cpu: ...
      requests:
        memory: ...
        cpu: ...

在本文档中了解更多有关配置的信息。https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/design/subscription-config.md

配置 Dev Workspace-webhook-server 部署

您可以在全局 DWOC 中配置 devworkspace-webhook-server 部署:

apiVersion: controller.devfile.io/v1alpha1
kind: DevWorkspaceOperatorConfig
metadata:
  name: devworkspace-operator-config
  namespace: <DWO install namespace>
config:
  webhooks:
    nodeSelector: <map[string]string>
    replicas: <int>
    tolerations: <[]corev1.Toleration>

3.3.1.3. 网关

其他资源

OpenShift Dev Spaces 网关有以下角色:

  • 路由请求.它使用 Traefik
  • 使用 OpenID Connect (OIDC)验证用户。它使用 OpenShift OAuth2 代理
  • 应用 OpenShift 基于角色的访问控制(RBAC)策略来控制对任何 OpenShift Dev Spaces 资源的访问。它使用 'kube-rbac-proxy'

OpenShift Dev Spaces operator 将其作为 che-gateway 部署进行管理。

它控制对以下的访问:

图 3.5. OpenShift Dev Spaces 网关与其他组件交互

OpenShift Dev Spaces 网关与其他组件交互

3.3.1.4. 用户仪表板

用户仪表板是 Red Hat OpenShift Dev Spaces 的登录页面。OpenShift Dev Spaces 用户浏览用户仪表板以访问和管理其工作区。这是一个 React 应用程序。OpenShift Dev Spaces 部署在 devspaces-dashboard Deployment 中启动。

它需要访问:

图 3.6. 用户仪表板与其他组件的交互

用户仪表板与其他组件的交互

当用户请求用户仪表板启动工作区时,用户仪表板会执行这个操作序列:

  1. 将存储库 URL 发送到 第 3.3.1.5 节 “dev Spaces server”,并在用户从远程 devfile 创建工作区时返回 devfile。
  2. 读取描述工作区的 devfile。
  3. 第 3.3.1.6 节 “插件 registry” 收集其他元数据。
  4. 将信息转换为 Dev Workspace 自定义资源。
  5. 使用 OpenShift API 在用户项目中创建 Dev Workspace 自定义资源。
  6. 监视 Dev Workspace 自定义资源状态。
  7. 将用户重定向到正在运行的工作区 IDE。

3.3.1.5. dev Spaces server

其他资源

OpenShift Dev Spaces 服务器主要功能有:

  • 创建用户命名空间。
  • 使用所需的 secret 和配置映射置备用户命名空间。
  • 与 Git 服务供应商集成,以获取和验证 devfile 和身份验证。

OpenShift Dev Spaces 服务器是一个 Java Web 服务,公开 HTTP REST API 并需要访问:

  • Git 服务供应商
  • OpenShift API

图 3.7. OpenShift Dev Spaces 服务器与其他组件交互

OpenShift Dev Spaces 服务器与其他组件交互

3.3.1.6. 插件 registry

每个 OpenShift Dev Spaces 工作区都以特定的编辑器和一组关联的扩展开始。OpenShift Dev Spaces 插件 registry 提供了可用编辑器和编辑器扩展列表。Devfile v2 描述了每个编辑器或扩展。

第 3.3.1.4 节 “用户仪表板” 读取 registry 的内容。

图 3.8. 插件 registry 与其他组件交互

插件 registry 与其他组件交互

3.3.2. 用户工作区

图 3.9. 用户工作区与其他组件交互

用户工作区与其他组件交互

用户工作区是在容器中运行的 Web IDE。

用户工作区是一个 Web 应用程序。它由容器中运行的微服务组成,提供在浏览器中运行的现代 IDE 的所有服务:

  • Editor
  • 语言自动完成
  • 语言服务器
  • 调试工具
  • 插件
  • 应用程序运行时

工作区是一个 OpenShift Deployment,其中包含工作区容器和启用的插件,以及相关的 OpenShift 组件:

  • 容器
  • ConfigMaps
  • 服务
  • Endpoints
  • ingresses 或 Routes
  • Secrets
  • 持久性卷(PV)

OpenShift Dev Spaces 工作区包含项目的源代码,保留在 OpenShift 持久性卷(PV)中。微服务对该共享目录具有读/写访问权限。

使用 devfile v2 格式指定 OpenShift Dev Spaces 工作区的工具和运行时应用程序。

下图显示了一个运行 OpenShift Dev Spaces 工作区及其组件。

图 3.10. OpenShift Dev Spaces 工作区组件

工作区组件

在图中,有一个正在运行的工作区。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部