#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.
Примечание. если вы запускаете отдельные реплики своего приложения, вы можете столкнуться с простоем, если удалите узел или перезапустите кублет
я бы посоветовал вам оцепить и слить узел перед перезапуском.
kubectl cordon a1
(остановите запуск нового модуля)kubectl drain a1
(снимите работающие контейнеры)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 показывает что-то вроде этого