跳至主要内容

卷和存储

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

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

本页介绍如何使用本地存储提供程序或Longhorn 设置持久存储。

K3s 存储有什么不同?

K3s 删除了一些可选的卷插件和所有内置(有时称为“树内”)云提供商。我们这样做是为了实现更小的二进制文件大小,并避免依赖第三方云或数据中心技术和服务,这些技术和服务在许多 K3s 使用案例中可能不可用。我们能够做到这一点,因为它们的移除既不影响核心 Kubernetes 功能也不影响一致性。

以下卷插件已从 K3s 中删除

  • cephfs
  • fc
  • flocker
  • git_repo
  • glusterfs
  • portworx
  • quobyte
  • rbd
  • storageos

这两个组件都有可以与 K3s 一起使用的树外替代方案:Kubernetes容器存储接口 (CSI)云提供商接口 (CPI)

Kubernetes维护者正在积极地将树内卷插件迁移到 CSI 驱动程序。有关此迁移的更多信息,请参阅此处

设置本地存储提供程序

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 的开源分布式块存储系统。

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

应用 longhorn.yaml 来安装 Longhorn

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.0/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

状态应为每个状态都绑定。