Info
Content

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, но с репликасетом напрямую взаимодействовать не приходится, им управляет деплоймент

При обновлении деплоймента создается новый репликасет с новыми подами, а старый со старыми подами умирает

Screenshot_2021_02_02-12_49_03-2021-08-11-tnahoentuhantoehutna.png

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

Создав.развертывание,.вы.сообщили.Kubernetes.о.том,.что.pod-оболочка.demo. должна.работать.всегда..Система.ловит.вас.на.слове,.и,.даже.если.вы.сами.удалите. этот.Pod-объект,.она.посчитает,.что.вы.наверняка.ошиблись,.и.услужливо.запустит. замену.

развертывание создаст pod-оболочки, а Kubernetes при не- обходимости их запустит,.но.не.объяснили,.как.такое.происходит. За.эту.часть.процесса.отвечает.компонент.Kubernetes.под.названием.«планировщик».. Когда.развертывание.(через.соответствующий.объект.ReplicaSet).решит,.что.нуж- на.новая.реплика,.оно.создаст.ресурс.Pod.в.базе.данных.Kubernetes..Одновременно. с.этим.указанный.ресурс.добавляется.в.очередь.—.этакий.ящик.входящих.сообще- ний.для.планировщика. Задача. планировщика. —. следить. за. этой. очередью,. взять. из. нее. следующую. за- планированную. pod-оболочку. и. найти. узел,. на. котором. ее. можно. запустить.. При. выборе. подходящего. узла. (при. условии,. что. такой. имеется). планировщик. будет.исходить.из.нескольких.разных.критериев,.включая.ресурсы,.запрашиваемые. pod-оболочкой

38e15172f88348718c88b4fcc87585b6.png

Планировщик Kubernetes отвечает за назначение узлов подам (pods). Суть его работы сводится к следующему:

Вы создаёте под.
Планировщик замечает, что у нового пода нет назначенного ему узла.
Планировщик назначает поду узел.

Он не отвечает за реальный запуск пода — это уже работа kubelet. Всё, что от него в принципе требуется, — гарантировать, что каждому поду назначен узел. Просто, не так ли?

В Kubernetes применяется идея контроллера. Работа контроллера заключается в следующем:

посмотреть на состояние системы;
заметить, где актуальное состояние не соответствует желаемому (например, «этому поду должен быть назначен узел»);
повторить.

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

у. pod-оболочки. может. быть. несколько. реплик. и. каждая. со. своим. адресом..Любому.другому.приложению,.которому.необходимо.обратиться.к.этой. pod-оболочке,.нужно.будет.хранить.список.адресов,.что.не.кажется.очень.хорошей. идеей. К.счастью,.существует.лучший.способ:.ресурс.типа.«сервис».предоставляет.один. несменяемый.IP-адрес.или.такое.же.доменное.имя,.которые.автоматически.перена- правляют.на.любую.подходящую.pod-оболочку..

Сервис. можно. считать. веб-прокси. или. балансировщиком. нагрузки,. который. на- правляет.запросы.к.группе.внутренних.pod-оболочек.(рис..4.2)..Но.он.не.ограни- чен.веб-портами.и.может.направить.трафик.на.любой.другой.порт.в.соотв.етствии. с.разделом.ports.в.спецификации.

Screenshot_2021_02_02-12_49_03-2021-08-thanteuhsatoehusntaoheustnha.png

deployment управляет.группой.pod- оболочек.вашего.приложения,.а.сервис.предоставляет.запросам.единую.точку.входа. в.эти.pod-оболочки.

No Comments
Back to top