• 配置 Pod 以使用 PersistentVolume 作为存储


    配置 Pod 以使用 PersistentVolume 作为存储

    本文将向你介绍如何配置 Pod 使用 PersistentVolumeClaim 作为存储。 以下是该过程的总结:

    1. 你作为集群管理员创建由物理存储支持的 PersistentVolume。你不会将该卷与任何 Pod 关联。
    2. 你现在以开发人员或者集群用户的角色创建一个 PersistentVolumeClaim, 它将自动绑定到合适的 PersistentVolume。
    3. 你创建一个使用以上 PersistentVolumeClaim 作为存储的 Pod。

    k8s在线环境

    提供了一个master节点和一个Node节点

    在你的节点上创建一个 index.html 文件

    打开集群中的某个节点的 Shell。 如何打开 Shell 取决于集群的设置。(保证Pod在Node节点中,这里给出的是单节点)

    在该节点的 Shell 中,创建一个 /mnt/data 目录:

     mkdir /mnt/data
    
    
    • 1
    • 2

    /mnt/data 目录中创建一个 index.html 文件:

    sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index        .html"
    
     cat /mnt/data/index.html
    Hello from Kubernetes storage
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建 PersistentVolume

    在本练习中,你将创建一个 hostPath 类型的 PersistentVolume。 Kubernetes 支持用于在单节点集群上开发和测试的 hostPath 类型的 PersistentVolume。 hostPath 类型的 PersistentVolume 使用节点上的文件或目录来模拟网络附加存储。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      labels:
        type: local
    spec:
      storageClassName: manual
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/data"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    配置文件指定卷位于集群节点上的 /mnt/data 路径。 其配置还指定了卷的容量大小为 10 GB,访问模式为 ReadWriteOnce, 这意味着该卷可以被单个节点以读写方式安装。 此配置文件还在 PersistentVolume 中定义了 StorageClass 的名称manual。 它将用于将 PersistentVolumeClaim 的请求绑定到此 PersistentVolume。

    #查看pv信息
     kubectl get pv task-pv-volume
    NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    task-pv-volume   10Gi       RWO            Retain           Available           manual                  18s
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出结果显示该 PersistentVolume 的状态(STATUS)Available。 这意味着它还没有被绑定给 PersistentVolumeClaim。

    创建 PersistentVolumeClaim

    下一步是创建一个 PersistentVolumeClaim。 Pod 使用 PersistentVolumeClaim 来请求物理存储。 在本练习中,你将创建一个 PersistentVolumeClaim,它请求至少 3 GB 容量的卷, 该卷一次最多可以为一个节点提供读写访问。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pv-claim
    spec:
      storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 3Gi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    创建 PersistentVolumeClaim 之后,Kubernetes 控制平面将查找满足申领要求的 PersistentVolume。 如果控制平面找到具有相同 StorageClass 的适当的 PersistentVolume, 则将 PersistentVolumeClaim 绑定到该 PersistentVolume 上。

    #查看pv
    kubectl get pv task-pv-volume
    NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
    task-pv-volume   10Gi       RWO            Retain           Bound    default/task-pv-claim   manual                  13m
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    状态更改为Bound,说明已经绑定

    在这里插入图片描述

    创建 Pod

    下一步是创建一个使用你的 PersistentVolumeClaim 作为存储卷的 Pod。

    apiVersion: v1
    kind: Pod
    metadata:
      name: task-pv-pod
    spec:
      volumes:
        - name: task-pv-storage
          persistentVolumeClaim:
            claimName: task-pv-claim
      containers:
        - name: task-pv-container
          image: nginx
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              name: task-pv-storage
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    注意 Pod 的配置文件指定了 PersistentVolumeClaim,但没有指定 PersistentVolume。 对 Pod 而言,PersistentVolumeClaim 就是一个存储卷。

    #查看pod
    kubectl get pod task-pv-pod
    NAME          READY   STATUS    RESTARTS   AGE
    task-pv-pod   1/1     Running   0          3m19s
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    打开shell访问Pod中容器

    kubectl exec -it task-pv-pod -- /bin/bash
    # 一定要在上一步 "kubectl exec" 所返回的 Shell 中执行下面三个命令
    apt update
    apt install curl
    curl http://localhost/
    
    root@task-pv-pod:/# curl http://localhost/
    Hello from Kubernetes storage
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    #尝试在节点上修改内容,查看容器内容是否也被修改
    #Node节点修改文件内容
    node01 $ echo change something > /mnt/data/index.html 
    #进入Pod容器内部
    controlplane $ kubectl exec -it task-pv-pod -- /bin/bash
    root@task-pv-pod:/# curl http://localhost/  #完全同步
    change something 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    清理

    删除 Pod、PersistentVolumeClaim 和 PersistentVolume 对象:

    kubectl delete pod task-pv-pod
    kubectl delete pvc task-pv-claim
    kubectl delete pv task-pv-volume
    
    • 1
    • 2
    • 3

    在节点的 Shell 上,删除你所创建的目录和文件:

    sudo rm /mnt/data/index.html
    sudo rmdir /mnt/data
    
    • 1
    • 2
  • 相关阅读:
    Kotlin 协程二三事:挂起原理
    ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts
    C++——stack和queue
    面试字节,过关斩将到 3 面,结果找了个架构师来吊打我?
    快来了解一下5个超实用的WPS表格操作技巧!
    Linux Kernel compile
    跨域的MPLS VXN Option C
    简易数控直流稳压电压
    FPGA面试笔试一些基础概念题目
    Windows下 Qt + OpenCV 开发环境搭建
  • 原文地址:https://blog.csdn.net/weixin_51882166/article/details/133947271