$ oc set volume <object_selection> <operation> <mandatory_parameters> <options>
容器中的文件是短暂的。因此,当容器崩溃或停止时,数据将会丢失。您可以使用卷来持久化Pod中容器使用的数据。卷是一个目录,Pod中的容器可以访问它,数据存储在Pod的整个生命周期中。
卷是可供Pod及其容器使用的已挂载文件系统,这些文件系统可能由许多主机本地或网络附加存储端点支持。默认情况下,容器不是持久性的;重启后,其内容将被清除。
为了确保卷上的文件系统不包含错误,如果存在错误,则尽可能修复它们,OpenShift Container Platform会在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 来添加卷 添加了卷和密钥的示例复制控制器
|
将现有的持久卷 **v1**(声明名称为 **pvc1**)添加到磁盘上的部署配置 **_dc.json_**,将卷挂载到容器 **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
属性在卷内指定subPath
值(而不是卷的根目录),从而配置一个卷在单个 Pod 中用于多个用途。
您不能向已调度的 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 文件夹中。 |