
# 主机路径（HostPath）
主机路径（HostPath）可以将容器所在宿主机的文件目录挂载到容器指定的挂载点中，如容器需要访问/etc/hosts则可以使用HostPath映射/etc/hosts等场景。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
- HostPath卷存在许多安全风险，最佳做法是尽可能避免使用HostPath，例如您可以使用[local](https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#local)类型替代。
- 当必须使用HostPath卷时，它的范围应仅限于所需的文件或目录，并以只读方式挂载。
- 当挂载HostPath卷的Pod删除后，HostPath中的数据依然会保留。
- 主机路径不能设置为根目录/。
 
#### 使用主机路径
在CCE中，用户可通过控制台或kubectl命令行方式使用主机路径，具体步骤如下：
- [控制台方式]
  主机路径(HostPath)挂载表示将主机上的路径挂载到指定的容器路径。通常用于："容器工作负载程序生成的日志文件需要永久保存"或者"需要访问宿主机上Docker引擎内部数据结构的容器工作负载"。
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在创建工作负载时，在"容器配置 \> 容器信息"中找到"数据存储"，选择"主机路径(HostPath)"。
  
  3. 设置添加本地磁盘参数，如[表1]。
     
      表1卷类型选择主机路径挂载 
     | 参数   | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
     |:---|:---|
     | 主机路径 | 输入主机路径，如/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
     ```
     
     
     
   
