主机路径(HostPath)
主机路径(HostPath)可以将容器所在宿主机的文件目录挂载到容器指定的挂载点中,如容器需要访问/etc/hosts则可以使用HostPath映射/etc/hosts等场景。
- HostPath卷存在许多安全风险,最佳做法是尽可能避免使用HostPath。 当必须使用HostPath卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。
- 当挂载HostPath卷的Pod删除后,HostPath中的数据依然会保留。
通过控制台使用主机路径
主机路径(HostPath)挂载表示将主机上的路径挂载到指定的容器路径。通常用于:“容器工作负载程序生成的日志文件需要永久保存”或者“需要访问宿主机上Docker引擎内部数据结构的容器工作负载”。
- 登录CCE控制台。
- 在创建工作负载时,在“容器配置”中找到“数据存储”,选择“主机路径(HostPath)”。
- 设置添加本地磁盘参数,如表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文件夹中。不填写时默认为根路径。
权限
- 只读:只能读容器路径中的数据卷。
- 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。
- 其余信息都配置完成后,单击“创建工作负载”。
使用kubectl使用主机路径
- 使用kubectl连接集群。
- 创建并编辑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 # 宿主机节点上的目录位置
- 创建工作负载。
kubectl apply -f nginx-hostpath.yaml