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

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

Другие вопросы по тегам