k8s创建动静态存储pv+pvc+storage

一. 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

### Kubernetes 动态 PVC 与静态 PVC 的区别 #### 静态 PVC 工作原理 在静态供应模式下,管理员预先创建多个 PersistentVolume (PV),这些 PV 定义了可用的存储资源及其属性。当用户提交 PersistentVolumeClaim (PVC) 请求时,Kubernetes 将根据 PVC 中设置的选择器和标签来查找符合条件的 PV,并将其绑定给 PVC[^1]。 这种机制意味着所有的存储资源都是提前准备好的,一旦有新的需求到来就可以立即分配出去;但是也带来了管理上的复杂度,在大规模环境中尤其明显[^4]。 ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-static-example spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-static-example spec: resources: requests: storage: 5Gi selector: matchLabels: type: local ``` #### 动态 PVC 工作原理 相比之下,动态供应则更加灵活高效。它允许集群自动响应来自应用程序的工作负载请求并按需创建相应的持久化卷实例。具体来说就是通过 StorageClass 对象配置不同的后端存储插件实现自动化供给过程。每当一个新的 PVC创建且指定了特定类型的 StorageClass 后,系统就会触发相应驱动程序执行实际磁盘空间划分操作直至完成整个流程。 这种方式不仅简化了运维人员日常管理工作量,同时也提高了资源利用率和服务质量水平。 ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard-dynamic-sc provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain allowVolumeExpansion: true mountOptions: - debug --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-dynamic-example spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: standard-dynamic-sc ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值