我是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
答案 0 :(得分:2)
需要一个与PVC相匹配的PV,capacity(100Mi)
和accessModes(ReadWriteOnce)
。如果没有PV,则会出现错误pod has unbound immediate PersistentVolumeClaims
。因此,您可以手动创建PV(称为静态配置),也可以依靠存储类和卷驱动程序自动创建PV(称为动态配置)。
PV是容量的kubernetes表示。仍然需要供应实际的卷。如果您使用dynamic volume provisioning并且您的云提供商具有卷驱动程序,则该驱动程序将在内部自动进行配置,而无需手动创建PV。
在本地非云系统中,您可以使用local path provisioner来使用动态配置。配置默认的storage class,可以避免手动创建PV。
答案 1 :(得分:2)
我很难理解Kubernetes中持久存储背后的整个想法
这个想法是将应用所需的存储请求与物理存储区分开-这样就可以将应用移至其他具有不同存储系统的云提供商-无需在应用程序中进行任何更改。它还将“请求存储”和管理基础存储(例如,存储)的责任分开。开发人员与运营。
这足够了吗?还是我必须创建持久卷,如果仅部署这两个对象而不创建PV会发生什么?
这取决于您的环境。大多数环境通常具有Dynamic Volume Provisioning,例如大型云提供商,现在Minikube也对此提供支持。
使用动态卷配置时,开发人员只需创建PersistentVolumeClaim
-无需创建PersistentVolume
,而是动态创建它。
答案 2 :(得分:2)
您可以在the doc中看到它提到了一种动态配置永久卷的方式。
当管理员创建的所有静态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
您还可以包括特定的存储类。您可以了解有关here的更多信息。
用户通过包含存储来请求动态预配置存储 他们的PersistentVolumeClaim中的类
简而言之,您当前的pvc文件将使用默认的存储类创建一个持久卷,然后通过部署中的“持久卷声明”将该卷安装到Pod中。