4. Работа с объектами Kubernetes
Для. каждой. программы,. за. которой. нужно. следить,. Kubernetes. создает. соответ- ствующий.объект.Deployment,.записывающий.некоторую.связанную.с.ней.инфор- мацию:. имя. образа. контейнера,. количество. реплик. (копий),. которые. вы. хотите. выполнять,.и.любые.другие.параметры,.необходимые.для.запуска.контейн.ера.
В.связке.с.ресурсом.Deployment.работает.некий.объект.Kubernetes.под.названием. контроллер..Контроллеры.отслеживают.ресурсы,.за.которые.отвечают,.убеждаясь. в. том,. что. те. присутствуют. и. выполняются,. а. если. заданное. развертывание. по. какой-либо.причине.не.имеет.достаточного.количества.реплик,.дополнительно.их. создают.. Если. же. реплик. слишком. много,. контроллер. уберет. лишние. —. так. или. иначе,.он.следит.за.тем,.чтобы.реальное.состояние.совпадало.с.желаемым.
На. самом. деле. развертывание. не. управляет. репликами. напрямую:. вместо. этого. оно.автоматически.создает.сопутствующий.объект.под.названием.ReplicaSet,. который.сам.этим.занимается.
Если посмотреть описание deployment'a, то можно будет увидеть pod-template
$ kubectl describe deployments/legion-ui
Name: legion-ui
Namespace: default
CreationTimestamp: Tue, 03 Aug 2021 11:18:07 +0300
Labels: app=legion-ui
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=legion-ui
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 15
RollingUpdateStrategy: 1 max unavailable, 1 max surge
Pod Template:
Labels: app=legion-ui
Containers:
legion-ui:
Image: registry.gitlab.com/legion_farm/legion_v2/ui:staging
Port: 3000/TCP
Host Port: 0/TCP
Environment:
NODE_ENV: staging
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: legion-ui-697fb9bbc7 (2/2 replicas created)
Events: <none>
В pod-template содержится информация о том как запускать контейнер
На самом деле между deployment'ом и pod'ом есть еще replicaset, но с репликасетом напрямую взаимодействовать не приходится, им управляет деплоймент
При обновлении деплоймента создается новый репликасет с новыми подами, а старый со старыми подами умирает
Контроллеры.Kubernetes.непрерывно.сравнивают.желаемое.состояние,.указанное. каждым. ресурсом,. с. реальным. состоянием. кластера. и. вносят. необходимые. кор- ректировки..Этот.процесс.называют.циклом согласования,.поскольку.он.все.время. повторяется.в.попытке.согласовать.текущее.состояние.с.желаемым.
Создав.развертывание,.вы.сообщили.Kubernetes.о.том,.что.pod-оболочка.demo. должна.работать.всегда..Система.ловит.вас.на.слове,.и,.даже.если.вы.сами.удалите. этот.Pod-объект,.она.посчитает,.что.вы.наверняка.ошиблись,.и.услужливо.запустит. замену.
развертывание создаст pod-оболочки, а Kubernetes при не- обходимости их запустит,.но.не.объяснили,.как.такое.происходит. За.эту.часть.процесса.отвечает.компонент.Kubernetes.под.названием.«планировщик».. Когда.развертывание.(через.соответствующий.объект.ReplicaSet).решит,.что.нуж- на.новая.реплика,.оно.создаст.ресурс.Pod.в.базе.данных.Kubernetes..Одновременно. с.этим.указанный.ресурс.добавляется.в.очередь.—.этакий.ящик.входящих.сообще- ний.для.планировщика. Задача. планировщика. —. следить. за. этой. очередью,. взять. из. нее. следующую. за- планированную. pod-оболочку. и. найти. узел,. на. котором. ее. можно. запустить.. При. выборе. подходящего. узла. (при. условии,. что. такой. имеется). планировщик. будет.исходить.из.нескольких.разных.критериев,.включая.ресурсы,.запрашиваемые. pod-оболочкой
Планировщик Kubernetes отвечает за назначение узлов подам (pods). Суть его работы сводится к следующему:
Вы создаёте под.
Планировщик замечает, что у нового пода нет назначенного ему узла.
Планировщик назначает поду узел.
Он не отвечает за реальный запуск пода — это уже работа kubelet. Всё, что от него в принципе требуется, — гарантировать, что каждому поду назначен узел. Просто, не так ли?
В Kubernetes применяется идея контроллера. Работа контроллера заключается в следующем:
посмотреть на состояние системы;
заметить, где актуальное состояние не соответствует желаемому (например, «этому поду должен быть назначен узел»);
повторить.
Планировщик — один из видов контроллера. Вообще же существует множество разных контроллеров, у всех разные задачи и выполняются они независимо.
у. pod-оболочки. может. быть. несколько. реплик. и. каждая. со. своим. адресом..Любому.другому.приложению,.которому.необходимо.обратиться.к.этой. pod-оболочке,.нужно.будет.хранить.список.адресов,.что.не.кажется.очень.хорошей. идеей. К.счастью,.существует.лучший.способ:.ресурс.типа.«сервис».предоставляет.один. несменяемый.IP-адрес.или.такое.же.доменное.имя,.которые.автоматически.перена- правляют.на.любую.подходящую.pod-оболочку..
Сервис. можно. считать. веб-прокси. или. балансировщиком. нагрузки,. который. на- правляет.запросы.к.группе.внутренних.pod-оболочек.(рис..4.2)..Но.он.не.ограни- чен.веб-портами.и.может.направить.трафик.на.любой.другой.порт.в.соотв.етствии. с.разделом.ports.в.спецификации.
deployment управляет.группой.pod- оболочек.вашего.приложения,.а.сервис.предоставляет.запросам.единую.точку.входа. в.эти.pod-оболочки.
No Comments