第 8 章 与 OpenShift 集成
8.1. 使用 OpenShift API 管理工作区
在机构的 OpenShift 集群中,OpenShift Dev Spaces 工作区表示为相同名称的 DevWorkspace
自定义资源。因此,如果在 OpenShift Dev Spaces 仪表板中有一个名为 my-workspace
的工作区,在集群的用户项目中有一个名为 my-workspace
的 DevWorkspace
自定义资源。
由于集群中的每个 DevWorkspace
自定义资源都代表 OpenShift Dev Spaces 工作区,因此您可以使用带有命令行 oc
等客户端的 OpenShift API 来管理 OpenShift Dev Spaces 工作区。
每个 DevWorkspace
自定义资源都包含从为工作区克隆的 Git 存储库的 devfile 中派生的详细信息。例如,devfile 可能会提供 devfile 命令和工作空间容器配置。
8.1.1. 列出所有工作区
作为用户,您可以使用命令行列出工作区。
先决条件
-
一个活跃的
oc
会话,具有在集群中的项目中获取
DevWorkspace
资源的权限。请参阅开始使用 CLI。 您知道集群上的相关的 OpenShift Dev Spaces 用户命名空间。
提示访问
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
来获取您的 OpenShift Dev Spaces 用户命名空间作为name
。您位于集群的 OpenShift Dev Spaces 用户命名空间中。
提示在 OpenShift 上,您可以使用命令行
oc
工具 显示当前的命名空间,或切换到命名空间。
流程
要列出您的工作区,请在命令行中输入以下内容:
$ oc get devworkspaces
例 8.1. 输出
NAMESPACE NAME DEVWORKSPACE ID PHASE INFO user1-dev spring-petclinic workspace6d99e9ffb9784491 Running https://url-to-workspace.com user1-dev golang-example workspacedf64e4a492cd4701 Stopped Stopped user1-dev python-hello-world workspace69c26884bbc141f2 Failed Container tooling has state CrashLoopBackOff
您可以通过在此命令中添加 --watch
标志来查看 PHASE 更改。
集群上具有管理权限的用户可以通过包含 --all-namespaces
标志列出所有来自所有 OpenShift Dev Spaces 用户的所有工作区。
8.1.2. 创建工作区
如果您的用例不允许使用 OpenShift Dev Spaces 仪表板,您可以通过将自定义资源应用到集群来使用 OpenShift API 创建工作区。
与使用命令行相比,通过 OpenShift Dev Spaces 仪表板创建工作区提供更好的用户体验和配置优势:
- 作为用户,您会自动登录到集群。
- OpenShift 客户端会自动工作。
-
OpenShift Dev Spaces 及其组件会自动将目标 Git 存储库的 devfile 转换为集群中的
DevWorkspace
和DevWorkspaceTemplate
自定义资源。 -
默认情况下,使用工作区的
DevWorkspace
中的routingClass: che
对工作区的访问是安全的。 -
DevWorkspaceOperatorConfig
配置的真实性由 OpenShift Dev Spaces 管理。 在
CheCluster
自定义资源中指定的spec.devEnvironments
中配置,包括:-
持久性存储策略通过
devEnvironments.storage
指定。 -
默认 IDE 使用
devEnvironments.defaultEditor
指定。 -
默认插件通过
devEnvironments.defaultPlugins
指定。 -
容器构建配置通过
devEnvironments.containerBuildConfiguration
指定。
-
持久性存储策略通过
先决条件
-
一个活跃的
oc
会话,它有权在集群中创建DevWorkspace
资源。请参阅开始使用 CLI。 您知道集群上的相关的 OpenShift Dev Spaces 用户命名空间。
提示访问
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
来获取您的 OpenShift Dev Spaces 用户命名空间作为name
。您位于集群的 OpenShift Dev Spaces 用户命名空间中。
提示在 OpenShift 上,您可以使用命令行
oc
工具 显示当前的命名空间,或切换到命名空间。注意为其他用户创建工作区的 OpenShift Dev Spaces 管理员必须在由 OpenShift Dev Spaces 或管理员置备的用户命名空间中创建
DevWorkspace
自定义资源。请参阅 https://access.redhat.com/documentation/zh-cn/red_hat_openshift_dev_spaces/3.6/html-single/administration_guide/index#administration-guide:configuring-namespace-provisioning。
流程
要准备
DevWorkspace
自定义资源,请复制目标 Git 存储库的 devfile 的内容。例 8.2. 使用
schemaVersion: 2.2.0
复制 devfile 内容components: - name: tooling-container container: image: quay.io/devfile/universal-developer-image:ubi8-latest
提示如需了解更多详细信息,请参阅 devfile v2 文档。
创建
DevWorkspace
自定义资源,在spec.template
字段下粘贴上一步中的 devfile 内容。例 8.3.
DevWorkspace
自定义资源kind: DevWorkspace apiVersion: workspace.devfile.io/v1alpha2 metadata: name: my-devworkspace1 namespace: user1-dev2 spec: routingClass: che started: true3 contributions:4 - name: ide uri: "https://devspaces-<openshift_deployment_name>.<domain_name>"/plugin-registry/v3/plugins/che-incubator/che-code/latest/devfile.yaml template: projects:5 - name: my-project-name git: remotes: origin: https://github.com/eclipse-che/che-docs components:6 - name: tooling-container container: image: quay.io/devfile/universal-developer-image:ubi8-latest
-
将
DevWorkspace
自定义资源应用到集群。
验证
通过检查
DevWorkspace
的 PHASE 状态来验证工作区是否已启动。$ oc get devworkspaces -n <user_project> --watch
例 8.4. 输出
NAMESPACE NAME DEVWORKSPACE ID PHASE INFO user1-dev my-devworkspace workspacedf64e4a492cd4701 Starting Waiting for workspace deployment
当工作区成功启动时,其 PHASE 状态会在
oc get devworkspaces
命令的输出中变为 Running。例 8.5. 输出
NAMESPACE NAME DEVWORKSPACE ID PHASE INFO user1-dev my-devworkspace workspacedf64e4a492cd4701 Running https://url-to-workspace.com
然后,您可以使用以下选项之一打开工作区:
-
访问
oc get devworkspaces
命令的输出的 INFO 部分中提供的 URL。 - 从 OpenShift Dev Spaces 仪表板中打开工作区。
-
访问
8.1.3. 停止工作区
您可以通过将 Devworkspace
自定义资源中的 spec.started
字段设置为 false
来停止工作区。
先决条件
-
集群中的一个活跃的
oc
会话。请参阅开始使用 CLI。 您知道工作区名称。
提示您可以在
$ oc get devworkspaces
的输出中找到相关的工作区名称。您知道集群上的相关的 OpenShift Dev Spaces 用户命名空间。
提示访问
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
来获取您的 OpenShift Dev Spaces 用户命名空间作为name
。您位于集群的 OpenShift Dev Spaces 用户命名空间中。
提示在 OpenShift 上,您可以使用命令行
oc
工具 显示当前的命名空间,或切换到命名空间。
流程
运行以下命令来停止工作区:
$ oc patch devworkspace <workspace_name> \ -p '{"spec":{"started":false}}' \ --type=merge -n <user_namespace> && \ oc wait --for=jsonpath='{.status.phase}'=Stopped \ dw/<workspace_name> -n <user_namespace>
8.1.4. 启动停止的工作区
您可以通过将 Devworkspace
自定义资源中的 spec.started
字段设置为 true
来启动已停止的工作空间。
先决条件
-
集群中的一个活跃的
oc
会话。请参阅开始使用 CLI。 您知道工作区名称。
提示您可以在
$ oc get devworkspaces
的输出中找到相关的工作区名称。您知道集群上的相关的 OpenShift Dev Spaces 用户命名空间。
提示访问
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
来获取您的 OpenShift Dev Spaces 用户命名空间作为name
。您位于集群的 OpenShift Dev Spaces 用户命名空间中。
提示在 OpenShift 上,您可以使用命令行
oc
工具 显示当前的命名空间,或切换到命名空间。
流程
运行以下命令以启动已停止的工作空间:
$ oc patch devworkspace <workspace_name> \ -p '{"spec":{"started":true}}' \ --type=merge -n <user_namespace> && \ oc wait --for=jsonpath='{.status.phase}'=Running \ dw/<workspace_name> -n <user_namespace>
8.1.5. 删除工作区
您可以通过删除 DevWorkspace
自定义资源来删除工作区。
如果 DevWorkspace
自定义资源由 OpenShift Dev Spaces 创建,则删除它们也会删除其他工作区资源:例如,引用的 DevWorkspaceTemplate
和 per-workspace PersistentVolumeClaims
。
尽可能使用 OpenShift Dev Spaces 仪表板删除工作区。
先决条件
-
集群中的一个活跃的
oc
会话。请参阅开始使用 CLI。 您知道工作区名称。
提示您可以在
$ oc get devworkspaces
的输出中找到相关的工作区名称。您知道集群上的相关的 OpenShift Dev Spaces 用户命名空间。
提示访问
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
来获取您的 OpenShift Dev Spaces 用户命名空间作为name
。您位于集群的 OpenShift Dev Spaces 用户命名空间中。
提示在 OpenShift 上,您可以使用命令行
oc
工具 显示当前的命名空间,或切换到命名空间。
流程
运行以下命令以删除工作区:
$ oc delete devworkspace <workspace_name> -n <user_namespace>