首页 > 其他分享 >k8s之持久存储卷PV和PVC

k8s之持久存储卷PV和PVC

时间:2024-01-24 21:44:26浏览次数:22  
标签:存储 PV demo pvc PVC k8s root

一、简介

在前边文章中可以看到,Kubernetes中依赖后端存储包括:NFS、Ceph、块存储等存储设备实现数据的远程存储以及数据持久化。
使用这些网络存储资源需要工程师对存储有一定的了解,并需要在工作节点上对接这些存储,对于非专业工程师造成了一些困扰。
Kubernetes为了解决这些问题,定义了两个标准的Kubernetes资源即PV和PVC,为了使Kubernetes工程师从后端存储的逻辑中解耦出来。
Kubernetes工程师无需关注后端存储的逻辑,用户只需要声明需求,Kubernete中的pv-controller会检查用户声明的需求和已有特性,找一个最接近需求的PV,和PVC建立绑定关系。至于后端存储的细节无需了解。
PV主要承载存储细节,用户一般通过PVC申请存储资源。
PV是标准的资源类型,除了负责关联至后端存储系统外,它通常还需要定义支持的存储特性

  • Volume Mode:当前PV卷提供的存储空间模型,分为设备和文件系统两种
  • StorageClassName:当前PV隶属的存储类;
  • AccessMode:支持的访问模型,分为单路读写、多路读写和多路只读三种
  • Size:当前PV允许使用的空间上限

二、PV的两种置备方式

静态置备:由管理员通过存储细节对接到远程存储服务的某存储单元进行手动创建,
动态置备:管理员基于SC对接远程存储服务的管理API,根据用户PVC中声明的需求,自动请求存储服务创建适配的存储单元,并自动把该存储单元创建成PV。

三、准备NFS服务器

root@k8s-node03:~# mkdir /data/redis02
root@k8s-node03:~# vi /etc/exports 
root@k8s-node03:~# cat /etc/exports

/data/redis  192.168.10.0/24(rw,no_root_squash,no_subtree_check)
/data/redis02  192.168.10.0/24(rw,no_root_squash,no_subtree_check)

root@k8s-node03:~# exportfs -rav
exporting 192.168.10.0/24:/data/redis02
exporting 192.168.10.0/24:/data/redis

四、创建NFS类型的PV

root@k8s-master01:~/learning-k8s/examples/volumes# cat pv-nfs-demo.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-demo
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain  #回收策略
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path:  "/data/redis02"               #nfs的共享目录
    server: 192.168.10.13                #nfs服务端地址
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pv-nfs-demo.yaml 
persistentvolume/pv-nfs-demo created

root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pv 
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM       STORAGECLASS       REASON   AGE
pv-nfs-demo                                5Gi        RWX            Retain           Available                                           7s

五、声明PVC绑定PV

root@k8s-master01:~/learning-k8s/examples/volumes# cat pvc-demo.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo
spec:
  accessModes: ["ReadWriteMany"]
  volumeMode: Filesystem
  resources:
    requests:
      storage: 3Gi
    limits:
      storage: 10Gi
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pvc-demo.yaml 
persistentvolumeclaim/pvc-demo created
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pv 
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM          STORAGECLASS       REASON   AGE
pv-nfs-demo                                5Gi        RWX            Retain           Bound    default/pvc-demo                           6m46s  
  • 以上看到PV的状态从Available转变成Bound
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pvc
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
pvc-demo       Bound    pv-nfs-demo                                5Gi        RWX                               2m9s

六、Pod消费PVC

root@k8s-master01:~/learning-k8s/examples/volumes# cat pod-with-pvc-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: redis-with-pvc
spec:
  containers:
  - name: redis
    image: redis:7-alpine
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 6379
      name: redisport
    volumeMounts:
    - mountPath: /data
      name: redis-pvc-vol
  volumes:
  - name: redis-pvc-vol
    persistentVolumeClaim:             #卷声明请求
      claimName: pvc-demo              #对应PVC的名称

root@k8s-master01:~/learning-k8s/examples/volumes# kubectl apply -f pod-with-pvc-demo.yaml 
pod/redis-with-pvc created
root@k8s-master01:~/learning-k8s/examples/volumes# kubectl get pod 
NAME                     READY   STATUS    RESTARTS      AGE
redis-with-pvc           1/1     Running   0             6s

