使用持久卷声明时,是否必须显式创建持久卷



我是Kubernetes的新手,我很难理解Kubernete中持久存储背后的想法。

那么,这就足够了吗?或者我必须创建持久卷?如果我只部署这两个对象而不创建PV,会发生什么?

存储应该在本地机器上。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
name: nginx-logs
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app-web
name: app-web
spec:
selector:
matchLabels:
app: app-web
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: app-web
spec:
containers:
image: nginx:1.14.2
imagePullPolicy: Always
name: app-web
volumeMounts:
- mountPath: /var/log/nginx
name: nginx-logs
restartPolicy: Always
volumes:
- name: nginx-logs
persistentVolumeClaim:
claimName: nginx-logs

我很难理解Kubernetes 中持久存储背后的整个想法

这个想法是将应用程序需要的存储请求和物理存储分离开来,这样应用程序就可以移动到其他具有不同存储系统的云提供商,但不需要对应用程序进行任何更改。它还将";请求存储";以及管理底层存储,例如开发者与运营。

那么这就足够了吗?或者我必须创建持久卷?如果我只部署这两个对象而不创建PV,会发生什么?

这取决于您的环境。大多数环境通常都具有动态卷资源调配功能,例如大型云提供商,现在Minikube也支持此功能。

当使用动态卷配置时,开发人员只需要创建一个PersistentVolumeClaim,而不需要创建PersistentVolume,而是动态配置。

需要一个在capacity(100Mi)accessModes(ReadWriteOnce)方面与PVC匹配的PV。如果您没有PV,则会出现错误pod has unbound immediate PersistentVolumeClaims。因此,要么手动创建PV(称为静态配置(,要么依靠存储类和卷驱动程序自动创建PV(也称为动态配置(。

PV是体积的kubernetes表示。实际卷仍需要进行配置。如果您使用动态卷供应,并且您的云提供商有卷驱动程序,则供应由驱动程序内部自动进行,而无需手动创建PV。

在本地非云系统中,您可以使用本地路径设置器来使用动态设置。配置默认存储类,就可以避免手动创建PV。

您可以在文档中看到,它提到了一种动态方式来配置持久卷。

当管理员创建的静态PV都与用户的不匹配时PersistentVolumeClaim,集群可能会尝试动态设置PVC专用体积。此资源调配基于StorageClasses:PVC必须请求一个存储类,并且管理员必须已创建并配置该类以进行动态进行配置。请求类"有效地禁用自身的动态配置。

当我应用你的pvc时,它会创建一个gp2卷,因为这是我的默认存储类。

$kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nginx-logs   Bound    pvc-b95a9d0c-ef46-4ff0-a034-d2dde1ac1f96   1Gi        RWO            gp2            6s

你可以看到你的默认存储类,比如这个

$kubectl get storageclass
NAME            PROVISIONER                                           AGE
gp2 (default)   kubernetes.io/aws-ebs                                 355d

您还可以包括特定的存储类。你可以在这里阅读更多。

用户通过包含存储来请求动态配置的存储类的PersistentVolumeClaim

简而言之,您当前的pvc文件将使用默认存储类来创建一个持久卷,然后您将通过部署中的持久卷声明将该卷装载到您的pod中。

最新更新