k8s 存储(K8s storage)

存储资源实现pod间数据的共享和持久化

emptyDir

emptyDir,跟随pod的结束而消失

【位置】pod.spec 下声明

volumes:
- name: emptyDIR
  emptydir: {}
  #emptydir: {medium: Memroy,sizeLimit: 256Mi}

【位置】pod.spec.containers 下使用

volumeMounts:
- name: emptyDIR
  mountPath: /var/logs

hostPath

数据持久化在单个node上,无法实现数据的共享

【位置】pod.spec 下声明

volumes:
- name: sys
  hostPath: 
    path: /sys
    type: ""  #Directory,DirectoryOrCreate,File,FileOrCreate,Socket,CharDevice ,BlockDevice

【位置】pod.spec.containers 下使用

volumeMounts:
- name: sys
  mountPath: /sys

nfs

【位置】pod.spec 下声明

volumes:
- name: data
  nfs:
    path: /data/nfs-volume/  #nfs 实际对外共享的路径
    readOnly: true
    server: 10.4.7.200

【位置】pod.spec.containers 下使用

volumeMounts:
- name: data
  mountPath: /data

pv 和 pvc

持久卷

持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应,或者 使用存储类(Storage Class)来动态供应。 持久卷是集群资源,就像节点也是集群资源一样

持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求,PVC 申领会耗用 PV 资源

  • 手工创建pv
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
  labels:
    type: slow
spec:
  accessModes:
    - ReadWriteOnce #the volume can be mounted as read-write by a single node
  capacity:
    storage: 5Gi
  volumeMode: Filesystem  # 默认是Filesystem
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
  - hard
  - nfsvers=4.1
  nfs:
    path: /nfs
    server: 10.4.7.31
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 2Gi
  storageClassName: slow
  selector:
    matchLabels:
      type: slow
---
apiVersion: v1
kind: Pod
metadata:
  name: test-pvc
spec:
  volumes:
  - name: mypvc
    persistentVolumeClaim:
      claimName: myclaim
  containers:
  - name: test
    image: alpine:3.5
    volumeMounts:
    - name: mypvc
      mountPath: /tmp/test
    command: ["sleep","1000"]
[root@ceph-mon2 ~]# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv0003   5Gi        RWO            Recycle          Available           slow                    11s
每个卷会处于以下阶段(Phase)之一:

Available(可用)-- 卷是一个空闲资源,尚未绑定到任何申领;
Bound(已绑定)-- 该卷已经绑定到某申领;
Released(已释放)-- 所绑定的申领已被删除,但是资源尚未被集群回收;
Failed(失败)-- 卷的自动回收操作失败。
命令行接口能够显示绑定到某 PV 卷的 PVC 对象。
ReadWriteOnce
卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
ReadOnlyMany
卷可以被多个节点以只读方式挂载。
ReadWriteMany
卷可以被多个节点以读写方式挂载。
ReadWriteOncePod
卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。
在命令行接口(CLI)中,访问模式也使用以下缩写形式:

RWO - ReadWriteOnce
ROX - ReadOnlyMany
RWX - ReadWriteMany
RWOP - ReadWriteOncePod
目前的回收策略有:

Retain -- 手动回收
Recycle -- 基本擦除 (rm -rf /thevolume/*)
Delete -- 诸如 AWS EBS、GCE PD、Azure Disk 或 OpenStack Cinder 卷这类关联存储资产也被删除
目前,仅 NFS 和 HostPath 支持回收(Recycle)。 AWS EBS、GCE PD、Azure Disk 和 Cinder 卷都支持删除(Delete)。
  • 动态创建pv
————————

Storage resources realize data sharing and persistence between pods

emptyDir

Emptydir, disappear with the end of pod

< strong > [location] < / strong > pod Statement under spec

volumes:
- name: emptyDIR
  emptydir: {}
  #emptydir: {medium: Memroy,sizeLimit: 256Mi}

【位置】pod.spec.containers 下使用

volumeMounts:
- name: emptyDIR
  mountPath: /var/logs

hostPath

Data is persistent on a single node, and data sharing cannot be realized

< strong > [location] < / strong > pod Statement under spec

volumes:
- name: sys
  hostPath: 
    path: /sys
    type: ""  #Directory,DirectoryOrCreate,File,FileOrCreate,Socket,CharDevice ,BlockDevice

【位置】pod.spec.containers 下使用

volumeMounts:
- name: sys
  mountPath: /sys

nfs

< strong > [location] < / strong > pod Statement under spec

volumes:
- name: data
  nfs:
    path: /data/nfs-volume/  #nfs 实际对外共享的路径
    readOnly: true
    server: 10.4.7.200

【位置】pod.spec.containers 下使用

volumeMounts:
- name: data
  mountPath: /data

pv 和 pvc

Persistent volume

A persistent volume (PV) is a piece of storage in a cluster that can be provisioned in advance by an administrator or dynamically provisioned using a storage class. Persistent volumes are cluster resources, just as nodes are cluster resources

Persistent volume claim (PVC) expresses the user’s request for storage. PVC claim will consume PV resources

  • Create PV manually
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
  labels:
    type: slow
spec:
  accessModes:
    - ReadWriteOnce #the volume can be mounted as read-write by a single node
  capacity:
    storage: 5Gi
  volumeMode: Filesystem  # 默认是Filesystem
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
  - hard
  - nfsvers=4.1
  nfs:
    path: /nfs
    server: 10.4.7.31
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 2Gi
  storageClassName: slow
  selector:
    matchLabels:
      type: slow
---
apiVersion: v1
kind: Pod
metadata:
  name: test-pvc
spec:
  volumes:
  - name: mypvc
    persistentVolumeClaim:
      claimName: myclaim
  containers:
  - name: test
    image: alpine:3.5
    volumeMounts:
    - name: mypvc
      mountPath: /tmp/test
    command: ["sleep","1000"]
[root@ceph-mon2 ~]# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv0003   5Gi        RWO            Recycle          Available           slow                    11s
每个卷会处于以下阶段(Phase)之一:

Available(可用)-- 卷是一个空闲资源,尚未绑定到任何申领;
Bound(已绑定)-- 该卷已经绑定到某申领;
Released(已释放)-- 所绑定的申领已被删除,但是资源尚未被集群回收;
Failed(失败)-- 卷的自动回收操作失败。
命令行接口能够显示绑定到某 PV 卷的 PVC 对象。
ReadWriteOnce
卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
ReadOnlyMany
卷可以被多个节点以只读方式挂载。
ReadWriteMany
卷可以被多个节点以读写方式挂载。
ReadWriteOncePod
卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。
在命令行接口(CLI)中,访问模式也使用以下缩写形式:

RWO - ReadWriteOnce
ROX - ReadOnlyMany
RWX - ReadWriteMany
RWOP - ReadWriteOncePod
目前的回收策略有:

Retain -- 手动回收
Recycle -- 基本擦除 (rm -rf /thevolume/*)
Delete -- 诸如 AWS EBS、GCE PD、Azure Disk 或 OpenStack Cinder 卷这类关联存储资产也被删除
目前,仅 NFS 和 HostPath 支持回收(Recycle)。 AWS EBS、GCE PD、Azure Disk 和 Cinder 卷都支持删除(Delete)。
  • Create PV dynamically