本地磁盘存储
通过本地磁盘存储将容器所在宿主机的文件目录挂载到容器的指定路径中(对应Kubernetes的HostPath),也可以将宿主机的临时目录(对应Kubernetes的EmptyDir)挂载到容器的的指定路径。另外还可以将Kubernetes中定义的ConfigMap和Secret挂载到容器的指定路径下。
本地磁盘使用场景
您可以通过如下四种形式使用本地磁盘存储:
- 主机路径挂载:将容器所在宿主机的文件目录挂载到容器指定的挂载点中,如容器需要访问/etc/hosts则可以使用HostPath映射/etc/hosts等场景。
- 临时路径挂载:用于临时存储,生命周期与容器实例相同。容器实例消亡时,EmptyDir会被删除,数据会永久丢失。
- 配置项挂载:将ConfigMap配置项中的key映射到容器中,可以用于挂载配置文件到指定容器目录。配置项(ConfigMap)是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。ConfigMap的创建请参见创建配置项,具体使用请参见使用配置项。
- 密钥挂载:将密钥中的数据挂载到容器的某一路径中。密钥是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。Secret的创建请参见创建密钥,具体使用请参见使用密钥。
下面分别介绍如何通过这四种形式进行挂载。
主机路径(HostPath)挂载
主机路径(HostPath)挂载表示将主机上的路径挂载到指定的容器路径。通常用于:“容器工作负载程序生成的日志文件需要永久保存”或者“需要访问宿主机上Docker引擎内部数据结构的容器工作负载”。
- 参照创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet),在“容器设置”步骤中,展开“数据存储”,单击“添加本地磁盘”。
- 设置添加本地磁盘参数,如表1。
表1 卷类型选择主机路径挂载 参数
参数说明
存储类型
主机路径(HostPath)。
主机路径
输入主机路径,如/etc/hosts。
说明:请注意“主机路径”不能设置为根目录“/”,否则将导致挂载失败。挂载路径一般设置为:
- /opt/xxxx(但不能为/opt/cloud)
- /mnt/xxxx(但不能为/mnt/paas)
- /tmp/xxx
- /var/xxx (但不能为/var/lib、/var/script、/var/paas等关键目录)
- /xxxx(但不能和系统目录冲突,例如bin、lib、home、root、boot、dev、etc、lost+found、mnt、proc、sbin、srv、tmp、var、media、opt、selinux、sys、usr等)
注意不能设置为/home/paas、/var/paas、/var/lib、/var/script、/mnt/paas、/opt/cloud,否则会导致系统或节点安装失败。
添加容器挂载
配置如下参数:
- 子路径:请输入子路径,如:tmp。
- 挂载路径:请输入挂载路径,如:/tmp。
- 权限:
- 只读:只能读容器路径中的数据卷。
- 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。
单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。
- 参照创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet),在添加容器后,展开“数据存储”,单击“添加本地磁盘”。
- 选择本地磁盘类型为“临时路径挂载”,设置添加本地磁盘参数,如表2。
表2 卷类型选择临时路径挂载 参数
参数说明
存储类型
临时路径(EmptyDir)。
磁盘介质
- 若勾选“内存”,可以提高运行速度,但存储容量受内存大小限制。适用于数据量少,读写效率要求高的场景。说明:
- Memory的EmptyDir使用的是内存,注意内存大小,用超过了容易oom。
- Memory的EmptyDir的大小为实例规格的50%,暂时无法更改。
- 不使用Memory的EmptyDir不会占用系统内存。
- 若不勾选“内存”,即存储在硬盘上,适用于数据量大,读写效率要求低的场景。
添加容器挂载
配置如下参数:
- 子路径:请输入子路径,如:tmp。
- 挂载路径:请输入挂载路径,如:/tmp。
- 权限:
- 只读:只能读容器路径中的数据卷。
- 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。
单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。
- 若勾选“内存”,可以提高运行速度,但存储容量受内存大小限制。适用于数据量少,读写效率要求高的场景。
配置项(ConfigMap)挂载
配置项(ConfigMap)挂载是将配置项中的数据挂载到指定的容器路径。平台提供工作负载代码和配置文件的分离,“配置项挂载”用于处理工作负载配置参数。用户需要提前创建工作负载配置,操作步骤请参见创建配置项。
- 参照创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet),在添加容器后,展开“数据存储”,单击“添加本地磁盘”。
- 选择本地磁盘类型为“配置项挂载”,设置添加本地磁盘参数,如表3。
表3 卷类型选择配置项挂载 参数
参数说明
存储类型
配置项(ConfigMap)。
配置项
选择对应的配置项名称。
配置项需要提前创建,具体请参见创建配置项。
添加容器挂载
配置如下参数:
- 子路径:请输入子路径,如:tmp。
- 挂载路径:请输入挂载路径,如:/tmp。
- 设置权限:只读。只能读容器路径中的数据卷。
单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。
- 参照创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet),在添加容器后,展开“数据存储”,单击“添加本地磁盘”。
- 选择本地磁盘类型为“密钥挂载”,设置添加本地磁盘参数,如表4。
表4 卷类型选择密钥挂载 参数
参数说明
存储类型
密钥(Secret)。
密钥
选择对应的密钥名称。
密钥需要提前创建,具体请参见创建密钥。
添加容器挂载
配置如下参数:
- 子路径:请输入子路径,如:tmp。
- 挂载路径:请输入挂载路径,如:/tmp。
- 设置权限:只读。只能读容器路径中的数据卷。
单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。
使用kubectl挂载主机路径
CCE支持使用kubectl将容器所在宿主机的文件目录挂载到容器指定的挂载点中。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 执行如下命令,配置名为“hostPath-pod-example.yaml”的创建Pod的yaml文件。
touch hostPath-pod-example.yaml
vi hostPath-pod-example.yaml
在无状态工作负载中挂载主机路径,示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: hostpath-pod-example namespace: default spec: replicas: 1 selector: matchLabels: app: hostpath-pod-example template: metadata: labels: app: hostpath-pod-example spec: containers: - image: nginx name: container-0 volumeMounts: - mountPath: /tmp name: hostpath-example imagePullSecrets: - name: default-secret restartPolicy: Always volumes: - name: hostpath-example hostPath: path: /tmp/test
表5 本地磁盘储存依赖参数说明 参数
描述
mountPath
容器内挂载路径,示例中挂载到“/tmp”路径。
hostPath
主机路径,示例中主机路径为“/tmp/test”。
“spec.template.spec.containers.volumeMounts.name ”和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。
- 执行如下命令创建Pod。
kubectl create -f hostPath-pod-example.yaml
- 验证主机路径挂载
- 查询工作负载(以hostpath-pod-example为例)的实例名称
kubectl get po|grep hostpath-pod-example
期望输出:
hostpath-pod-example-55c8d4dc59-md5d9 1/1 Running 0 35s
- 在容器挂载路径/tmp下创建文件test1
kubectl exec hostpath-pod-example-55c8d4dc59-md5d9 -- touch /tmp/test1
- 在主机路径/tmp/test/上可以见到该文件被创建
ll /tmp/test/
预期输出:
-rw-r--r-- 1 root root 0 Jun 1 16:12 test1
- 在主机挂载路径/tmp/test/上创建文件test2
touch /tmp/test/test2
- 在容器挂载路径内可以见到该文件被新建
kubectl exec hostpath-pod-example-55c8d4dc59-md5d9 -- ls -l /tmp
预期输出:
-rw-r--r-- 1 root root 0 Jun 1 08:12 test1 -rw-r--r-- 1 root root 0 Jun 1 08:14 test2
- 查询工作负载(以hostpath-pod-example为例)的实例名称
