一: PV、PVC概述
PersistentVolume(PV)是集群中已由管理员配置的一段网络存储。集群中的资源就像一个节点是一个集群资源。 PV是诸如卷之类的卷插件,但是具有独立于使用PV的任何单个pod的生命周期。 该API对象包含存储的实现细节,即NFS,iSCSI或云提供商特定的存储系统。
PersistentVolumeClaim(PVC)是用户存储的请求 。 可以请求特定的大小和访问模式。
虽然PersistentVolumeClaims允许用户使用抽象存储资源,但是常见的是,用户需要具有不同属性(如性能)的PersistentVolumes,用于不同的问题。 管理员需要能够提供多种不同于PersistentVolumes,而不仅仅是大小和访问模式,而不会使用户了解这些卷的实现细节。 对于这些需求,存在StorageClass资源。
StorageClass为集群提供了一种描述他们提供的存储的“类”的方法 。 不同的类可能映射到服务质量级别,或备份策略,或者由群集管理员确定的任意策略。 Kubernetes本身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“配置文件”
POD动态供给
动态供给主要是能够自动帮你创建pv,需要多大的空间就创建多大的pv。
如果是存储静态供给的话,会需要我们手动去创建pv。而动态供给主要的一个实现就是StorageClass存储对象,其实它就是声明你使用哪个存储,然后帮你去连接,再帮你去自动创建pv。
二: 使用RBD做为持久数据卷
配置storageclass |
# cat ceph-rbd-storageclass-1.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: dynamic-ceph-rbd provisioner: ceph.com/rbd parameters: monitors: 100.100.100.100:6789,100.100.100.101:6789,100.100.100.102:6789 adminId: admin adminSecretName: ceph-secret adminSecretNamespace: default pool: rbd userId: admin userSecretName: ceph-secret fsType: ext4 imageFormat: "2" imageFeatures: "layering"
#
|
使sc生效 | # kubectl apply -f ceph-rbd-storageclass-1.yaml storageclass.storage.k8s.io/dynamic-ceph-rbd created # # |
查看sc | # # kubectl get sc NAME PROVISIONER AGE dynamic-ceph-rbd ceph.com/rbd 18s managed-nfs-storage fuseim.pri/ifs 28d nginx.storageclass ceph.com/rbd 29d # |
整个测试过程
创建pvc测试 | # vim ceph-rbd-pvc-2.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ceph-rbd-claim spec: accessModes: - ReadWriteOnce storageClassName: dynamic-ceph-rbd resources: requests: storage: 10Gi
~ ~
# # kubectl apply -f ceph-rbd-pvc-2.yaml persistentvolumeclaim/ceph-rbd-claim created # #
|
查看 | # # kubectl get sc NAME PROVISIONER AGE dynamic-ceph-rbd ceph.com/rbd 18s # kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ceph-rbd-claim Bound pvc-cfd0d3b9-2e72-42e5-9990-452ab574c7e5 10240 RWO dynamic-ceph-rbd 14s
# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-cfd0d3b9-2e72-42e5-9990-452ab574c7e5 1536Mi RWO Delete Bound default/ceph-rbd-claim dynamic-ceph-rbd 31s
#
|
创建 nginx pod 挂载测试 | # # cat ceph-rbd-deployment-3.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-rbd spec: selector: matchLabels: app: nginx-rbd replicas: 2 template: metadata: labels: app: nginx-rbd spec: containers: - name: nginx-rbd image: nginx ports: - containerPort: 80 volumeMounts: - mountPath: "/usr/share/nginx/html" name: ceph-rbd volumes: - name: ceph-rbd persistentVolumeClaim: claimName: ceph-rbd-claim
#
# kubectl apply -f ceph-rbd-deployment-3.yaml deployment.apps/nginx-rbd created # # #
|
查看 | # # kubectl get pod |grep nginx-rbd nginx-rbd-6594b46c9f-2sqlk 0/1 ContainerCreating 0 28s nginx-rbd-6594b46c9f-jq5zh 0/1 ContainerCreating 0 28s #
# # kubectl get pod |grep nginx-rbd nginx-rbd-6594b46c9f-2sqlk 0/1 ContainerCreating 0 83s nginx-rbd-6594b46c9f-jq5zh 1/1 Running 0 83s #
# # kubectl get pod -o wide|grep nginx-rbd nginx-rbd-6594b46c9f-2sqlk 0/1 ContainerCreating 0 102s <none> node-18 <none> <none> nginx-rbd-6594b46c9f-jq5zh 1/1 Running 0 102s 10.244.1.45 node-17 <none> <none> # #
|
修改文件内容 | # kubectl exec -it nginx-rbd-6594b46c9f-jq5zh sh # # df -Th Filesystem Type Size Used Avail Use% Mounted on overlay overlay 49G 23G 27G 46% / tmpfs tmpfs 64M 0 64M 0% /dev tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 49G 23G 27G 46% /etc/hosts shm tmpfs 64M 0 64M 0% /dev/shm /dev/rbd1 ext4 1.5G 4.5M 1.5G 1% /usr/share/nginx/html tmpfs tmpfs 3.9G 12K 3.9G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs tmpfs 3.9G 0 3.9G 0% /proc/acpi tmpfs tmpfs 3.9G 0 3.9G 0% /proc/scsi tmpfs tmpfs 3.9G 0 3.9G 0% /sys/firmware #
# docker cp cpts_1378_cgb 72502155fb47:/usr/share/nginx/html/
|
配置svc | # cat ceph-rbd-service-4.yaml apiVersion: v1 kind: Service metadata: name: ceph-rbd-service spec: type: NodePort ports: - protocol: TCP port: 80 targetPort: 80 selector: app: nginx-rbd
#
# kubectl apply -f ceph-rbd-service-4.yaml service/ceph-rbd-service created # # kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ceph-rbd-service NodePort 10.0.0.168 <none> 80:31203/TCP 6s
# |
Svc IP 访问测试 |
|
配置 ingress 解析 | # # cat ceph-rbd-ingress-5.yaml apiVersion: v1 kind: List items: - apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ceph-rbd-ingress namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: test.test.cn http: paths: - path: / backend: serviceName: ceph-rbd-service servicePort: 80
# kubectl apply -f ceph-rbd-ingress-5.yaml ingress.extensions/ceph-rbd-ingress created #
# kubectl get ingress NAME HOSTS ADDRESS PORTS AGE ceph-rbd-ingress test.test.cn 80 5s
# #
|
域名访问测试 |
|