REASON AGE local-pv-27c0f084 368Gi RWO Delete Available local-storage 8s local-pv-3796b049 368Gi RWO Delete Available local-storage 7s local-pv-3ddecaea 368Gi RWO Delete Available local-storage 3m45s local-vol-local-test-1 Bound local-pv-3ddecaea 368Gi RWO local-storage 3m40s local-vol-local-test-2 Bound local-pv-3796b049 368Gi RWO local-storage
1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage 在上面的 YAML 文件中,我们创建了一个名为 zookeeper-data-0 的 PVC,指定了存储大小为 1Gi,访问模式为 ReadWriteOnce,存储类型为 local-storage。 - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage
workingDir: /opt restartPolicy: OnFailure volumes: - name: local-storage workingDir: /opt restartPolicy: OnFailure volumes: - name: local-storage workingDir: /opt restartPolicy: OnFailure volumes: - name: local-storage ports: - containerPort: 80 volumeMounts: - mountPath: /mnt name: local-storage serviceAccount: default-editor volumes: - name: local-storage persistentVolumeClaim
1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage minio-pv的PersistentVolume,容量为1GB,访问模式为ReadWriteOnce(即每次只能被一个Pod读写),回收策略为Retain(即删除后不立即删除,而是保留数据),存储类为local-storage accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage 在这个YAML文件中,定义了一个名为minio-pvc的PersistentVolumeClaim,访问模式为ReadWriteOnce,请求1GB的存储空间,存储类为local-storage。
- ReadWriteOnce # 卷可以被一个节点以读写方式挂载 persistentVolumeReclaimPolicy: Delete storageClassName: local-storage PersistentVolumeClaimmetadata: name: mongodataspec: accessModes: ["ReadWriteOnce"] storageClassName: "local-storage /sc.yaml storageclass.storage.k8s.io/local-storage created[root@VM-0-14-centos storage]# kubectl get AGEmongodata 2Gi RWO Delete Available local-storage ACCESS MODES STORAGECLASS AGEmongodata Pending local-storage
3)创建挂载卷 kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage provisioner: PersistentVolume metadata: name: jenkins-pv-volume labels: type: local spec: storageClassName: local-storage PersistentVolumeClaim metadata: name: jenkins-pv-claim namespace: devops spec: storageClassName: local-storage #######PersistentVolume######### storageClassName: local-storage:指定存储类的名字,这里的存储类为“local-storage”。
Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: local-storage /jenkins-pv-local 10Gi RWO Delete Bound default/jenkins-pvc-local local-storage AGE persistentvolumeclaim/jenkins-pvc-local Bound jenkins-pv-local 10Gi RWO local-storage
网络需要支持具备固定 IP 的能力, 这里选用 Calico 数据持久化:dataVolume、hostDisk、PVC ,这里选用 dataVolume,可以动态创建 PVC, 并将镜像填充进去 SC 选用 local-storage sc、pv、pvc # local-sc-and-pv.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage dataVolumeTemplates: - metadata: name: centos-dv spec: storage: storageClassName: local-storage
Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Delete storageClassName: local-storage 我们在pv-local中声明了后端存储类型为local挂载到目录 /data/volumes/ , 存储卷类名为local-storage,1Gb容量,访问模式ReadWriteMany -- 卷可以被多个个节点以读写方式挂载 STORAGECLASS REASON AGE pv-local 5Gi RWX Delete Available local-storage pvc.yml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app1-pvc spec: storageClassName: local-storage CAPACITY ACCESS MODES STORAGECLASS AGE app-pvc Bound pv-local 5Gi RWX local-storage
Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 80Gi storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: local-storage
volumeMode: Filesystem resources: requests: storage: 50Mi storageClassName: local-storage accessModes: ["ReadWriteOnce"] persistentVolumeReclaimPolicy: Delete storageClassName: local-storage accessModes: ["ReadWriteOnce"] persistentVolumeReclaimPolicy: Delete storageClassName: local-storage
Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage In values: - node1 关于local-storage-pv.yaml有以下几点需要注意: a. spec.storageClassName等于local-storage ,后面的PVC中也要指定storageClassName等于local-storage; b. spec.nodeAffinity是必填参数,用于建立Local PV和节点的关系,spec.nodeAffinity.required
Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage In values: - node1 关于local-storage-pv.yaml有以下几点需要注意: a. spec.storageClassName等于local-storage ,后面的PVC中也要指定storageClassName等于local-storage; b. spec.nodeAffinity是必填参数,用于建立Local PV和节点的关系,spec.nodeAffinity.required
使用volumeBindingMode: WaitForFirstConsumer的local-storage StorageClass来实现PVC的延迟绑定,使得PV Controller并不会立刻为 Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage - key: kubernetes.io/hostname operator: In values: - example-node 对应的local-storage storageClass定义如下: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage provisioner
name: loki-config optional: false name: vol1 - hostPath: path: /data/local-storage name: promtail-config name: promtail-config - hostPath: path: /data/local-storage - 0 terminationGracePeriodSeconds: 30 volumes: - hostPath: path: /data/local-storage
Persistent Volume 里一个非常重要的特性,即:延迟绑定 kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage StorageClass 02-storageclass.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage
数据做持久化,所以也需要创建一个对应的 PVC 资源对象: # apiVersion: storage.k8s.io/v1 # kind: StorageClass # metadata: # name: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: local-storage grafana-data spec: accessModes: - ReadWriteOnce capacity: storage: 1Gi storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: local-storage
默认的数据文件使用的是 emptydir 方式进行的持久化, 我们改为 本地存储 kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage prometheus spec: accessModes: - ReadWriteOnce capacity: storage: 20Gi storageClassName: local-storage prometheus-prometheus.yaml在文件最后新增配置 retention: 10d # 监控数据保存的时间为 10 天 storage: # 存储配置, 使用 local-storage 的 storageClass volumeClaimTemplate: spec: storageClassName: local-storage selector
使用 OpenEBS-LVM 替换 local-storage OpenEBS-LVM 对比 local-storage,主要新增了容量限额、动态分配PV、resize 功能,本文不做过多介绍,后面会单独讲
accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: local-storage ACCESS MODES STORAGECLASS AGE pvc-local Bound pv-local 5Gi RWO local-storage 现在我们来创建这个 StorageClass 资源对象: $ kubectl apply -f local-storageclass.yaml storageclass.storage.k8s.io/local-storage ACCESS MODES STORAGECLASS AGE pvc-local Pending local-storage ACCESS MODES STORAGECLASS AGE pvc-local Bound pv-local 5Gi RWO local-storage