4.9. 配置存储
OpenShift Dev Spaces 不支持网络文件系统(NFS)协议。
4.9.1. 配置存储类
要将 OpenShift Dev Spaces 配置为使用配置的基础架构存储,请使用存储类安装 OpenShift Dev Spaces。当您要绑定由非默认置备程序提供的持久性卷时,这特别有用。
OpenShift Dev Spaces 有一个组件,需要持久性卷来存储数据:
-
OpenShift Dev Spaces 工作区。OpenShift Dev Spaces 工作区使用卷存储源代码,如
/projects
卷。
只有工作区不是临时的时,OpenShift Dev Spaces 工作区源代码才会存储在持久性卷中。
持久性卷声明事实:
- OpenShift Dev Spaces 不会在基础架构中创建持久性卷。
- OpenShift Dev Spaces 使用持久性卷声明(PVC)来挂载持久性卷。
第 2.3.1.2 节 “dev Workspace operator” 创建持久性卷声明。
在 OpenShift Dev Spaces 配置中定义存储类名称,以使用 OpenShift Dev Spaces PVC 中的存储类功能。
流程
使用 CheCluster 自定义资源定义来定义存储类:
定义存储类名称 :配置
CheCluster
自定义资源,并安装 OpenShift Dev Spaces。请参阅 第 4.1.1 节 “在安装过程中使用 dsc 配置CheCluster
自定义资源”。spec: devEnvironments: storage: perUserStrategyPvcConfig: claimSize: <claim_size> storageClass: <storage_class_name> perWorkspaceStrategyPvcConfig: claimSize: <claim_size> storageClass: <storage_class_name> pvcStrategy: <pvc_strategy>
spec: devEnvironments: storage: perUserStrategyPvcConfig: claimSize: <claim_size>
1 storageClass: <storage_class_name>
2 perWorkspaceStrategyPvcConfig: claimSize: <claim_size>
3 storageClass: <storage_class_name>
4 pvcStrategy: <pvc_strategy>
5 Copy to Clipboard Copied!
4.9.2. 配置存储策略
通过选择存储策略,可以将 OpenShift Dev Spaces 配置为向工作区提供持久性或非持久性存储。默认情况下,所选存储策略将应用到所有新创建的工作区。用户可以为 devfile 中的工作区选择非默认存储策略,或者通过 URL 参数 选择。
可用的存储策略:
-
每个用户
:对用户创建的所有工作区使用单个 PVC。 -
per-workspace
: 每个工作区都会被赋予自己的 PVC。 -
Ephemeral
: Non-persistent storage; 当工作区停止后,任何本地更改都会丢失。
OpenShift Dev Spaces 中使用的默认存储策略是 每个用户
。
流程
-
将 Che Cluster Custom Resource 中的
pvcStrategy
字段设置为per-user
、per-workspace
或ephemeral
。
-
您可以在安装时设置此字段。请参阅 第 4.1.1 节 “在安装过程中使用 dsc 配置
CheCluster
自定义资源”。 - 您可以在命令行中更新此字段。请参阅 第 4.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”。
spec: devEnvironments: storage: pvc: pvcStrategy: 'per-user'
spec:
devEnvironments:
storage:
pvc:
pvcStrategy: 'per-user'
- 1
- 可用的存储策略是
按用户、每个
工作区临时的
。
4.9.3. 配置存储大小
您可以使用 per-user
或 per-workspace
存储策略配置持久性卷声明(PVC)大小。您必须使用 CheCluster
自定义资源的 PVC 大小,格式为 Kubernetes 资源数量。有关可用存储策略的详情,请查看 此页面。
默认持久性卷声明大小:
per-user: 10Gi
per-user: 10Gi
Copy to Clipboard Copied! per-workspace: 5Gi
per-workspace: 5Gi
Copy to Clipboard Copied!
流程
-
在 Che Cluster Custom Resource 中为所需的存储策略设置适当的
claimSize
字段。
-
您可以在安装时设置此字段。请参阅 第 4.1.1 节 “在安装过程中使用 dsc 配置
CheCluster
自定义资源”。 - 您可以在命令行中更新此字段。请参阅 第 4.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”。
spec: devEnvironments: storage: pvc: pvcStrategy: '<strategy_name>' perUserStrategyPvcConfig: claimSize: <resource_quantity> perWorkspaceStrategyPvcConfig: claimSize: <resource_quantity>
spec:
devEnvironments:
storage:
pvc:
pvcStrategy: '<strategy_name>'
perUserStrategyPvcConfig:
claimSize: <resource_quantity>
perWorkspaceStrategyPvcConfig:
claimSize: <resource_quantity>
4.9.4. 持久用户主页
Red Hat OpenShift Dev Spaces 提供了一个永久的主目录功能,允许每个非临时工作区在工作空间重启后保留其 /home/user
目录。您可以通过将 spec.devEnvironments.persistUserHome.enabled
设置为 true
,在 CheCluster 中启用此功能。
对于新启动的工作区,此功能会创建一个挂载到工具容器的 /home/user
路径的 PVC。在本文档中,将使用"tools 容器"来指代 devfile 中的第一个容器。此容器是默认包含项目源代码的容器。
当首次挂载 PVC 时,持久性卷的内容为空,因此必须使用 /home/user
目录内容填充。
默认情况下,persistent UserHome
功能为每个名为 init-persistent-home
的新工作区 pod 创建一个 init 容器。此 init 容器使用工具容器镜像创建,并负责运行 stow
命令在持久性卷中创建符号链接以填充 /home/user
目录。
对于不能符号链接到 /home/user
目录的文件,如 .viminfo
和 .bashrc
文件,则会使用 cp
而不是 stow
。
stow
命令的主要功能是运行:
stow -t /home/user/ -d /home/tooling/ --no-folding
stow -t /home/user/ -d /home/tooling/ --no-folding
以上命令在 /home/user
中为位于 /home/tooling
的文件和目录创建符号链接。这会使用指向 /home/tool
中内容的符号链接填充持久卷。因此,persistent UserHome
功能预期工具镜像在 /home/tooling
中包含其 /home/user/
内容。
例如,如果工具容器镜像包含 home/tooling
目录中的文件,如 .config
和 .config-folder/another-file
,则 stow 将以以下方式在持久性卷中创建符号链接:
图 4.11. 启用 persistUserHome
的工具容器

