2016-11-24 6 views
14

У меня есть кластер рой с одним менеджером и другим обычным узлом, когда я создаю службу роя, которую я создаю с типом монтирования, монтированием источника и целью монтирования. Он создает том с таким же именем и в ящике, и в узле и запускает контейнер, и моя служба работает.Как удалить тома в кластере рой?

Когда я освобождаю службу, том, созданный вместе с сервисом, не был удален, это все равно.

Проблема, с которой я столкнулась, заключается в том, что я удаляю том с той же конечной точкой, что он удаляет только тома в диспетчере рои, том, созданный в узле при создании службы, все еще существует.

Я хочу, чтобы менеджер удалял все тома, созданные вместе с сервисом роя. Есть ли способ?

+0

Какая версия докера и это классический рой или рой? Учитывая разницу во времени, я предполагаю, что ОП и щедрость смотрят на разные вещи. – BMitch

+0

Bounty смотрит на Swarm Mode. Докер -> = 17.x – Rufinus

ответ

4

После такой большой части анализа здесь есть теория.

Если вы поручаете рой для создания службы с помощью тома, Swarm выполняет только действия по созданию служб внутри кластера, то есть на нескольких узлах да, когда вы отправляете детали тома да, он также создает том, но пока освобождая обслуживание, он не может проверить рабочие узлы на наличие объема при выпуске. Его ошибка в докере.

Я поднял ошибку в докере для нее.

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

+2

У вас есть ссылка на URL-адрес для этой проблемы, которую вы подняли? – VonC

+0

Пожалуйста, найдите URL-адрес поднятой проблемы: https://github.com/moby/moby/issues/35179 –

2

Возможно, это вопрос модернизации докеров? так как в соответствии с этим Git page он должен очищать все.

@test "docker volume rm" { 
    start_docker_with_busybox 2 
    swarm_manage 

    # check for failure when removing a non-existent volume 
    run docker_swarm volume rm test_volume 
    [ "$status" -ne 0 ] 

    # run a container that exits immediately but stays around and 
    # connected to the volume. Wait for it to finish. 
    docker_swarm run -d --name=test_container -v=/tmp busybox true 
    docker_swarm wait test_container 

    run docker_swarm volume ls -q 
    volume=${output} 
    [ "${#lines[@]}" -eq 1 ] 

    # check that removing an attached volume is an error 
    run docker_swarm volume rm $volume 
    [ "$status" -ne 0 ] 

    docker_swarm rm test_container 

    run docker_swarm volume rm $volume 
    [ "$status" -eq 0 ] 
    [ "${#lines[@]}" -eq 1 ] 

    run docker_swarm volume ls 
    [ "${#lines[@]}" -eq 1 ] 
} 
2

Насколько я знаю, тома создается только на узлах, где создается контейнер. Возможно ли, что ваш сервис не запускается на одном узле, заканчивается на другом, и как-то рой не убирается? Если это дело, напишите вопрос в github.

Update (с комментариев):

Согласно docker service create documentation:

Именованному объем представляет собой механизм расцепления постоянных данных, необходимый контейнер с изображения, используемым для создания контейнера и из хост-машина. Именованные тома создаются и управляются Docker, и именованный том сохраняется, даже если в данный момент контейнер не используется. Данные в именованных томах могут совместно использоваться между контейнером и главной машиной, а также между несколькими контейнерами. Docker использует драйвер тома для создания, управления и монтирования томов. Вы можете создавать резервные копии или восстанавливать тома с помощью команд Docker.

Итак, если вы используете именованные тома, правильный ответ был бы причиной того, что они удаляются в менеджере и где они когда-либо создавались?

+0

Хорошая перспектива мышления для устранения неполадок. Я, тем не менее, тоже.когда вы инструктируете рой создать службу с помощью реплики 10, она разбивает и решает, сколько контейнеров должно выполняться на каждом узле. он создает только объем в узле, если какая-либо услуга распределяется по u. даже все идет хорошо, и контейнеры успешно работают тоже, что не удается освободить тома в рабочем узле, я проверил вручную много раз. –

+1

А на менеджера их снимают? Если у вас есть именованный том, который он должен продолжать? «Именованный том - это механизм для развязывания постоянных данных, необходимых вашему контейнеру, из образа, используемого для создания контейнера и с хост-машины. Именованные тома создаются и управляются Docker, а именованный том сохраняется, даже если в настоящий момент контейнер не используется Данные в именованных томах могут совместно использоваться между контейнером и хост-машиной, а также между несколькими контейнерами. Docker использует драйвер тома для создания, управления и монтирования томов ». – herm

+0

Вы абсолютно правы. Я тоже думал в этой перспективе, с точки зрения докеров, они определяют объем, сеть и контейнер как отдельную услугу. объем и сеть могут быть разделены между контейнерами. Я согласен, в этом случае, почему они удаляют в узле менеджера, это вопрос в миллиард долларов? если они удаляются, они должны удалять по кластеру, иначе они не должны удалять в менеджере, это мой аргумент по этому вопросу. –

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