使用 Persistent Volume Claim 时是否必须显式创建 Persistent Volume?
Do I have to explicitly create Persistent Volume when I am using Persistent Volume Claim?
我是 Kubernetes 的新手,我很难理解 Kubernetes 中持久存储背后的整个想法。
这就足够了吗,或者我必须创建持久卷,如果我只部署这两个对象而不创建 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
在 capacity(100Mi)
和 accessModes(ReadWriteOnce)
方面与 PVC 匹配的 PV 是 needed.If 你没有 PV 你得到错误 pod has unbound immediate PersistentVolumeClaims
。因此,您要么手动创建 PV(称为静态配置),要么依靠存储 class 和卷驱动程序自动创建(称为动态配置)。
PV 是卷的 kubernetes 表示。实际卷仍然需要 provisioned.If 你使用 dynamic volume provisioning 并且你的云提供商有卷驱动程序,驱动程序在内部自动配置,无需手动创建 PV。
在本地非云系统中,您可以使用 local path provisioner to use dynamic provisioning. Configure a default storage class 并且可以避免手动创建 PV。
I struggle to understand whole idea behind Persistent Storage in Kubernetes
想法是将应用需要的存储请求与物理存储分开,这样应用就可以移动到例如其他具有不同存储系统的云提供商 - 但不需要对应用程序进行任何更改。它还分离了“请求存储”和管理底层存储的责任,例如开发人员与运营人员。
So is this enough or I have to create Persistent Volume and what will happen if I deploy only these two object without creating PV?
这取决于您的环境。大多数环境通常有 Dynamic Volume Provisioning,例如大型云提供商现在也支持 Minikube。
使用动态卷配置时,开发人员只需创建 PersistentVolumeClaim
- 而无需创建 PersistentVolume
,而是动态配置。
您可以在 the doc 中看到它提到了一种配置持久卷的动态方式。
When none of the static PVs the administrator created match a user's
PersistentVolumeClaim, the cluster may try to dynamically provision a
volume specially for the PVC. This provisioning is based on
StorageClasses: the PVC must request a storage class and the
administrator must have created and configured that class for dynamic
provisioning to occur. Claims that request the class "" effectively
disable dynamic provisioning for themselves.
当我应用你的 pvc 时,它会创建一个 gp2 卷,因为这是我的默认存储 class。
$kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-logs Bound pvc-b95a9d0c-ef46-4ff0-a034-d2dde1ac1f96 1Gi RWO gp2 6s
您可以像这样查看您的默认存储 class
$kubectl get storageclass
NAME PROVISIONER AGE
gp2 (default) kubernetes.io/aws-ebs 355d
您还可以包含特定的存储空间 class。您可以阅读更多相关信息 here。
Users request dynamically provisioned storage by including a storage
class in their PersistentVolumeClaim
简而言之,您当前的 pvc 文件将使用您的默认存储 class 创建一个持久卷,然后您通过 Deployment 中的持久卷声明将该卷装载到您的 pod 中。
我是 Kubernetes 的新手,我很难理解 Kubernetes 中持久存储背后的整个想法。
这就足够了吗,或者我必须创建持久卷,如果我只部署这两个对象而不创建 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
在 capacity(100Mi)
和 accessModes(ReadWriteOnce)
方面与 PVC 匹配的 PV 是 needed.If 你没有 PV 你得到错误 pod has unbound immediate PersistentVolumeClaims
。因此,您要么手动创建 PV(称为静态配置),要么依靠存储 class 和卷驱动程序自动创建(称为动态配置)。
PV 是卷的 kubernetes 表示。实际卷仍然需要 provisioned.If 你使用 dynamic volume provisioning 并且你的云提供商有卷驱动程序,驱动程序在内部自动配置,无需手动创建 PV。
在本地非云系统中,您可以使用 local path provisioner to use dynamic provisioning. Configure a default storage class 并且可以避免手动创建 PV。
I struggle to understand whole idea behind Persistent Storage in Kubernetes
想法是将应用需要的存储请求与物理存储分开,这样应用就可以移动到例如其他具有不同存储系统的云提供商 - 但不需要对应用程序进行任何更改。它还分离了“请求存储”和管理底层存储的责任,例如开发人员与运营人员。
So is this enough or I have to create Persistent Volume and what will happen if I deploy only these two object without creating PV?
这取决于您的环境。大多数环境通常有 Dynamic Volume Provisioning,例如大型云提供商现在也支持 Minikube。
使用动态卷配置时,开发人员只需创建 PersistentVolumeClaim
- 而无需创建 PersistentVolume
,而是动态配置。
您可以在 the doc 中看到它提到了一种配置持久卷的动态方式。
When none of the static PVs the administrator created match a user's PersistentVolumeClaim, the cluster may try to dynamically provision a volume specially for the PVC. This provisioning is based on StorageClasses: the PVC must request a storage class and the administrator must have created and configured that class for dynamic provisioning to occur. Claims that request the class "" effectively disable dynamic provisioning for themselves.
当我应用你的 pvc 时,它会创建一个 gp2 卷,因为这是我的默认存储 class。
$kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-logs Bound pvc-b95a9d0c-ef46-4ff0-a034-d2dde1ac1f96 1Gi RWO gp2 6s
您可以像这样查看您的默认存储 class
$kubectl get storageclass
NAME PROVISIONER AGE
gp2 (default) kubernetes.io/aws-ebs 355d
您还可以包含特定的存储空间 class。您可以阅读更多相关信息 here。
Users request dynamically provisioned storage by including a storage class in their PersistentVolumeClaim
简而言之,您当前的 pvc 文件将使用您的默认存储 class 创建一个持久卷,然后您通过 Deployment 中的持久卷声明将该卷装载到您的 pod 中。