K8S 持久化之静态PV (nfs)

23 篇文章 0 订阅

K8S 持久化之 静态PV (NFS)
K8S部署见上篇:
https://blog.csdn.net/oToyix/article/details/117963839

一、概念

Persistent volume

Persistent Volume (持久存储卷)简称PV,是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim(PV索取),简称PVC来实现动态绑定。Pod定义里指定的是PVC,然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。

PV的访问模式有三种:

1、ReadWriteOnce:

是最基本的方式,可读可写,但只支持被单个Pod挂载。简称:RWO – ReadWriteOnce

2、ReadOnlyMany:

可以以只读的方式被多个Pod挂载。 简称:ROX – ReadOnlyMany

3、ReadWriteMany:

简称:RWX – ReadWriteMany。这种存储可以以读写的方式被多个Pod共享。不是每一种存储都支持

这三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS。

PVC绑定PV时通常根据两个条件来绑定,“存储的大小” 及 “访问模式”。

创建PV有两种方式:

静态PV

管理员手动创建一堆PV,组成一个PV池,供PVC来绑定。

动态PV

在现有PV不满足PVC的请求时,可以使用存储分类(StorageClass),描述具体过程为:PV先创建分类,PVC请求已创建的某个类(StorageClass)的资源,这样就达到动态配置的效果。即通过一个叫 Storage Class的对象由存储系统根据PVC的要求自动创建。

PV创建完后状态会变成Available,等待被PVC绑定。一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。Pod使用完后会释放PV,PV的状态变成Released。变成Released的PV会根据定义的回收策略做相应的回收工作。

PV有三种回收策略:

1、Retain

Retain就是保留现场,K8S什么也不做,等待用户手动去处理PV里的数据,处理完后,再手动删除PV。

2、Delete

Delete 策略,K8S会自动删除该PV及里面的数据。

3、Recycle。

Recycle方式,K8S会将PV里的数据删除,然后把PV的状态变成Available,又可以被新的PVC绑定使用。

在实际使用场景里,PV的创建和使用通常不是同一个人。一般为:管理员创建一个PV池,开发人员创建Pod和PVC,PVC里定义了Pod所需存储的大小和访问模式,然后PVC会到PV池里自动匹配最合适的PV给Pod使用。

二、K8S+NFS静态存储模式案例:

1、基于Linux平台构建NFS网络文件系统,配置指令如下:

#安装NFS文件服务;	
yum install nfs-utils -y
#配置共享目录&权限;
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/html
vim /etc/exports
/data/ *(rw,sync,no_root_squash)
#启动NFS服务;
service nfs restart

写一个index.html文件进去,一会测试使用

 echo "PV ReadWriteMany" >/data/nginx/html/index.html

2、PV存储卷创建

创建持久化PV存储卷,pv.yaml文件内容如下:

cat>pv-nginx-nfs.yaml<<-EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nginx-nfs-pv
  namespace: default
spec:
  capacity:
    storage: 20G
  accessModes:
    - ReadWriteMany
  nfs:
    # FIXME: use the right IP
    server: 192.168.0.37
    path: /data/nginx/html/
EOF

PV配置参数说明:

Capacity 指定 PV 的容量为 100M;
accessModes 指定访问模式为 ReadWriteOnce,支持的访问模式有:
ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。
persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,支持的策略有:
Retain – 需要管理员手工回收。
Recycle – 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*;
Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure、Disk、OpenStack Cinder Volume 等。
storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。
path:指定 PV 在 NFS 服务器上对应的目录。

3、PVC存储卷创建

创建持久化PVC存储卷索取,pvc.yaml文件内容如下:

cat>pvc-nginx-nfs.yaml<<-EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-nfs-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10G
EOF

4、Nginx POD使用 PV存储卷

1)创建Nginx POD容器使用PVC存储卷索取,nginx.yaml文件内容如下:

cat>nginx-deployments.yaml<<-EOF
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-v1
  namespace: default
  labels:
    k8s-app: nginx-v1

spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: nginx-v1
  template:
    metadata:
      name: nginx-v1
      labels:
        k8s-app: nginx-v1
    spec:
      containers:
        - name: nginx-v1
          image: 'nginx:latest'
          imagePullPolicy: Always
          volumeMounts:
          - mountPath: /usr/share/nginx/html
            name: nginx-data
          ports:
          - containerPort: 80
      volumes:
      - name: nginx-data
        persistentVolumeClaim:
          claimName: nginx-nfs-pvc
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600
EOF

2)、创建Nginx-service.yaml,一会方便测试

kind: Service
apiVersion: v1
metadata:
  name: nginx-v1
  namespace: default
  labels:
    k8s-app: nginx-v1

spec:
  type: LoadBalancer
  ports:
    - name: tcp-8888-80-rpxsl
      protocol: TCP
      port: 8888
      targetPort: 80
      nodePort: 30680
  selector:
    k8s-app: nginx-v1
  clusterIP: 10.10.214.146
  clusterIPs:
    - 10.10.214.146
EOF

5、kubectl 应用4个yaml文件

创建nfs支持- 各节点

mkdir -p /data/k8s/pv
cd /data/k8s/pv
yum install -y nfs-utils
[root@master1 pv]# kubectl create -f pv-nginx-nfs.yaml 
persistentvolume/nginx-nfs-pv created
[root@master1 pv]# kubectl create -f pvc-nginx-nfs.yaml 
persistentvolumeclaim/nginx-nfs-pvc created
[root@master1 pv]# kubectl create -f nginx-deployments.yaml 
replicationcontroller/nginx-v1 created
[root@master1 pv]# kubectl create -f nginx-service.yaml 
service/nginx-v1 created

PV这里
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注:所有节点都要安装nfs客户端
yum install nfs-utils -y

---------------------------------------------end

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PV(PersistentVolume)和PVC(PersistentVolumeClaim)是Kubernetes中用于实现持久存储的重要概念。 PV是集群中的一块存储,可以是NFS、iSCSI、本地存储等,由管理员进行配置或使用存储类进行动态配置。PV定义了存储的容量、访问模式、持久存储的类型等属性。PV的生命周期是独立于Pod的,即使Pod被删除,PV仍然存在,可以被其他Pod继续使用。 PVC是一个持久存储卷,用于访问各种类型的持久存储,如本地存储、网络存储、云存储等。PVC的使用使应用程序更加灵活和可移植,同时也提高了存储资源的利用率。PVC和PV是一一对应的关系,即一个PVC只能绑定一个PV,而一个PV也只能被一个PVC绑定。 下面是一个演示k8s持久存储PVPVC的案例: 1. 创建PV: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: my-storage-class nfs: path: /data server: nfs-server-ip ``` 2. 创建PVC: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: my-storage-class ``` 3. 创建Pod,并挂载PVC卷: ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - name: my-volume mountPath: /data volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc ``` 4. 删除PVC的正确步骤: ```shell kubectl delete pod my-pod kubectl delete pvc my-pvc kubectl delete pv my-pv ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值