K8S 持久化之动态PV (local)
在使用k8s时,总是会使用pv/pvc,但是每次创建使用pvc都需要去创建一个pv,这样的步骤显得比较繁琐,因此就查询了一下,能不能动态创建,在kubernetes-sigs 中找到一个对于nfs存储创建动态pv的项目,
但是通过nfs配置动态pv,需要部署一个nfs的服务。到这里也算解决了问题
但是,平时我使用的环境会经常存在刷机,导致nfs存储不可以,又需要重新部署,每次都需要搞一通,很是费事。
所以我就借鉴 nfs 的动态 pv 直接写了一个 本地动态pv
项目地址:
介绍
-
该项目用于基于本地持久化,动态创建pv 项目参考 实现 只适用于 学习 kubernetes时使用 只用于单节点kubernetes环境
快速使用
git clone https://github.com/fengxidi/local-subdir-external-provisioner.git cd local-subdir-external-provisioner/ kubectl apply -f deploy/local-subdir-external-provisioner.yaml
测试
# 创建一个StorageClass kubectl apply -f samples/StorageClass.yaml # 创建pvc,创建pvc后会自动创建一个pv进行绑定 kubectl apply -f samples/test-claim.yaml
local-subdir-external-provisioner.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: local-client-provisioner labels: app: local-client-provisioner # replace with namespace where provisioner is deployed namespace: default spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: local-client-provisioner template: metadata: labels: app: local-client-provisioner spec: serviceAccountName: local-client-provisioner containers: - name: local-client-provisioner image: 1331990870/local-subdir-external-provisioner:v0.1 imagePullPolicy: IfNotPresent volumeMounts: - name: local-client-root mountPath: /persistentvolumes env: - name: ENABLE_LEADER_ELECTION value: "false" - name: PROVISIONER_NAME value: k8s-sigs.io/local-subdir-external-provisioner - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: LOCAL_PATH value: /data/kubernetes volumes: - name: local-client-root hostPath: path: /data/kubernetes
StorageClass.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storageclass provisioner: k8s-sigs.io/local-subdir-external-provisioner # or choose another name, must match deployments env PROVISIONER_NAME parameters: archiveOnDelete: "false"
注
本地动态pv的问题: 无法支持集群使用,本地pv与node绑定
然儿通常来说,很多学习使用kubernetes的人都是在本地搭建一个单节点的集群进行练习使用,因此可以忽略这个问题。
上一篇:
IDEA上Java项目控制台中文乱码