1

У меня есть кубернетес, к которому я прикрепляю постоянный том GCE, используя требование объема сохранения. (Для еще более плохой проблемы без претензий по объему см.: Mounting a gcePersistentDisk kubernetes volume is very slow)Почему громкость GCE в корпусе kubernetes вызывает задержку?

Когда нет прилагаемого тома, стручок запускается через мгновение (не более 2 секунд). Но когда у подставки есть постоянная установка уровня GCE, состояние Running достигается где-то между 20 и 60 секундами. Я тестировал разные размеры дисков (10, 200, 500 гигабайт) и несколько созданий блоков, и размер, похоже, не коррелирует с задержкой.

И эта задержка не только происходит в начиная, но и при прокатных обновлений выполняется с контроллерами репликации или когда кода авариями во время выполнения.

Ниже я спецификации kubernetes:

Репликация Контроллер

{ 
    "apiVersion": "v1", 
    "kind": "ReplicationController", 
    "metadata": { 
     "name": "a1" 
    }, 
    "spec": { 
     "replicas": 1, 
     "template": { 
      "metadata": { 
       "labels": { 
        "app": "a1" 
       } 
      }, 
      "spec": { 
       "containers": [ 
        { 
         "name": "a1-setup", 
         "image": "nginx", 
         "ports": [ 
          { 
           "containerPort": 80 
          }, 
          { 
           "containerPort": 443 
          } 
         ] 
        } 
       ] 
      } 
     } 
    } 
} 

Объем претензии

{ 
    "apiVersion": "v1", 
    "kind": "PersistentVolumeClaim", 
    "metadata": { 
     "name": "myclaim" 
    }, 
    "spec": { 
     "accessModes": [ 
      "ReadWriteOnce" 
     ], 
     "resources": { 
      "requests": { 
       "storage": "10Gi" 
      } 
     } 
    } 
} 

А объем

{ 
    "apiVersion": "v1", 
    "kind": "PersistentVolume", 
    "metadata": { 
     "name": "mydisk", 
     "labels": { 
      "name": "mydisk" 
     } 
    }, 
    "spec": { 
     "capacity": { 
      "storage": "10Gi" 
     }, 
     "accessModes": [ 
      "ReadWriteOnce" 
     ], 
     "gcePersistentDisk": { 
      "pdName": "a1-drive", 
      "fsType": "ext4" 
     } 
    } 
} 

Также

ответ

1

GCE (вместе с AWS и OpenStack) должен сначала присоединить диск/том к узлу, прежде чем он сможет быть установлен и подвергнут воздействию вашего контейнера. Время, требуемое для вложения, зависит от поставщика облака.

В случае контейнеров, созданных ReplicationController, есть дополнительная операция отсоединения, которая должна произойти. Один и тот же диск нельзя подключить к нескольким узлам (по крайней мере, не в режиме чтения/записи). Отсоединение и очистка стружки происходят в другой теме, чем при установке. Чтобы быть конкретным, Kubelet, работающий на узле, должен согласовывать хранящиеся в нем контейнеры (и сумму их томов) с томами, которые в настоящее время присутствуют на узле. Освобожденные тома размонтируются и отсоединяются. Если ваш блок был запланирован на другом узле, он должен подождать, пока исходный узел не отделит громкость.

Кластер в конечном итоге достигает правильного состояния, но для каждого компонента может потребоваться время. Это ваше время ожидания.

+0

не только это, но если вы перезапустите модуль или удалите и заново создадите, хранилище не может быть размонтировано до конца позже, а затем программа, пытающаяся установить хранилище, не сможет, поскольку хранилище уже установлено где-то в другом месте ... в результате он будет ждать, пока хранилище не будет размонтировано, прежде чем оно сможет перемонтироваться. Я видел задержки в несколько минут, и он соответствует ошибкам приглушения, которые я вижу в журналах узлов GKE. – MrE

Смежные вопросы