как остановить и перезапустить узлы в kubernetes

#kubernetes #nodes #kubectl

Вопрос:

у меня есть 3 узла kubectl get nodes

 NAME      STATUS   ROLES    AGE    VERSION
a1       Ready    master   133m   v1.18.6-gke.6600
a2       Ready    master   132m   v1.18.6-gke.6600
a3       Ready    master   132m   v1.18.6-gke.6600
 

итак, статус этих узлов готов, я хочу остановить первый узел и снова перезапустить эти узлы

я пытался с

kubectl cordon a1

 NAME      STATUS                     ROLES    AGE    VERSION
a1     Ready,SchedulingDisabled   master   138m   v1.18.6-gke.6600
a2     Ready                      master   137m   v1.18.6-gke.6600
a3     Ready                      master   137m   v1.18.6-gke.6600
 

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

kubectl drain a1

 error: unable to drain node "abm-cp2", aborting command...

There are pending nodes to be drained:
 a2
error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/anetd-4pr9j, kube-system/etcd-defrag-8fs99, kube-system/kube-proxy-8cgpf, kube-system/localpv-mlfnf, kube-system/metallb-speaker-ljsdv, kube-system/node-exporter-dfrnq, kube-system/stackdriver-log-forwarder-t5s88
 

Ответ №1:

Возможно, вы неправильно понимаете значение оцепления и дренажного узла.

Узел оцепления :

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

Дренажный узел :

Узел слива удалит все контейнеры с этого конкретного узла и запланирует все контейнеры на другой узел.

Как бы я ни понимал, что ты хочешь сделать, это

Я хочу остановить первый узел и снова перезапустить эти узлы

если вы можете получить доступ к узлу и выполнить SSH в рабочих узлах, вы также можете запустить внутри узла после SSH : systemctl restart kubelet

или

вы можете остановить или уменьшить развертывание до нуля, что означает, что вы можете приостановить или перезапустить контейнер или модуль

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

 kubectl delete node a1
 

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

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

я бы посоветовал вам оцепить и слить узел перед перезапуском.

  1. kubectl cordon a1 (остановите запуск нового модуля)
  2. kubectl drain a1 (снимите работающие контейнеры)
  3. kubectl delete node a1 (удалите узел из кластера) или systemctl restart kubelet (перезапустите узел)

Что касается ошибки :

Есть ожидающие удаления узлы: ошибка a2: не удается удалить модули, управляемые набором демонов

Вам нужно использовать --ignore-daemonsets ключ при сливе узлов Kubernetes:

 --ignore-daemonsets=false: Ignore DaemonSet-managed pods.
 

таким образом, команда будет чем-то вроде

 kubectl drain node <node-name> --ignore-daemonsets
 

Комментарии:

1. если я использую kubectl удалить узел a1, то он будет удален, как я могу получить к нему доступ снова

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

3. да, узлы a1 удалены, но теперь, если я хочу получить доступ к этому снова, я перезапустил службу kubectl, но ничего не произошло

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

5. kubectl слив abm-cp1 —игнорировать-узел демонов/abm-cp1 уже заблокирован ошибка: не удалось слить узел «abm-cp1», команда прерывания… Есть ожидающие удаления узлы: ошибка abm-cp1: не удается удалить модули с локальным хранилищем (для переопределения используйте —delete-emptydir-данные): anthos-служба идентификации/ais-59bd464ddd-sqhsp, gke-система/вход в систему-5c6fc44c76-784ls, gke-система/вход в систему-5c6fc44c76-db7dm, gke-система/вход в систему-5978f9f749-2675k, gke-system/istiod-5978f9f749-9zc95 показывает что-то вроде этого