Как K8S автоматически запускает развертывания и DaemonSets? - PullRequest
0 голосов
/ 04 апреля 2020

Я установил K8S с помощью Kubeadm и вижу следующие модули на узлах плоскости управления и рабочих узлах.

enter image description here

Kubelet запускается как Служба systemd просматривает папку / etc / kubernetes / manifest и запускает объекты, определенные в файлах etcd.yaml, kube-apiserver.yaml, kube-controller-manager.yaml и kube-scheduler.yaml. Если я помещаю файл yaml в ту же папку, kubelet наблюдает за тем же и запускает соответствующий объект K8S.

Я не уверен, каким образом получают развертывание coredns, kube-proxy и фланелевые DaemonSets, показанные на приведенном выше снимке экрана автоматически запускается, когда я запускаю / перезагружаю узлы плоскости управления и рабочие узлы. Может кто-нибудь помочь мне с процессом запуска K8S для того же?

1 Ответ

1 голос
/ 06 апреля 2020

Kubeadm устанавливает CoreDNS и kube-proxy в фазе init add . Он устанавливается после того, как функциональность кластера basi c уже запущена (apiserver, manager manager et c.). Kubeadm устанавливает его так же, как если бы вы запускали kubectl apply.

Вот код фазы дополнения init kubeadm , если вы хотите увидеть, как он на самом деле работает под капотом.

Apiserver, диспетчер контроллера и планировщик должны быть запущены с использованием папки манифеста (также известной как static pods), потому что другого пути нет (технически это не на 100% правильно, потому что есть другие методы, например, вы можете запустить свой плоскость управления с использованием systemd). Как вы начинаете запускать вещи на kubernetes, когда kubernetes еще нет? Нет сервера API для обработки ваших запросов, нет планировщика для планирования ваших модулей, нет контроллера для управления ресурсами. После запуска основных компонентов вы можете запускать модули регулярно, используя api.

Кроме того, отвечая на ваш вопрос о том, что происходит при перезапуске плоскости управления или узлов? Вы должны знать, что состояние всего кластера k8s находится в etcd. Поэтому, когда вы перезагружаете плоскость управления, kubernetes считывает состояние из etcd, сравнивает его с реальностью и, если есть различия, корректирует реальность, чтобы соответствовать состоянию в etcd. например, если нет запущенных corens, но в etcd есть объект coredns, kubernetes запустит его.

...