标签:存储,PV,demo,pvc,PVC,k8s,root
From: https://www.cnblogs.com/OpenSourceSite/p/17983530

相关文章

  • k8s - Promtail 重写日志标签名
    1.Promtail重写日志标签名默认Promtail会导出Pod中的一些元数据,可以通过访问Promtail的web界面,获取可以拿到的原始标签#获取promtailPod的PodIP地址kubectlgetpo-A-owide|greppromtail#输出#lokipromtail-s2c2x......
  • k8s之dns问题
    问题1:描述:pod新建好后,无法ping通域名(无论是外网域名还是内网域名),但是可以ping通IP(包含外网IP和内网IP),不包括kube-dns的IP,和pod同一网段IP可以ping通#cat/etc/resolv.confsearchkube-system.svc.cluster.localsvc.cluster.localcluster.localnameserver10.96.0.1......
  • K8s 常用操作备忘
    #查看pod日志kubectllogs-f--tail100admin-center-server-cbd975547-fjlhs-nprod#查看pod重启前的日志kubectllogs-f-p--tail100admin-center-server-cbd975547-fjlhs-nprod#进入pod中kubectlexec-it-nnginxcfhy-prod-front-7d4d58fd4d-pj9lg--bash......
  • k8s 镜像
    目录k8s镜像镜像名称更新镜像镜像拉取策略默认镜像拉取策略ImagePullBackOff使用私有仓库配置节点向私有仓库进行身份验证config.json说明提前拉取镜像在Pod上指定ImagePullSecrets使用DockerConfig创建Secret使用案例k8s镜像镜像名称容器镜像通常会被赋予pause、ex......
  • k8s系列-minikube操作应用之安装篇
    Minikube是一个轻量级的Kubernetes集群,专为本地开发和测试环境设计。Minikube由Kubernetes社区维护,支持macOS、Linux和Windows等多种操作系统平台。它使用Kubernetes的官方稳定版本,并提供了大部分功能,包括容器编排管理、负载均衡、Ingress以及权限控制等高级特性。......
  • k8s~istio的安装与核心组件
    安装istio在线安装:https://istio.io/latest/docs/setup/getting-started/#download或者直接在这里下载:https://github.com/istio/istio/releases/tag/1.20.2$curl-Lhttps://istio.io/downloadIstio|ISTIO_VERSION=1.20.2TARGET_ARCH=x86_64sh-$cdistio-1.20.2$e......
  • 信息安全管理与评估整理-ipv6无状态地址自动配置
    无状态地址自动配置实验一1.接口下配置ipv6地址,关闭ra消息抑制,没有建立dhcp地址池只在接口下面将o位置一实验过程截图Wriershark抓包数据前缀信息A,O比特数据交换机配置Pc获取到的地址实验二2.接口下配置ipv6地址,关闭ra消息抑制,接口下未再进行其他配置Wireshark抓......
  • 信息安全管理与评估整理--ipv6有状态自动配置
    Ipv6地址池自动配置有状态以下是关闭ra消息抑制,配置前缀地址池方式,有状态自动配置l不自动获取网关,通过修改网卡—高级设置添加默认网关方式建立本地地址池调用l接口下调用通过wireshark抓包,需要将消息开启才能看到M,O为位比特前缀地址池信息A位与O位含义A比特位:f......
  • K8s集群CoreDNS监控告警最佳实践
    本文分享自华为云社区《K8s集群CoreDNS监控告警最佳实践》,作者:可以交个朋友。一背景coreDNS作为K8s集群中的关键组成部分。主要负责k8s集群中的服务发现,域名解析等功能。如果在使用过程中出现域名解析失败,域名解析超时等情况,需要引起注意。二方案简介可以通过CCE集群插件kub......
  • k8s中controller-runtime并发Reconcile分析
    §0x01起因开发控制器时,团队内一直在讨论是否需要为单个控制器对象添加并发控制(即加锁),最终把controller-runtime框架中并发数改为1,同时启用了k8s的leaderelection机制保证只有单实例来规避并发的可能。这种做法其实是有问题的,没有搞清楚controller-runtime框架本身是......