init 容器将 stow
命令的输出写入 /home/user/.stow.log
,并且仅在持久性卷第一次挂载到工作区时运行 stow
。
使用 stow
命令在持久性卷中填充 /home/user
内容有两个主要优点:
-
与在持久性卷中创建
/home/user
目录内容的副本相比,创建符号链接速度更快且消耗较少的存储。为了以不同方式放置它,本例中的持久卷包含符号链接,而不是实际文件本身。 -
如果使用现有二进制文件、配置和文件的较新版本更新工具镜像,则 init 容器不需要
研究
新版本,因为现有符号链接将链接到/home/tooling
中的较新版本。
如果工具镜像使用额外的二进制文件或文件更新,则不会以符号形式链接到 /home/user
目录,因为 stow
命令不会被再次运行。在这种情况下,用户必须删除 /home/user/.stow_completed
文件,然后重新启动工作区来重新运行 stow
。
persistUserHome
工具镜像要求
persistUserHome
依赖于用于工作区的工具镜像。默认情况下,OpenShift Dev Spaces 使用通用基础镜像(UDI)作为示例工作区,它支持 persistentUserHome
开箱即用。
如果您使用自定义镜像,应该满足三个要求来支持 persistUserHome
功能。
-
工具镜像应包含
stow
版本 >= 2.4.0。 -
$HOME
环境变量设置为/home/user
。 -
在工具镜像中,要包含
/home/user
内容的目录是/home/tooling
。
由于要求三个,例如,默认的 UDI 镜像将 /home/user
内容添加到 /home/tooling
中,并运行:
RUN stow -t /home/user/ -d /home/tooling/ --no-folding
RUN stow -t /home/user/ -d /home/tooling/ --no-folding
在 Dockerfile 中,使 /home/tooling
中的文件可以从 /home/user
访问,即使没有使用 persistUserHome
功能。