Как использовать команду docker node rm для удаления узлов из кластера

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь управлять узлами в кластере Docker Swarm с помощью команды docker node rm. Сначала вы выведете список существующих узлов в кластере, чтобы их идентифицировать. Затем попытаетесь удалить работающий узел, чтобы понять поведение по умолчанию и ограничения данной команды.

После этого вы узнаете, как успешно удалить остановленный узел из кластера. Наконец, вы научитесь принудительно удалять недоступный узел, что является важной процедурой для обработки ситуаций, когда узел больше не доступен. Эта практика предоставит вам полезные знания для поддержки вашего кластера Docker Swarm.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") subgraph Lab Skills docker/ls -.-> lab-555185{{"Как использовать команду docker node rm для удаления узлов из кластера"}} docker/ps -.-> lab-555185{{"Как использовать команду docker node rm для удаления узлов из кластера"}} docker/rm -.-> lab-555185{{"Как использовать команду docker node rm для удаления узлов из кластера"}} end

Вывод списка существующих узлов в кластере

На этом этапе вы научитесь выводить список узлов, которые в настоящее время входят в кластер Docker Swarm. Прежде чем выводить список узлов, нам нужно инициализировать кластер Docker Swarm.

Сначала инициализируйте новый кластер на текущем компьютере. Этот компьютер станет управляющим узлом (manager node).

docker swarm init

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

Теперь, когда кластер инициализирован, вы можете вывести список узлов в кластере с помощью команды docker node ls.

docker node ls

Эта команда отобразит таблицу с узлами в кластере. Изначально вы увидите только управляющий узел, который вы только что инициализировали. Вывод будет содержать такую информацию, как идентификатор узла (node ID), имя узла (hostname), статус, доступность, статус управляющего узла (manager status) и версия Docker Engine.

Например, вывод может выглядеть примерно так:

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
<node_id> *                   <hostname>          Ready     Active         Leader           20.10.21

Знак * рядом с идентификатором указывает на текущий узел, на котором вы находитесь. Столбец MANAGER STATUS показывает роль узла в кластере (например, Leader, Reachable, Unavailable).

Попытка удаления работающего узла из кластера

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

Сначала выведем список узлов еще раз, чтобы подтвердить идентификатор (ID) работающего узла.

docker node ls

Определите ID узла, который вы хотите попытаться удалить. В данном случае это будет единственный перечисленный узел, то есть управляющий узел (manager node).

Теперь попробуйте удалить узел с помощью команды docker node rm, за которой следует идентификатор узла. Замените <node_id> на фактический идентификатор, найденный на предыдущем шаге.

docker node rm <node_id>

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

Сообщение об ошибке может выглядеть примерно так:

Error response from daemon: node <node_id> is a swarm manager and cannot be removed without --force

Это подтверждает, что нельзя удалить работающий управляющий узел без использования флага --force, который мы рассмотрим на последующем этапе. В случае рабочих узлов (worker nodes) обычно сначала нужно вывести узел из эксплуатации (drain), а затем удалить его.

Удаление остановленного узла из кластера

На этом этапе вы научитесь удалять из кластера узел, который больше не работает или недоступен. Поскольку в нашем текущем кластере есть только один узел (управляющий узел), мы сначала имитируем сценарий, когда узел останавливается, покидая кластер на текущем узле.

Сначала покиньте кластер на текущем узле. Это остановит демон Docker от участия в кластере.

docker swarm leave

Вам будет предложено подтвердить, что вы хотите покинуть кластер. Введите y и нажмите Enter.

Node left the swarm.

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

docker swarm init

Вы увидите вывод, указывающий, что кластер снова инициализирован.

Теперь выведем список узлов в кластере. Вы увидите только текущий узел в списке.

docker node ls

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

Принудительное удаление недоступного узла из кластера

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

Сначала выведем список узлов в кластере еще раз, чтобы получить идентификатор узла.

docker node ls

Определите ID узла, который вы хотите принудительно удалить. В нашей текущей настройке это единственный узел, то есть управляющий узел (manager).

Для принудительного удаления узла используйте команду docker node rm с флагом --force, за которым следует идентификатор узла. Замените <node_id> на фактический идентификатор.

docker node rm --force <node_id>

Вы должны увидеть вывод, указывающий, что узел был удален.

Node <node_id> removed from swarm

Теперь выведем список узлов в кластере еще раз, чтобы подтвердить, что узел был удален.

docker node ls

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

Error: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to a swarm.

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

Резюме

В этом практическом занятии (lab) вы научились управлять узлами в кластере Docker Swarm с помощью команды docker node rm. Вы начали с инициализации кластера и вывода списка существующих узлов с использованием команды docker node ls, чтобы определить их идентификаторы и статусы.

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