Почему монтирование тома GCE в модуле kubernetes вызывает задержку?
У меня есть модуль kubernetes, к которому я присоединяю постоянный том GCE с помощью утверждения тома постоянства. (Для еще худшей проблемы без утверждения тома см.: Монтирование тома gcePersistentDisk 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, работающий на узле, должен согласовать имеющиеся у него модули (и сумму их томов) с томами, присутствующими в данный момент на узле. Осиротевшие тома размонтированы и отсоединены. Если ваш модуль был запланирован на другом узле, он должен ждать, пока исходный узел не отсоединит том.
Кластер в конечном итоге достигает правильного состояния, но каждому компоненту может потребоваться время для его достижения. Это ваше время ожидания.