• 使用 Kubeadm 部署 Kubernetes(K8S) 安装 持久化存储(PV&PVC)


    使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix
    使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
    NFS 存在一个弊端,需要知道NFS服务器的地址,配在 yaml 中
    PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方
    PVC:用于调用,不需要关心内部实现细节

    PV(PersistentVolume):是集群中由管理员配置的一段网络存储。 它是集群中的资源, 就像节点是集群资源一样。 PV 是容量插件, 如 Volumes, 但其生命周期独立于使用 PV 的任何单个 pod。 此 API 对象捕获存储实现的详细信息, 包括 NFS, iSCSI 或特定于云提供程序的存储系统。
    PVC(PersistentVolumeClaim):是由用户进行存储的请求。 它类似于 pod。 Pod 消耗节点资源, PVC 消耗 PV 资源。 Pod 可以请求特定级别的资源( CPU 和内存) 。 声明可以请求特定的大小和访问模式( 例如, 可以一次读/写或多次只读) 。

    虽然 PersistentVolumeClaims 允许用户使用抽象存储资源, 但是 PersistentVolumes 对于不同的问题, 用户通常需要具有不同属性( 例如性能) 。 群集管理员需要能够提供各种PersistentVolumes 不同的方式, 而不仅仅是大小和访问模式, 而不会让用户了解这些卷的实现方式。 对于这些需求, 有 StorageClass 资源。
    StorageClass 为管理员提供了一种描述他们提供的存储的“ 类” 的方法。 不同的类可能映射到服务质量级别, 或备份策略, 或者由群集管理员确定的任意策略。 Kubernetes 本身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“ 配置文件” 。

    PVC 和 PV 是一一对应的
    PV 是群集中的资源。 PVC 是对这些资源的请求, 并且还充当对资源的检查。 PV 和 PVC 之间
    的相互作用遵循以下生命周期:
    Provisioning ——-> Binding ——– >Using——>Releasing——>Recycling

    应用部署 、定义PVC(绑定PV)、定义PV(数据存储服务器IP,路径)

    创建YAML文件

    pvc.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-pvc
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - name: wwwroot
              mountPath: /usr/share/nginx/html
            ports:
            - containerPort: 80
          volumes:
          - name: wwwroot
            persistentVolumeClaim:
              claimName: my-pvc
    
    ---
    
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
    

    pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: my-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      nfs:
        path: /nfs/pv
        server: 172.16.3.181
    
    # 创建目录
    [root@k8smaster ~]# mkdir -p /nfs/pv
    # 创建 pvc.yaml ,内容见上
    [root@k8smaster ~]# vi pvc.yaml
    # 创建 pv.yaml ,内容见上
    [root@k8smaster ~]# vi pv.yaml
    [root@k8smaster ~]# kubectl apply -f pvc.yaml
    deployment.apps/nginx-pvs created
    persistentvolumeclaim/my-pvc created
    [root@k8smaster ~]# kubectl get pods
    NAME                         READY   STATUS    RESTARTS   AGE
    javademo1-d7856c75c-czv2g    1/1     Running   0          22h
    javademo1-d7856c75c-n28rs    1/1     Running   0          22h
    javademo1-d7856c75c-xzqjc    1/1     Running   0          22h
    nginx-f89759699-5hkdw        1/1     Running   0          26d
    nginx-nfs-788564fbc8-z9srr   1/1     Running   0          129m
    nginx-pvc-58b7bf955f-5clzg   0/1     Pending   0          7s
    nginx-pvc-58b7bf955f-lhvx4   0/1     Pending   0          7s
    nginx-pvc-58b7bf955f-z2cg6   0/1     Pending   0          7s
    [root@k8smaster ~]# kubectl apply -f pv.yaml
    persistentvolume/my-pv created
    [root@k8smaster ~]# kubectl get pv,pvc
    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/my-pv   5Gi        RWX            Retain           Bound    default/my-pvc                           39s
    
    NAME                           STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/my-pvc   Bound    my-pv    5Gi        RWX                           2m13s
    [root@k8smaster pv]# pwd
    /nfs/pv
    [root@k8smaster pv]# vi index.html
    hello pvc
    [root@k8smaster ~]# kubectl get pods
    NAME                         READY   STATUS    RESTARTS   AGE
    javademo1-d7856c75c-czv2g    1/1     Running   0          22h
    javademo1-d7856c75c-n28rs    1/1     Running   0          22h
    javademo1-d7856c75c-xzqjc    1/1     Running   0          22h
    nginx-f89759699-5hkdw        1/1     Running   0          26d
    nginx-nfs-788564fbc8-z9srr   1/1     Running   0          133m
    nginx-pvc-58b7bf955f-5clzg   1/1     Running   0          3m17s
    nginx-pvc-58b7bf955f-lhvx4   1/1     Running   0          3m17s
    nginx-pvc-58b7bf955f-z2cg6   1/1     Running   0          3m17s
    [root@k8smaster ~]# kubectl exec -it nginx-pvc-58b7bf955f-5clzg bash
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead. 
    root@nginx-pvc-58b7bf955f-5clzg:/# ls /usr/share/nginx/html/
    index.html
    root@nginx-pvc-58b7bf955f-5clzg:/# cat /usr/share/nginx/html/index.html
    hello pvc
    root@nginx-pvc-58b7bf955f-5clzg:/#
    

    image

  • 相关阅读:
    [转载]C#流,字节数组,字符串
    [C#错误]未找到类型或命名空间名称" " (是否缺少 using 指令或程序集引用?)
    批处理删除带空格的长目录或文件夹
    注释换行 引号内的字符串没有正确结束
    oracle sqlplus运行sql文件
    Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
    Tomcat:Caused by: java.lang.OutOfMemoryError: PermGen space
    虚拟机vmware启动太快无法进入bios的解决方法
    MySQL Error 1130 Host 'localhost' is not allowed to connect to this MySQL server
    如何远程判断服务器的操作系统?
  • 原文地址:https://www.cnblogs.com/vipsoft/p/16873429.html
Copyright © 2020-2023  润新知