单机k8s集群——本地存储(local)StorageClass

在k8s集群部署应用时,基本都会用到pvc来挂载持久卷,但是我们现在是单节点的k8s,NFS的方法就不太适用,故我们采用创建本地存储(local)StorageClass,手动创建pv来进行匹配

1.现在k8s节点上创建存储文件

mkdir -p /mnt/data
chmod 777 /mnt/data

2.StorageClass
vim local-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner  # 本地存储无法动态分配,需手动管理 PV
volumeBindingMode: WaitForFirstConsumer  # 延迟绑定,直到 Pod 调度

kubectl apply -f local-storageclass.yaml
kubectl get sc
微信截图_20250711140627

现在就可以创建一个pv来绑定该StorageClass了

3.PV

vim local-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv
spec:
  capacity:
    storage: 10Gi  # 存储大小
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce  # 单节点读写
  persistentVolumeReclaimPolicy: Retain  # 删除 PVC 后保留数据
  storageClassName: local-storage  # 关联 StorageClass
  local:
    path: /mnt/data  # 节点上的实际路径
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - master  # 替换为你的节点名称

kubectl apply -f local-pv.yaml
kubectl get pv
微信截图_20250711141430

4.PVC
vim local-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: local-storage  # 使用 Local StorageClass

kubectl apply -f local-pvc.yaml
kubectl get pvc

状态显示为bound即pvc绑定成功,但是我们这里输出为pending,哪里出错了吗?

其实不是。是因为我们上面在创建storageclass时,选用的策略是WaitForFirstConsumer,当有pod调用时,才回来绑定pvc,我们先往下走创建测试pod,再回来查看pvc

微信截图_20250711141748

5.创建 Pod 挂载 PVC
vim test-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: nginx
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:alpine
    volumeMounts:
    - name: local-storage
      mountPath: /usr/share/nginx/html
  volumes:
  - name: local-storage
    persistentVolumeClaim:
      claimName: local-pvc

kubectl apply -f test-pod.yaml
kubectl get pods

微信截图_20250711143701

这是我们再查看pvc,它已经从pending状态变为bound状态
微信截图_20250711142346

6.验证数据持久化

kubectl exec -it test-pod -- sh
echo "Hello, Local Storage!" > /usr/share/nginx/html/test.txt
exit
cat /mnt/data/test.txt

输出Hello,Local Storage!说明部署正确
微信截图_20250711144311

希望这篇博客能对你提供些许帮助,如果你有任何的问题和建议,欢迎在评论区相互交流。

我们下期再见!

posted @ 2025-07-11 14:44  努力成为OM大师  阅读(246)  评论(0)    收藏  举报