本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

卷和存储

当部署需要保留数据的应用程序时,您需要创建持久化存储。持久化存储允许您将应用程序数据存储在运行应用程序的 Pod 之外。这种存储实践使您能够维护应用程序数据,即使应用程序的 Pod 失败。

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

K3s 作为符合标准的 Kubernetes 发行版,使用 容器存储接口(CSI)云提供商接口(CPI) 来管理持久化存储。

本页面介绍如何通过本地存储提供商或 Longhorn. 设置持久化存储。

设置本地存储提供商

K3s 附带 Rancher 的本地路径提供程序,这使得能够使用相应节点上的本地存储开箱即用地创建持久卷声明。下面我们介绍一个简单的示例。有关更多信息,请参考官方文档 这里

创建一个以 HostPath 为基础的持久卷声明和一个使用它的 Pod:

pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-path-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 2Gi

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: volv
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: volv
    persistentVolumeClaim:
      claimName: local-path-pvc

应用 yaml:

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

确认 PV 和 PVC 已创建:

kubectl get pv
kubectl get pvc

每个的状态应为已绑定。

设置 Longhorn

Longhorn 不支持 ARM32。

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

下面我们介绍一个简单的示例。有关详细信息,请参考https://documentation.suse.com/cloudnative/storage/1.8/en/longhorn-documentation.html[官方文档]。

应用 longhorn.yaml 来安装 Longhorn:

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.8.1/deploy/longhorn.yaml

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

创建一个持久卷声明和一个 Pod 来使用它:

pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: longhorn-volv-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 2Gi

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: volv
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: volv
    persistentVolumeClaim:
      claimName: longhorn-volv-pvc

应用 yaml 来创建 PVC 和 Pod:

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

确认 PV 和 PVC 已创建:

kubectl get pv
kubectl get pvc

每个的状态应为已绑定。