title: “卷和存储” description: 当部署一个需要保留数据的应用程序时,你需要创建持久存储。持久存储允许您从运行应用程序的 pod 外部存储应用程序数据。即使应用程序的 pod 发生故障,这种存储方式也可以使您维护应用程序数据。 keywords:

  • k3s中文文档
  • k3s 中文文档
  • k3s中文
  • k3s 中文
  • k3s
  • k3s教程
  • k3s中国
  • rancher
  • k3s 中文教程
  • 卷和存储

当部署一个需要保留数据的应用程序时,你需要创建持久存储。持久存储允许您从运行应用程序的 pod 外部存储应用程序数据。即使应用程序的 pod 发生故障,这种存储方式也可以使您维护应用程序数据。

持久卷(PV)是 Kubernetes 集群中的一块存储,而持久卷声明(PVC)是对存储的请求。关于 PV 和 PVC 的工作原理,请参阅有关存储的 Kubernetes 官方文档。

本页介绍了如何通过 local storage provider 或 Longhorn来设置持久存储。

设置 Local Storage Provider

K3s 自带 Rancher 的 Local Path Provisioner,这使得能够使用各自节点上的本地存储来开箱即用地创建持久卷声明。下面我们介绍一个简单的例子。有关更多信息,请参考此处的官方文档。

创建一个由 hostPath 支持的持久卷声明和一个使用它的 pod:

pvc.yaml

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: local-path-pvc
  5. namespace: default
  6. spec:
  7. accessModes:
  8. - ReadWriteOnce
  9. storageClassName: local-path
  10. resources:
  11. requests:
  12. storage: 2Gi

pod.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: volume-test
  5. namespace: default
  6. spec:
  7. containers:
  8. - name: volume-test
  9. image: nginx:stable-alpine
  10. imagePullPolicy: IfNotPresent
  11. volumeMounts:
  12. - name: volv
  13. mountPath: /data
  14. ports:
  15. - containerPort: 80
  16. volumes:
  17. - name: volv
  18. persistentVolumeClaim:
  19. claimName: local-path-pvc

应用 yaml:

  1. kubectl create -f pvc.yaml
  2. kubectl create -f pod.yaml

确认 PV 和 PVC 已创建:

  1. kubectl get pv
  2. kubectl get pvc

状态应该都为 Bound

设置 Longhorn

注意: 目前 Longhorn 只支持 amd64 和 arm64(实验性)。

K3s 支持 Longhorn. Longhorn 是 Kubernetes 的一个开源分布式块存储系统。

下面我们介绍一个简单的例子。有关更多信息,请参阅此处的官方文档。

应用 longhorn.yaml 来安装 Longhorn:

  1. kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml

Longhorn 将被安装在命名空间longhorn-system中。

应用 yaml 创建 PVC 和 pod:

  1. kubectl create -f pvc.yaml
  2. kubectl create -f pod.yaml

pvc.yaml

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: longhorn-volv-pvc
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. storageClassName: longhorn
  9. resources:
  10. requests:
  11. storage: 2Gi

pod.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: volume-test
  5. namespace: default
  6. spec:
  7. containers:
  8. - name: volume-test
  9. image: nginx:stable-alpine
  10. imagePullPolicy: IfNotPresent
  11. volumeMounts:
  12. - name: volv
  13. mountPath: /data
  14. ports:
  15. - containerPort: 80
  16. volumes:
  17. - name: volv
  18. persistentVolumeClaim:
  19. claimName: longhorn-volv-pvc

确认 PV 和 PVC 已创建:

  1. kubectl get pv
  2. kubectl get pvc

状态应该都为 Bound