一. PersistentVolume
PersistentVolume (PV) 是外部存储系统中的一块存储空间,由管理员创建和维护。与 Volume 一样,PV 具有持久性,生命周期独立于 Pod。

二. PersistentVolumeClaim
PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV

三. StorageClass存储类介绍
也是我们所说的自动创建 路径放在了我们搭建nfs 的路径上的deployment上去定义路径

下面是一下的各种参数基于下面的yaml文件去查看
回收策略:reclaimPolicy参数
Recycle:清除 PV 中的数据,效果相当于执行 rm -rf
Delete:删除 Storage Provider 上的对应存储资源
Retain:需要管理员手工回收

accessModes
ReadWriteOnce:以 read-write 模式 mount 到单个节点
ReadOnlyMany:read-only 模式 mount 到多个节点
ReadWriteMany:read-write 模式 mount 到多个节点

Phase
Available – PV可以被使用
Bound – PV被绑定到PVC
Released – 被绑定的PVC被删除,可以被Reclaim
Failed – 自动回收失败

.

创建静态pv+pvc 这里基于nfs搭建的

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv1      #pv的名字
spec:
  capacity:               #用于定义PV的存储容量,当前只支持定义大小,未来会实现其他能力如:IOPS、吞吐量。
    storage: 200Gi       #创建存储的空间大小
  accessModes:
    -  ReadWriteMany       #用于定义资源的访问方式 (单个节点  这里用的是单节点可读可写)
  storageClassName: nfs      #类的名称
  nfs:
    path: /nfs/data        #本地的路径
    server: 172.28.104.92  #自己用的nfs服务器
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfspvc1
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  storageClassName: nfs

创建玩查看 已经是绑定状态
在这里插入图片描述
下面是基于storageclass的动态存储

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim1     # 名字
spec:
  accessModes:
    - ReadWriteMany   #这里有三个参数可以使用
  resources:
    requests:
       storage: 1Mi      #用了多大 (这里只是测试)
  storageClassName:  nfs-storage   #引用的哪个storage (这里
  是基于nfs的storage下面图去查看)

在这里插入图片描述
这个截图就是基于nfs的storageclass 的动态存储引用的创建的名字

下面基于nginx做一下动态的持久化存储挂载

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-test
spec:
  selector:
    matchLabels:
      app: nginx-test
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx-test
        image: registry.harbor.com/test/nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: index
          mountPath: /usr/share/nginx/html
        - name: nginx    #自己定义的名字引用下面的(自己定义的名字)
          mountPath: /root   #挂载到容器里面的目录
      volumes:
      - name: index
        configMap:
          name: index
          items:
            - key: index.html
              path: index.html
      - name: nginx      #自己定义的名字
        persistentVolumeClaim:    #引用的模式
          claimName: test-claim1      #引用到的pvc动态创建的名字
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-test
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: nginx-test

以这样的形式也可以写入进去pod中 一般引用到statefulsets 中 这里可

  volumeClaimTemplates:
  - metadata:
      name: rabbitmq-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: "nfs-storage"
      resources:
        requests:
          storage: 4Gi

我这里挂载到了/root 目录上 我在nginx容器/root下创建了 3个文本文件 去我们存放nfs的路径下查看

[root@k8s-master02 nginxpv+mount]# kubectl exec -it nginx-test-6f6c7c8969-2rnbq -- bash
root@nginx-test-6f6c7c8969-2rnbq:/# cd /root/
root@nginx-test-6f6c7c8969-2rnbq:~# ls
1.txt
root@nginx-test-6f6c7c8969-2rnbq:~# touch {1..3}.txt
root@nginx-test-6f6c7c8969-2rnbq:~# ls
1.txt  2.txt  3.txt

这是是我挂载到哪里的持久化存储路径 查看已经有了

[root@nfs nfs]# pwd
/nfs_data/k8s_data/nfs
[root@nfs nfs]# ls
default-test-claim1-pvc-8325a0d0-1e4a-11eb-a683-005056b1ca0d
[root@nfs nfs]# cd default-test-claim1-pvc-8325a0d0-1e4a-11eb-a683-005056b1ca0d/
[root@nfs default-test-claim1-pvc-8325a0d0-1e4a-11eb-a683-005056b1ca0d]# ls
1.txt  2.txt  3.txt
[root@nfs default-test-claim1-pvc-8325a0d0-1e4a-11eb-a683-005056b1ca0d]#

个人记录
绑定pvc


```bash
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: Never
    name: nginx
    volumeMounts:
    - mountPath: /opt   #容器的目录
      name: nginx   
  volumes:
  - name: nginx
    persistentVolumeClaim:     #本地pvc
      claimName: nginx-test-pvc  #pvc 名字

node节点亲和性

affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:  #反亲和性
      - weight: 1      
        preference:
          matchExpressions:
          - key: ssd    #引用的键值就是打的标签
            operator: In
            values:
            - kk        #标签后面的键值

pod亲和性

  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app   #pod的标签节点
              operator: In
              values:
              - nginx    #pod  内部键值
          topologyKey: "kubernetes.io/hostname"

静态 存储

apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv1
spec:

capacity:
storage: 1Gi
#指定访问模式
accessModes:
#pv能以readwrite模式mount到单个节点
- ReadWriteOnce
#指定pv的回收策略,即pvc资源释放后的事件.recycle(不建议,使用动态供给代替)删除pvc的所有文件
persistentVolumeReclaimPolicy: Recycle
#指定pv的class为nfs,相当于为pv分类,pvc将指定class申请pv
storageClassName: mynfs
#指定pv为nfs服务器上对应的目录
nfs:
path: /data/nfs
server: 192.168.1.10

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfspvc1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: mynfs

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