Kubernetes на AWS от Kops — динамическая инициализация gp2 не работает для кластера с одним узлом; ПВХ находится на рассмотрении;

Мои 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

Я запускаю кластер с 1 узлом, запущенный Kops:

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

Копская версия: 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? Я хотел бы, чтобы объем был динамически подготовлен.

Любая идея, как отладить, почему PVC/PV не может быть подготовлен от имени моего AWS?


person NeverEndingQueue    schedule 05.03.2019    source источник


Ответы (2)


Как видите, Volume: не привязано к вашему PVC, это означает, что автоматическая подготовка тома не удалась, и PV не создан, что должно быть создано с вашей конфигурацией Dynamic Provisioning. Вам нужно увидеть имя созданного PV в разделе Volume: команды описания. К сожалению, нет журналов или событий, показывающих проблему.

введите здесь описание изображения

Я бы посоветовал вам для устранения неполадок вручную создать класс хранилища с помощью gp2, чтобы увидеть, работает ли он с приведенным ниже yaml, а затем определить storageClassName в вашем файле yaml PVC, как показано ниже:

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

Опишите ПВХ:

kubectl describe pvc pvc-gp2-manual

введите здесь описание изображения

В случае неудачи я также предлагаю вам попробовать другой тип хранилища для ЭБС AWS.

person coolinuxoid    schedule 05.03.2019
comment
Спасибо. Я получаю missing required field "volumeID" in io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource, который пытаюсь решить. Похоже, что он ожидает, что я буду создавать том заранее, а не предоставлять его динамически. - person NeverEndingQueue; 06.03.2019

Проблема, похоже, связана с тем, что я использую только один главный узел. Когда я запускаю кластер, используя: kops create cluster --zones eu-west-1a ${NAME} --master-size t2.large, он запускает 1 мастер и 2 узла. Проблема не появляется.

Я не уверен, что является непосредственной основной причиной проблемы, поскольку ничто не мешает одному узлу иметь внешние тома EBS. Это может быть ошибка в самом kops, так как только один главный узел является скорее исключением, чем правилом.

person NeverEndingQueue    schedule 06.03.2019