文档首页 > > 用户指南> 存储管理> 使用本地磁盘存储

使用本地磁盘存储

分享
更新时间: 2020/07/14 GMT+08:00

通过本地磁盘存储将容器所在宿主机的文件目录挂载到容器的指定路径中,也可以不填写源路径。

本地磁盘使用场景

使用本地硬盘有四种形式:

  • 主机路径挂载:将容器所在宿主机的文件目录挂载到容器指定的挂载点中,如容器需要访问/etc/hosts则可以使用HostPath映射/etc/hosts等场景。
  • 临时路径挂载:用于临时存储,生命周期与容器实例相同。容器实例消亡时,EmptyDir会被删除,数据会永久丢失。
  • 配置项挂载:将ConfigMap配置项中的key映射到容器中,可以用于挂载配置文件到指定容器目录。ConfigMap的创建请参见创建配置项,具体使用请参见使用配置项
  • 密钥挂载将密钥中的数据挂载到容器的某一路径中。密钥是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。Secret的创建请参见创建密钥,具体使用请参见使用密钥

下面分别介绍如何通过这四种形式进行挂载。

主机路径(HostPath)挂载

主机路径(HostPath)挂载表示将主机上的路径挂载到指定的容器路径。通常用于:“容器工作负载程序生成的日志文件需要永久保存”或者“需要访问宿主机上Docker引擎内部数据结构的容器工作负载”

  1. 参照创建无状态负载(Deployment)创建有状态负载(StatefulSet)创建守护进程集(DaemonSet),在“容器设置”步骤中,展开“数据存储”,单击“添加本地磁盘”
  2. 设置添加本地磁盘参数,如表1

    表1 卷类型选择主机路径挂载

    参数

    参数说明

    存储类型

    主机路径(HostPath)。

    主机路径

    输入主机路径,如/etc/hosts。

    添加容器挂载

    配置如下参数:

    1. 子路径:请输入子路径,如:tmp。

      使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。

    2. 挂载路径:请输入挂载路径,如:/tmp。
      数据存储挂载到容器上的路径。请不要挂载在系统目录下,如“ /”、“ /var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。
      须知:

      挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。

    3. 权限:
      • 只读:只能读容器路径中的数据卷。
      • 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。

    单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。

临时路径(EmptyDir)挂载

临时路径(EmptyDir)挂载适用于临时存储、灾难恢复、共享运行时数据等场景,工作负载实例的删除或者迁移会导致临时路径被删除。

  1. 参照创建无状态负载(Deployment)创建有状态负载(StatefulSet)创建守护进程集(DaemonSet),在添加容器后,展开“数据存储”,单击“添加本地磁盘”
  2. 选择本地磁盘类型为“临时路径挂载”,设置添加本地磁盘参数,如表2

    表2 卷类型选择临时路径挂载

    参数

    参数说明

    存储类型

    临时路径(EmptyDir)。

    磁盘介质

    • 若勾选“内存”,可以提高运行速度,但存储容量受内存大小限制。适用于数据量少,读写效率要求高的场景。
      说明:
      • Memory的EmptyDir使用的是内存,注意内存大小,用超过了容易oom。
      • Memory的EmptyDir的大小为实例规格的50%,暂时无法更改。
      • 不使用Memory的EmptyDir不会占用系统内存。
    • 若不勾选“内存”,即存储在硬盘上,适用于数据量大,读写效率要求低的场景。

    添加容器挂载

    配置如下参数:

    1. 子路径:请输入子路径,如:tmp。

      使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。

    2. 挂载路径:请输入挂载路径,如:/tmp。
      数据存储挂载到容器上的路径。请不要挂载在系统目录下,如“ /”、“ /var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。
      须知:

      挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。

    3. 权限:
      • 只读:只能读容器路径中的数据卷。
      • 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。

    单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。

配置项(ConfigMap)挂载

配置项(ConfigMap)挂载是将配置项中的数据挂载到指定的容器路径。平台提供工作负载代码和配置文件的分离,“配置项挂载”用于处理工作负载配置参数。用户需要提前创建工作负载配置,操作步骤请参见创建配置项

  1. 参照创建无状态负载(Deployment)创建有状态负载(StatefulSet)创建守护进程集(DaemonSet),在添加容器后,展开“数据存储”,单击“添加本地磁盘”
  2. 选择本地磁盘类型为“配置项挂载”,设置添加本地磁盘参数,如表3

    表3 卷类型选择配置项挂载

    参数

    参数说明

    存储类型

    配置项(ConfigMap)。

    配置项

    选择对应的配置项名称。

    配置项需要提前创建,具体请参见创建配置项

    添加容器挂载

    配置如下参数:

    1. 子路径:请输入子路径,如:tmp。

      使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。

    2. 挂载路径:请输入挂载路径,如:/tmp。
      数据存储挂载到容器上的路径。请不要挂载在系统目录下,如“ /”、“ /var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。
      须知:

      挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。

    3. 设置权限:只读。只能读容器路径中的数据卷。

    单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。

密钥(Secret)挂载

密钥(Secret)挂载将密钥中的数据挂载到指定的容器路径,密钥内容由用户决定。用户需要提前创建密钥,操作步骤请参见创建密钥

  1. 参照创建无状态负载(Deployment)创建有状态负载(StatefulSet)创建守护进程集(DaemonSet),在添加容器后,展开“数据存储”,单击“添加本地磁盘”
  2. 选择本地磁盘类型为“密钥挂载”,设置添加本地磁盘参数,如表4

    表4 卷类型选择密钥挂载

    参数

    参数说明

    存储类型

    密钥(Secret)。

    密钥

    选择对应的密钥名称。

    密钥需要提前创建,具体请参见创建密钥

    添加容器挂载

    配置如下参数:

    1. 子路径:请输入子路径,如:tmp。

      使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume。不填写时默认为根。

    2. 挂载路径:请输入挂载路径,如:/tmp。
      数据存储挂载到容器上的路径。请不要挂载在系统目录下,如“ /”、“ /var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。
      须知:

      挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。

    3. 设置权限:只读。只能读容器路径中的数据卷。

    单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。

使用kubectl挂载主机路径

CCE支持使用kubectl将容器所在宿主机的文件目录挂载到容器指定的挂载点中。

  1. 请参见通过kubectl或web-terminal插件连接CCE集群配置kubectl命令。
  2. 执行如下命令,配置名为“hostPath-pod-example.yaml”的创建Pod的yaml文件。

    touch hostPath-pod-example.yaml

    vi hostPath-pod-example.yaml

    在无状态工作负载中挂载主机路径,示例如下:

    apiVersion: extensions/v1beta1 
    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 
          restartPolicy: Always 
          volumes: 
          - name: hostpath-example 
            hostPath: 
              path: /tmp

    其中:

    • name:创建的Pod名称。
    • app:Pod工作负载名称。
    • mountPath:容器内挂载路径,示例中挂载到“/tmp”路径。
    • hostPath:主机路径,示例中主机路径为“/tmp”。
    • “spec.template.spec.containers.volumeMounts.name ”和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。

  3. 执行如下命令创建Pod。

    kubectl create -f hostPath-pod-example.yaml

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问