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项目控制台中文乱码
