松耦合的⽅式,pod与存储分离,三种⽅式:
    1、volume,需要知道后端存储的细节,对接难度⼤
    2、PV/PVC,管理员定义PV,PersistentVolume,⽤户通过PVC使⽤PersistentVolumeClaim
    3、storageclass,静态+动态,通过PVC声明使⽤的空间,⾃动创建PV和后端驱动的对接
    image.png

    PV and PVC
    image.png
    StorageClass
    image.png
    1.2 kubernetes存储对接
    1、volume定义
    apiVersion: v1
    kind: Pod
    metadata:
    name: volume-rbd-demo
    spec:
    volumes:
    - name: rbd-demo
    rbd:
    image: rbd.img
    monitors:
    - 10.254.100.101:6789
    - 10.254.100.102:6789
    - 10.254.100.103:6789
    pool: kubernetes
    fsType: ext4
    user: kubernetes
    secretRef:
    name: ceph-secret
    containers:
    - name: pod-with-rbd
    image: nginx:1.7.9
    imagePullPolicy: IfNotPresent
    ports:
    - name: www
    containerPort: 80
    protocol: TCP
    volumeMounts:
    - name: rbd-demo
    mountPath: /data

    2、 PV和PVC
    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: rbd-demo
    spec:
    accessModes:
    - ReadWriteOnce
    capacity:
    storage: 10G
    rbd:
    monitors:
    - 10.254.100.101:6789
    - 10.254.100.102:6789
    - 10.254.100.103:6789
    pool: kubernetes
    image: demo-1.img
    fsType: ext4
    user: kubernetes
    secretRef:
    name: ceph-secret
    persistentVolumeReclaimPolicy: Retain
    storageClassName: rbd

    Pod中引⽤PVC
    apiVersion: v1
    kind: Pod
    metadata:
    name: pod-demo
    spec:
    containers:
    - name: demo
    image: nginx:1.7.9
    imagePullPolicy: IfNotPresent
    ports:
    - name: www
    protocol: TCP
    containerPort: 80
    volumeMounts:
    - name: rbd
    mountPath: /data
    volumes:
    - name: rbd
    persistentVolumeClaim:
    claimName: pvc-demo

    3、StorageClass
    StorageClass存储定义
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    name: csi-rbd-sc
    provisioner: rbd.csi.ceph.com
    parameters:
    clusterID: 760da58c-0041-4525-a8ac-1118106312de
    pool: kubernetes
    csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
    csi.storage.k8s.io/provisioner-secret-namespace: default
    csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
    csi.storage.k8s.io/node-stage-secret-namespace: default
    imageFeatures: layering
    reclaimPolicy: Delete
    mountOptions:
    - discar

    ⽤户端直接使⽤,静态创建
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: raw-block-pvc
    spec:
    accessModes:
    - ReadWriteOnce
    volumeMode: Block
    resources:
    requests:
    storage: 1Gi
    storageClassName: csi-rbd-sc

    动态创建:
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    name: web
    spec:
    selector:
    matchLabels:
    app: nginx
    serviceName: “nginx”
    replicas: 3
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: www
    mountPath: /usr/share/nginx/html
    volumeClaimTemplates:
    - metadata:
    name: www
    spec:
    accessModes:
    - ReadWriteOnce
    storageClassName: “csi-rbd-sc”
    resources:
    requests:
    storage: 1Gi