k8s数据卷概念与常用操作

节点本地数据卷


emptyDir卷

emptyDir卷: 是一个临时存储卷,与Pod生命周期绑定在一起,当 Pod被从节点上删除时,emptyDir 卷中的数据也会被永久删除

emptyDir卷的数据临时存储在/var/lib/kubelet/pods/{podid}/containers/plugins/volumes/kubernetes.io~empty-dir/目录下.

应用场景: Pod中容器之间数据共享.


emptyDir配置示例

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
    - image: k8s.gcr.io/test-webserver
      name: test-container
      volumeMounts:
        - mountPath: /cache
          name: cache-volume
  volumes:
    - name: cache-volume
      # 卷类型为emptyDir
      emptyDir: {}

hostPath

hostPath卷: 挂载Pod所在Node的文件或目录到Pod中的容器.
应用场景: Pod容器需要访问宿主机文件;通常用来收集日志.


hostPath配置示例

将宿主机/tmp目录挂载到容器/test-pd目录

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:
        # 宿主上目录位置
        path: /tmp
        # 此字段为可选
        type: Directory

网络数据存储卷:NFS

nfs

NFS卷: 提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中,宿主机需要安装nfs-utils包. 适合测试环境使用,不建议生产环境使用.

  • NFS优点: 配置简单,性能较高
  • NFS缺点: 自身不支持高可用,单节点部署生产环境风险高.

nfs的动态存储类创建的pvc不支持动态扩容缩容,不支持使用kubectl edit 编辑pvc容量


rhel8搭建nfs服务器

rhel8配置nfs


nfs存储卷配置示例

node上必需要安装nfs的客户端

yum install nfs-utils -y

pod挂载nfs示例yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  containers:
    - name: myapp
      image: <Image>
      volumeMounts:
        - mountPath: Path to mount # 容器中的挂载点(挂砸到容器中的哪个目录)
          name: nfs-data            # 从哪个volumes挂载
      # pod资源限制
      resources:
        limits:
          memory: "128Mi"
          cpu: "500m"
      ports:
        - containerPort: <Port>
  volumes:
    - name: nfs-data
      nfs:
        server: 192.168.31.63 # nfs服务器地址
        path: /ifs/k8s        # nfs服务器存储路径

NFS创建PV,PVC到POD挂载PVC

流程: 使用NFS创建PV----->使用PV绑定PVC----->POD使用PVC

---
# 使用NFS创建一个pv
apiVersion: v1
kind: PersistentVolume
metadata:
  # 创建的PV的名字
  name: mypv
spec:
  capacity:
    storage: { 2:<Size> } # 声明存储大小,例如 5Gi
  volumeMode: Filesystem
  accessModes:
    # ReadWriteOnce:读写权限、并且只能被单个Node挂载
    # ReadWriteMany:读写权限,允许被多个Node挂载
    # ReadOnlyMany:只读权限,允许被多个Node挂载
    - ReadWriteOnce
  # pv回收策略:
  # A. `Retain`模式:`PVC`删除后,PV依然存在
  # C. `Delete`模式:`PVC`删除后,PV同时被删除
  # D. `Recycle`模式:`PVC`删除后,PV可再次使用
  persistentVolumeReclaimPolicy: Recycle
  # 将NFS挂载为PV
  nfs:
    # NFS服务器存储目录
    path: /tmp
    # NFS服务器地址
    server: 172.17.0.2
---
# 使用pvc绑定pv
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  # 创建的PVC存储的名字
  name: mypvc
spec:
  resources:
    requests:
      storage: { 2:<Size> } # 传入需要的存储容量,不能大于PV的容量
  volumeMode: Filesystem
  # ReadWriteOnce:读写权限、并且只能被单个Node挂载
  # ReadWriteMany:读写权限,允许被多个Node挂载
  # ReadOnlyMany:只读权限,允许被多个Node挂载
  accessModes:
    - ReadWriteOnce
---
# pod绑定pvc
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  containers:
    - name: myapp
      image: <Image>
      volumeMounts:
        - mountPath: Path to mount # 容器中的挂载点(挂砸到容器中的哪个目录)
          name: pod-data # 从哪个volumes挂载
      # pod资源限制
      resources:
        limits:
          memory: "128Mi"
          cpu: "500m"
      ports:
        - containerPort: <Port> # 容器暴露的端口
  # 使用PVC声明一个volumes(存储卷)
  volumes:
    - name: pod-data # 存储卷的名字
      persistentVolumeClaim:
        claimName: mypvc # 要使用的pvc的名字

PV和PVC

PV和PVC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值