如何将现有EBS卷部署到EKS PVC?



我在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/

相关内容

  • 没有找到相关文章

最新更新