侧边栏壁纸
博主头像
码途 博主等级

行动起来,活在当下

  • 累计撰写 72 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
k8s

持久卷(PV和PVC) - k8s

htmltoo
2023-12-13 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

1-概念

-PV访问模式AccessModes

RWO - ReadWriteOnce #单个Pod挂载并且可读写

ROX - ReadOnlyMany #可以有多个Pod以只读方式挂载

RWX - ReadWriteMany #可以有多个Pod以读写方式挂载

-PV回收策略RECLAIM POLICY

Retain #人工回收,保留,默认选项

Recycle #清除PV中的数据,相当于执行rm -rf /data/nfs/pv0001/*

Delete #PV和与 PV 相连的后端存储同时删除,相当于执行rm -rf /data/nfs/pv0001

-PV状态STATUS

• Available(可用):表示可用状态,还未被任何 PVC 绑定

• Bound(已绑定):表示 PV 已经被 PVC 绑定

• Released(已释放):PVC 被删除,但是资源还未被集群重新声明

• Failed(失败): 表示该 PV 的自动回收失败

2-安装NFS

ubuntu16.04.4 部署NFS共享

mkdir -p /data/nfs/{pv0001,pv0002}

chmod -R 777 /data/nfs

3-PV静态供给

3.1-创建PV

创建两个PV,一个5G,一个10G

注意:/data/nfs/pv0001和/data/nfs/pv0002需提前创建

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/nfs/pv0001
    server: 192.168.1.10

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0002
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/nfs/pv0002
    server: 192.168.1.10
kubectl get pv

3.2-创建PVC

根据访问模式和存储空间去绑定对应的PV,始终确保绑定的PV大小大于等于PVC的大小

PVC与PV是一一对应的

先删除Pod再删除PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
kubectl get pvc

3.3-Pod使用PVC

实际是把NFS共享的/data/nfs/pv0001目录绑定到容器的/usr/share/nginx/html目录

spec:
  containers:
  - name: empty
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    volumeMounts:
      - name: data
        mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: my-pvc

3.4.申请的存储空间是否为实际可用的存储空间?

不是。存储空间字段storage不能限制实际存储容量,只作为一种匹配标记,具体可用容量取决于后端网络存储(NFS、Ceph)。

就好比PV申请的存储空间为5G,而后端存储可用空间为100G,那么对应的Pod实际可使用100G的空间

现在K8s已逐步对部分存储提供自动限制的支持

4-PV动态供给

4.1-概念

Dynamic Provisioning机制工作的核心在于StorageClass的API对象

StorageClass声明存储插件,用于自动创建PV

4.2-部署外部插件(支持nfs)

下载地址:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy

如果不是安装到default命名空间,需要修改yaml文件中的命名空间

kubectl apply -f rbac.yaml #授权访问apiserver

vim deployment.yaml

修改镜像为gmoney23/nfs-client-provisioner

填写正确的NFS服务器的地址和目录

1.pngkubectl apply -f deployment.yaml

kubectl apply -f class.yaml #创建存储类

4.3-创建PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: managed-nfs-storage
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 25Gi

kubectl apply -f pvc.yaml

会自动创建PV和PVC,并绑定

kubectl get pvc

Pod使用PVC的写法与静态供给一样,不在重复

会自动在NFS共享存储下创建目录

ls  /data/nfs

0

评论区