k8s目录挂载

这篇博客介绍了Kubernetes中Volume的挂载,包括Volumes文档,Subpath以及HostPath的详细用法。Volumes文档部分提到了Volume的重要性,Subpath部分解释了如何配置容器挂载信息,包括mountPath、name和subpath属性。HostPath部分展示了如何将宿主机目录挂载到Pod中,并列举了不同类型的挂载选项。文章最后表示还有更多内容待更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,Volumes文档

Volumes官方文档

二,Subpath

volumeMounts.subPath属性在引用的卷中指定一个子路径,而不是其根。
示例如下:
apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    containers:
    - name: mysql
      image: mysql
      env:
      - name: MYSQL_ROOT_PASSWORD
        value: "rootpasswd"
      volumeMounts:
      - mountPath: /var/lib/mysql
        name: site-data
        subPath: mysql
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html
        name: site-data
        subPath: html
    volumes:
    - name: site-data
      persistentVolumeClaim:
        claimName: my-lamp-site-data

volumeMounts配置容器挂载信息
mountPath配置容器文件名或者目录名
name配置声明卷,也就是volumes配置的相同name的存储介质。注意,如果volumes未配置同name的存储介质,那么,volumeMounts是无法使用的,必须声明才能使用。
subpath配置的是挂载存储介质子路径文件名或者目录名。subpath挂载文件不覆盖目录。举例a目录包含c,d,声明a为挂载目录。subpath配置的是c和d,也就是子路径中的文件或者目录名,是相对路径。

三,HostPath

HostPath是将宿主机上的目录挂载到容器中使用。
示例如下
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory

语法如示例:
path配置宿主机目录
type参数:
DirectoryOrCreate:意思是我们要挂载的路径在宿主机上是个已经存在的目录,不存在就创建一个新的目录。

Directory:宿主机上必须实现存在目录,如果不存在就报错

FileOrCreate:表示挂载的是文件,如果不存在就挂载一个文件。文件也可以当做存储挂载的。

File:表示要挂载的文件必须事先存在,否则就报错。

Socket:表示必须是一个Socket类型的文件。

CharDevice:表示是一个字符类型的设备文件。

BlockDevice:表示的是一个块类型的设备文件。

三,未完待续。

	只记录个人使用过的,其他建议查看官方文档
### 在 Kubernetes 中配置 NFS 挂载目录 #### 安装 NFS 服务 为了使 Kubernetes 使用 NFS 进行存储卷挂载,需先确保 NFS 服务器已正确设置。对于基于 Debian 的系统,可以使用如下命令来安装必要的软件包: ```bash sudo apt update && sudo apt install nfs-kernel-server -y ``` 而对于 CentOS 或其他 Red Hat 衍生版本,则应通过 `yum` 来完成相同的操作[^1]。 #### 创建共享目录与导出规则 接着定义想要分享给 Kubernetes Pod 访问的具体文件夹位置,并编辑 `/etc/exports` 文件指定该路径及其对应的访问控制选项。例如: ```plaintext /mnt/nfs_share *(rw,sync,no_subtree_check,no_root_squash) ``` 此条目表示允许所有 IP 地址对该目录拥有读写权限而不压缩根用户身份验证[^2]。 #### 启动并启用 NFS 服务 修改完成后,记得启动 NFS 及其依赖的服务(如 RPC 绑定),并且将其设为随系统自启项之一: ```bash systemctl start rpcbind && systemctl start nfs-server systemctl enable rpcbind && systemctl enable nfs-server ``` 这一步骤同样适用于大多数 Linux 发行版上的 NFS 部署环境[^3]。 #### 准备 PersistentVolume (PV) 现在转向 Kubernetes 方面的工作——创建一个名为 `nfs-pv.yaml` 的 YAML 文件用于描述 PV 对象: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany nfs: path: /mnt/nfs_share server: <NFS_SERVER_IP> ``` 这里指定了 NFS 提供者的位置以及所期望分配的空间大小;注意替换 `<NFS_SERVER_IP>` 成实际的 NFS 服务器地址[^4]。 #### 构建 PersistentVolumeClaim (PVC) 紧接着编写另一个 YAML 文件 `nfs-pvc.yaml` ,用来声明 PVC 请求资源: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi ``` 上述配置请求了一个具有至少 5GB 大小且支持多实例并发读写的持久化卷。 #### 应用至集群内 最后利用 kubectl 工具提交这些对象定义到 K8s API Server 上使之生效: ```bash kubectl apply -f nfs-pv.yaml kubectl apply -f nfs-pvc.yaml ``` 此时便完成了整个过程,后续只需按照常规方式引用这个 PVC 就可以在应用中享受来自远程 NFS 存储带来的便利了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值