$ oc set volume <object_selection> <operation> <mandatory_parameters> <options>
容器中的文件是短暂的。因此,当容器崩溃或停止时,数据会丢失。您可以使用卷来持久化 Pod 中容器使用的数据。卷是一个目录,Pod 中的容器可以访问该目录,数据在此目录中存储在 Pod 的生命周期内。
卷是可用于 Pod 及其容器的已挂载文件系统,这些文件系统可能由许多主机本地或网络附加存储端点支持。默认情况下,容器不是持久性的;重启时,其内容将被清除。
为了确保卷上的文件系统不包含错误,并且如果存在错误,则尽可能修复它们,OpenShift Dedicated 在mount
实用程序之前调用fsck
实用程序。这发生在添加卷或更新现有卷时。
最简单的卷类型是emptyDir
,它是在单个机器上的临时目录。管理员还可以允许您请求自动附加到您的 Pod 的持久卷。
如果您的集群管理员启用了 FSGroup 参数,则 |
您可以使用 CLI 命令oc set volume
添加和删除任何具有 Pod 模板的对象(如复制控制器或部署配置)的卷和卷挂载。您还可以列出 Pod 或任何具有 Pod 模板的对象中的卷。
oc set volume
命令使用以下通用语法
$ oc set volume <object_selection> <operation> <mandatory_parameters> <options>
在oc set volume
命令中为object_selection
参数指定以下其中一个
语法 | 描述 | 示例 |
---|---|---|
|
选择类型为 |
|
|
选择类型为 |
|
|
选择与给定标签选择器匹配的类型为 |
|
|
选择类型为 |
|
|
要用来编辑资源的文件名、目录或文件 URL。 |
|
在oc set volume
命令中为operation
参数指定--add
或--remove
。
任何必填参数都特定于所选操作,并在后面的章节中讨论。
任何选项都特定于所选操作,并在后面的章节中讨论。
您可以列出 Pod 或 Pod 模板中的卷和卷挂载
要列出卷
$ oc set volume <object_type>/<name> [options]
列出卷支持的选项
选项 | 描述 | 默认值 |
---|---|---|
|
卷的名称。 |
|
|
按名称选择容器。它也可以使用通配符 |
|
例如
列出 Pod **p1** 的所有卷
$ oc set volume pod/p1
列出在所有部署配置中定义的卷v1
$ oc set volume dc --all --name=v1
您可以向 Pod 添加卷和卷挂载。
向 Pod 模板添加卷、卷挂载或两者
$ oc set volume <object_type>/<name> --add [options]
选项 | 描述 | 默认值 |
---|---|---|
|
卷的名称。 |
如果未指定,则自动生成。 |
|
卷源的名称。支持的值: |
|
|
按名称选择容器。它也可以使用通配符 |
|
|
选定容器内的挂载路径。请勿挂载到容器根目录 ( |
|
|
主机路径。 |
|
|
密钥的名称。 |
|
|
configmap 的名称。 |
|
|
持久卷声明的名称。 |
|
|
作为 JSON 字符串的卷源详细信息。如果 |
|
|
显示修改后的对象,而不是在服务器上更新它们。支持的值: |
|
|
使用给定版本输出修改后的对象。 |
|
例如
向registry DeploymentConfig
对象添加新的卷源emptyDir
$ oc set volume dc/registry --add
您也可以应用以下 YAML 来添加卷 添加了卷的示例部署配置
|
为复制控制器r1添加具有密钥secret1的卷v1,并在容器内的/data处挂载
$ oc set volume rc/r1 --add --name=v1 --type=secret --secret-name='secret1' --mount-path=/data
您也可以应用以下 YAML 来添加卷 添加了卷和密钥的示例复制控制器
|
将磁盘上的部署配置dc.json中现有的持久卷v1(声明名称为pvc1)添加到,在容器c1的/data处挂载卷,并在服务器上更新DeploymentConfig
对象
$ oc set volume -f dc.json --add --name=v1 --type=persistentVolumeClaim \
--claim-name=pvc1 --mount-path=/data --containers=c1
您也可以应用以下 YAML 来添加卷 添加了持久卷的示例部署配置
|
为所有复制控制器添加基于 Git 仓库https://github.com/namespace1/project1(修订版为5125c45f9f563)的卷v1
$ oc set volume rc --all --add --name=v1 \
--source='{"gitRepo": {
"repository": "https://github.com/namespace1/project1",
"revision": "5125c45f9f563"
}}'
您可以修改 Pod 中的卷和卷挂载。
使用--overwrite
选项更新现有卷
$ oc set volume <object_type>/<name> --add --overwrite [options]
例如
将复制控制器r1的现有卷v1替换为现有的持久卷声明pvc1
$ oc set volume rc/r1 --add --overwrite --name=v1 --type=persistentVolumeClaim --claim-name=pvc1
您也可以应用以下 YAML 来替换卷 持久卷声明名为
|
1 | 将持久卷声明设置为pvc1 。 |
将DeploymentConfig
对象d1的卷v1挂载点更改为/opt
$ oc set volume dc/d1 --add --overwrite --name=v1 --mount-path=/opt
您也可以应用以下 YAML 来更改挂载点 挂载点设置为
|
1 | 将挂载点设置为/opt 。 |
您可以从 Pod 中移除卷或卷挂载。
从 Pod 模板中移除卷
$ oc set volume <object_type>/<name> --remove [options]
选项 | 描述 | 默认值 |
---|---|---|
|
卷的名称。 |
|
|
按名称选择容器。它也可以使用通配符 |
|
|
指示您要一次移除多个卷。 |
|
|
显示修改后的对象,而不是在服务器上更新它们。支持的值: |
|
|
使用给定版本输出修改后的对象。 |
|
例如
从DeploymentConfig
对象d1中移除卷v1
$ oc set volume dc/d1 --remove --name=v1
从DeploymentConfig
对象d1的容器c1卸载卷v1,如果d1上的任何容器都不引用卷v1,则将其移除
$ oc set volume dc/d1 --remove --name=v1 --containers=c1
移除复制控制器r1的所有卷
$ oc set volume rc/r1 --remove --confirm
您可以使用volumeMounts.subPath
属性在一个 Pod 中配置一个卷以供多次使用,指定卷内部的subPath
值而不是卷的根目录。
您不能向已调度的 Pod 添加 |
要查看卷中的文件列表,请运行oc rsh
命令
$ oc rsh <pod>
sh-4.2$ ls /path/to/volume/subpath/mount
example_file1 example_file2 example_file3
指定subPath
subPath
参数的示例Pod
规范apiVersion: v1
kind: Pod
metadata:
name: my-site
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: mysql
image: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: site-data
subPath: mysql (1)
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ALL]
- name: php
image: php
volumeMounts:
- mountPath: /var/www/html
name: site-data
subPath: html (2)
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: [ALL]
volumes:
- name: site-data
persistentVolumeClaim:
claimName: my-site-data
1 | 数据库存储在mysql 文件夹中。 |
2 | HTML 内容存储在html 文件夹中。 |