更新时间:2024-12-04 GMT+08:00

主机路径(HostPath)

主机路径(HostPath)可以将容器所在宿主机的文件目录挂载到容器指定的挂载点中,如容器需要访问/etc/hosts则可以使用HostPath映射/etc/hosts等场景。

  • HostPath卷存在许多安全风险,最佳做法是尽可能避免使用HostPath。 当必须使用HostPath卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。
  • 当挂载HostPath卷的Pod删除后,HostPath中的数据依然会保留。

通过控制台使用主机路径

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

  1. 登录CCE控制台。
  2. 在创建工作负载时,在“容器配置”中找到“数据存储”,选择“主机路径(HostPath)”
  3. 设置添加本地磁盘参数,如表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。

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

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

    子路径

    请输入存储卷的子路径,将存储卷中的某个路径挂载至容器,可以实现在单一Pod中使用同一个存储卷的不同文件夹。如:tmp,表示容器中挂载路径下的数据会存储在存储卷的tmp文件夹中。不填写时默认为根路径。

    权限

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

  4. 其余信息都配置完成后,单击“创建工作负载”

使用kubectl使用主机路径

  1. 使用kubectl连接集群。
  2. 创建并编辑nginx-hostpath.yaml文件。

    vi nginx-hostpath.yaml

    YAML文件内容如下,将节点上的/data目录挂载至容器中的/data目录下。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-hostpath
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-hostpath
      template:
        metadata:
          labels:
            app: nginx-hostpath
        spec:
          containers:
            - name: container-1
              image: nginx:latest
              volumeMounts:
                - name: vol-hostpath         # 卷名称,需与volumes字段中的卷名称对应
                  mountPath: /data           # 容器中的挂载路径
          imagePullSecrets:
            - name: default-secret
          volumes:
            - name: vol-hostpath             # 卷名称,可自定义
              hostPath:
                path: /data                  # 宿主机节点上的目录位置

  3. 创建工作负载。

    kubectl apply -f nginx-hostpath.yaml