我在AWS中有一个现有的ebs卷,上面有数据。我需要做一个聚氯乙烯才能在我的舱里使用。下面的指南:https://medium.com/pablo-perez/launching-a-pod-with-an-existing-ebs-volume-mounted-in-k8s-7b5506fa7fa3
persistentvolume.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: jenkins-volume
labels:
type: amazonEBS
spec:
capacity:
storage: 60Gi
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
volumeID: vol-011111111x
fsType: ext4
[$$]>kubectl describe pv
Name: jenkins-volume
Labels: type=amazonEBS
Annotations: <none>
Finalizers: [kubernetes.io/pv-protection]
StorageClass:
Status: Available
Claim:
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 60Gi
Node Affinity: <none>
Message:
Source:
Type: AWSElasticBlockStore (a Persistent Disk resource in AWS)
VolumeID: vol-011111111x
FSType: ext4
Partition: 0
ReadOnly: false
Events: <none>
persistentVolumeClaim.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jenkins-pvc-shared4
namespace: jenkins
spec:
storageClassName: gp2
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 60Gi
[$$]>kubectl describe pvc jenkins-pvc-shared4 -n jenkins
Name: jenkins-pvc-shared4
Namespace: jenkins
StorageClass: gp2
Status: Pending
Volume:
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Mounted By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal WaitForFirstConsumer 12s (x2 over 21s) persistentvolume-controller waiting for first consumer to be created before binding
[$$]>kubectl get pvc jenkins-pvc-shared4 -n jenkins
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jenkins-pvc-shared4 Pending gp2 36s
状态为pending(等待要附加的消费者)-但它应该已经被供应了。
等待消费者消息提示您的StorageClass将其volumeBindingMode
设置为waitForFirstConsumer
。
此设置的默认值是Immediate
:一旦您注册了一个PVC,您的卷提供程序就会提供一个新的卷。
另一方面,waitForFirstConsumer
将在配置卷之前等待Pod请求使用所述PVC。
你在这里看到的消息和行为听起来很正常。您可以创建一个部署挂载该卷,以确认供应工作按预期进行。
正确的配置应该是:
[$$]>cat persistentvolume2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-name
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
volumeID: aws://eu-west-2a/vol-123456-ID
capacity:
storage: 60Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: gp2
[$$]>cat persistentVolumeClaim2.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: new-namespace
labels:
app.kubernetes.io/name: <app-name>
name: pvc-name
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 60Gi
storageClassName: gp2
volumeName: pv-name
try fstyle "xfs"而不是ext4
对于PV来说,StorageClass是空的。根据您的指南,您创建了storageClass"标准",所以添加到PersistentVolume规范
storageClassName: standard
并将其设置在persistentvolumecclaim中,而不是gp2
我第一次试着回答这个问题时很匆忙,因为我在我的prod环境中解决了同样的问题,似乎我违反了一些关于如何在这里发帖的规则(收到一些"投诉");和坏名声(叹气))。
awsElasticBlockStore本可以解决这个问题,但从k8s v1.17开始就已弃用了。现在最好使用CSI配置。
在我的例子中,我需要将卷移动到另一个AZ。我从之前的快照部署卷,一旦可用,我就记录了它的VolumeID。
对于PersistenVolume我使用了以下配置:
apiVersion: v1
kind: PersistentVolume
metadata:
name: <PV name>
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce <As I'm using EBS>
storageClassName: <yout StorageClass if you have one>
persistentVolumeReclaimPolicy: Retain
csi:
driver: <your csi driver>(in my case ebs.csi.aws.com)
volumeHandle: <VolumeID>
对于persistenvolumecclaim我使用了正常的方法,没有添加任何新内容:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <PVC Name>
spec:
accessModes:
- ReadWriteOnce <Rememebr I'm using EBS>
resources:
requests:
storage: 5Gi
我不得不删除我集群以前的PV和PVC,并重新应用它们。一旦部署了PVC并且POD正在运行,PV将状态更改为绑定。
我遵循AWS官方博客上的建议和示例:https://aws.amazon.com/blogs/storage/persistent-storage-for-kubernetes/