快捷搜索: 王者荣耀 脱发

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的人都是在本地搭建一个单节点的集群进行练习使用,因此可以忽略这个问题。

经验分享 程序员 微信小程序 职场和发展