卷和存储


部署需要数据持久化的应用时,您需要创建永久性存储。持久存储允许您将应用程序数据存储在运行应用程序的Pod外部。即使应用程序的pod发生故障,这种存储方法也可以使您维护应用程序数据。

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

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

设置本地存储提供程序

K3S集成Rancher的Local Path Provisioner,这使您能够使用节点上的本地存储来开箱即用地创建持久卷声明。下面我们介绍一个简单的示例。有关更多信息,请参考local-path-provisioner的官方文档。

创建一个由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
1
2
3
4
5
6
7
8
9
10
11
12
  • 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

应用yaml:

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

确认已创建PV和PVC:

kubectl get pv
kubectl get pvc
1
2

每个状态应为Bound。

设置Longhorn

注意: 目前,Longhorn仅支持amd64。

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

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

应用longhorn.yaml以安装Longhorn,Longhorn将安装在longhorn-system命名空间中。

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

在创建PVC之前,我们将使用以下Yaml为Longhorn创建存储类:

kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/master/examples/storageclass.yaml
1

应用yaml创建PVC和pod:

kubectl create -f pvc.yaml
kubectl create -f pod.yaml
1
2
  • pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: longhorn-volv-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 2Gi
1
2
3
4
5
6
7
8
9
10
11
  • 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

确认已创建PV和PVC:

kubectl get pv
kubectl get pvc
1
2

每个状态应为Bound。