一、依然简介
Kubernetes使用Persistent Volume和Persistent Volume Claim两种API资源来管理存储。
PersistentVolume(简称PV):由管理员设置的存储,它是集群的一部分。就像节点(Node)是集群中的资源一样,PV也是集群中的资源。它包含存储类型,存储大小和访问模式。它的生命周期独立于Pod,例如当使用它的Pod销毁时对PV没有影响。
PersistentVolumeClaim(简称PVC): 是用户存储的请求。它和Pod类似。Pod消耗Node资源,PVC消耗PV资源。Pod可以请求特定级别的资源(CPU和MEM)。PVC可以请求特定大小和访问模式的PV。
可以通过两种方式配置PV:静态或动态。
静态PV:集群管理员创建许多PV,它们包含可供集群用户使用的实际存储的详细信息。
动态PV:当管理员创建的静态PV都不匹配用户创建的PersistentVolumeClaim时,集群会为PVC动态的配置卷。此配置基于StorageClasses:PVC必须请求存储类(storageclasses),并且管理员必须已创建并配置该类,以便进行动态创建。
二、关于PersistentVolume的访问方式
ReadWriteOnce- 卷以读写方式挂载到单个节点
ReadOnlyMany- 卷以只读方式挂载到多个节点
ReadWriteMany- 卷以读写方式挂载到多个节点
在CLI中,访问模式缩写为:RWO - ReadWriteOnce
ROX - ReadOnlyMany
RWX - ReadWriteMany
重要:卷只能一次使用一种访问模式安装,即使它支持很多。
三、关于回收策略Retain- 手动回收
Recycle- 基本擦洗(rm -rf /thevolume/*)
Delete - 关联的存储资产(如AWS EBS,GCE PD,Azure磁盘或OpenStack Cinder卷)将被删除。
目前,只有NFS和HostPath支持回收。AWS EBS,GCE PD,Azure磁盘和Cinder卷支持删除。
四、关于PersistentVolume(PV)状态Available(可用状态)- 一块空闲资源还没有被任何声明绑定
Bound(绑定状态) - 声明分配到PVC进行绑定,PV进入绑定状态
Released(释放状态) - PVC被删除,PV进入释放状态,等待回收处理
Failed(失败状态) - PV执行自动清理回收策略失败
五、关于PersistentVolumeClaims(PVC)状态Pending(等待状态)- 等待绑定PV
Bound(绑定状态)- PV已绑定PVC
六、在所有k8s节点上安装ceph-common
七、配置静态PV
1.在默认的RBD pool中创建一个1G的image(ceph集群)# ceph osd pool create rbd 128
pool 'rbd' created
# ceph osd lspools
# rbd create ceph-image -s 1G --image-feature layering ##创建1G的镜像并指定layering特性
# rbd ls
ceph-image
# ceph osd pool application enable rbd ceph-image ##进行关联
enabled application 'ceph-image' on pool 'rbd'
# rbd info ceph-image
rbd image 'ceph-image':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
id: 13032ae8944a
block_name_prefix: rbd_data.13032ae8944a
format: 2
features: layering
op_features:
flags:
create_timestamp: Sun Jul 29 13:00:36 2018
2.配置ceph secret(ceph+kubernetes)# ceph auth get-key client.admin | base64 ##获取client.admin的keyring值,并用base64编码(ceph集群)
QVFDOUgxdGJIalc4SWhBQTlCOXRNUCs5RUV3N3hiTlE4NTdLVlE9PQ==
# vim ceph-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: ceph-secret
type: kubernetes.io/rbd
data:
key: QVFDOUgxdGJIalc4SWhBQTlCOXRNUCs5RUV3N3hiTlE4NTdLVlE9PQ==
# kubectl create -f ceph-secret.yaml
secret/ceph-secret created
# kubectl get secret ceph-secret
NAME TYPE DATA AGE
ceph-secret kubernetes.io/rbd 1 3s
3.创建PV(kubernetes)# vim ceph-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
storageClassName: "rbd"
rbd:
monitors:
- 192.168.100.116:6789
- 192.168.100.117:6789
- 192.168.100.118:6789
pool: rbd
image: ceph-image
user: admin
secretRef:
name: ceph-secret
fsType: xfs
readOnly: false
persistentVolumeReclaimPolicy: Recycle
# kubectl create -f ceph-pv.yaml
persistentvolume/ceph-pv created
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY
ceph-pv 1Gi RWO Recycle
STATUS CLAIM STORAGECLASS REASON AGE
Available rbd 1m
4.创建PVC(kubernet