【问题标题】:Kubernetes on AWS by Kops - dynamic provisioning gp2 fails for single node cluster; PVC is pending;Kops 在 AWS 上的 Kubernetes - 单节点集群的动态配置 gp2 失败; PVC 待定;
【发布时间】:2019-03-05 12:18:35
【问题描述】:

我的 PVC 一直处于 Pending 状态。

kubectl describe pvc project-s3-pvc 给出:

Name:          project-s3-pvc
Namespace:     default
StorageClass:  gp2
Status:        Pending
Volume:        
Labels:        <none>
Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                 {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"project-s3-pvc","namespace":"default"},"spec":{"ac...
               volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/aws-ebs
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
Events:        <none>
Mounted By:    project-s3-86ccd56868-skvv5
✔ /data/project [kubernetes-aws L|✚ 10⚑ 66

kubectl get storageclass 给出:

NAME            PROVISIONER             AGE
default         kubernetes.io/aws-ebs   1h
gp2 (default)   kubernetes.io/aws-ebs   1h

我正在运行由 Kops 启动的 1 个节点集群:

kops create cluster --node-count 0 --zones eu-west-1a ${NAME} --master-size t2.large

# Change size from 2 to 0, since above node-count does seem to be ignored
kops edit ig --name=${NAME} nodes

kops edit cluster ${NAME}

# Add this to cluster specification
iam:
  allowContainerRegistry: true
  legacy: false

kops update cluster ${NAME} --yes

kubectl taint nodes --all node-role.kubernetes.io/master-node

然后我添加 PVC,例如:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: bomcheck-s3-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Kops 版本:Version 1.11.0 (git-2c2042465)

编辑: 当我尝试手动创建 PV 时:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-manual
spec:
  accessModes:
    - ReadWriteOnce
  awsElasticBlockStore:
    fsType: ext4        
  persistentVolumeReclaimPolicy: Delete
  storageClassName: gp2
  capacity:
    storage: 30Gi

我收到了:ValidationError(PersistentVolume.spec.awsElasticBlockStore): missing required field "volumeID" in io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource;

这是否意味着我需要在 AWS 中手动创建卷?我希望通过动态配置来增加音量。

知道如何调试为什么不能代表我的 AWS 预置 PVC/PV?

【问题讨论】:

    标签: kubernetes kops kubernetes-pvc


    【解决方案1】:

    如您所见,没有Volume: 绑定到您的 PVC,这意味着自动卷配置失败并且未创建 PV,应该使用您的动态配置配置创建 PV。您需要在 describe 命令的 Volume: 部分查看创建的 PV 名称。 很遗憾,没有显示问题的日志或事件。

    我建议您使用 gp2 手动创建存储类以查看它是否适用于以下 yaml 然后在您的 PVC yaml 文件中定义 storageClassName 进行故障排除,如下所示:

    storageclass-manual-gp2.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: gp2-manual
    parameters:
      type: gp2
    provisioner: kubernetes.io/aws-ebs
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    

    申请:

    kubectl apply -f storageclass-manual-gp2.yaml
    

    pv-manual.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-manual
    spec:
      accessModes:
      - ReadWriteOnce
      awsElasticBlockStore:
        fsType: ext4
      capacity:
        storage: 30Gi
      persistentVolumeReclaimPolicy: Delete
      storageClassName: gp2-manual #your new storageclass name
    

    申请:

    kubectl apply -f pv-manual.yaml
    

    描述 PVC:

    kubectl describe pvc pvc-gp2-manual
    

    如果没有成功,我也建议你尝试不同的storage type for AWS EBS

    【讨论】:

    • 谢谢。我得到了我正在尝试解决的missing required field "volumeID" in io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource。它看起来确实希望我提前创建卷而不是动态配置它。
    【解决方案2】:

    问题似乎与我只运行一个主节点这一事实有关。 当我使用:kops create cluster --zones eu-west-1a ${NAME} --master-size t2.large 启动集群时,它确实启动了 1 个主节点和 2 个节点。问题没有出现。

    我不确定问题的根本原因是什么,因为没有任何东西可以阻止一个节点拥有外部 EBS 卷。这可能是kops 本身的错误,因为只有一个主节点是例外而不是规则。

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2019-12-10
      • 2023-01-30
      • 2017-12-10
      • 2019-10-19
      • 2020-08-01
      • 2018-10-31
      • 2021-02-22
      • 2020-01-19
      相关资源
      最近更新 更多