Создание контроллера репликации (ReplicationController) в Kubernetes

Автор Itworkroom

Создание контроллера репликации.

Контроллер репликации (ReplicationController) – это ресурс Kubernetes, который обеспечивает поддержание постоянной работы его модулей. Если модуль исчезает по любой причине, например, в случае исчезновения узла из кластера или потому, что модуль был вытеснен из узла, контроллер репликации замечает отсутствующий модуль и создает сменный модуль.

Контроллер репликации состоит из трех основных частей:

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

Подобно модулям и другим ресурсам Kubernetes, создается контроллер репликации при помощи отправки дескриптора JSON или YAML на сервер API Kubernetes ($ kubectl create -f kubia-rc.yaml). Содержимое файла kubia-rc.yaml: (далее…)

Проверка работоспособности livenessProbe Kubernetes

Автор Itworkroom

Kubernetes может проверить текущую работоспособность контейнера посредством проверок работоспособности (livenessProbe). Kubernetes будет периодически выполнять проверку и перезапускать контейнер в случае неуспешной проверки.

Kubernetes может исследовать контейнер с помощью одного из трех механизмов:

  1. Запрос HTTP GET на IP-адрес, порт и путь контейнера, которые вы укажете. Если код отклика HTTP будет 2xx или 3xx, проверка считается успешной. Если сервер возвращает отклик с кодом ошибки или вообще не отвечает, то проверка считается неуспешной, и в результате контейнер будет перезапущен;

Добавление проверки работоспособности в модуль: kubia-liveness-probe.yaml

apiVersion: v1
kind: pod
metadata:
name: kubia-liveness
spec:
containers:
   – image: vasya/kubia-unhealthy
      name: kubia
      livenessProbe:
        httpGet:
         path: /
         port: 8080
       initialDelaySeconds: 15 (далее…)

Пространства имен Kubernetes

Автор Itworkroom
namespace

Пространства имен (Namespace) Kubernetes предоставляют область видимости для имен объектов. Чтобы все ресурсы небыли в одном пространстве имен Kubernetes, можно разбить их на несколько пространств имен, что также позволяет использовать одни и те же имена ресурсов несколько раз (в разных пространствах имен Kubernetes).
Использование нескольких пространств имен позволяет разбить сложные системы со множеством компонентов на более мелкие отдельные группы. Они могут использоваться для разделения ресурсов в мультитенантной среде, разбивая ресурсы на среды рабочего окружения, среды разработки и контроля качества. Имена ресурсов должны быть уникальными только в пределах пространства имен. Но хотя большинство типов ресурсов организовано в пространства имен, некоторые из них – нет. Одним из них является ресурс узла (Node), который является глобальным и не привязан к одному пространству имен.
Два разных пространства имен могут содержать ресурсы с одинаковыми именами. Если несколько пользователей или групп пользователей используют один кластер Kubernetes и каждый из них управляет своим собственным набором ресурсов, каждый из них должен использовать собственное пространство имен. (далее…)

Метки в Kubernetes

Автор Itworkroom
k8s

Метки представляют собой функциональное средство для организации не только модулей, но и других ресурсов Kubernetes. Метка – это произвольная пара «ключ-значение», присоединяемая к ресурсу, которая затем используется при отборе ресурсов с помощью селекторов меток (ресурсы фильтруются на основе того, включают они метку, указанную в селекторе, или нет). Ресурс может иметь несколько меток, если ключи этих меток уникальны в пределах данного ресурса. Метки обычно прикрепляются к ресурсам при их создании, но можно также добавлять дополнительные метки или даже изменять значения существующих меток позже без необходимости повторного создания ресурса.

Модуль обозначается с помощью 2 меток:

app, указывает, к какому приложению, компоненту или микросервису принадлежит модуль;
rel, показывает, является ли приложение, запущенное в модуле, стабильной, бета- или канареечной версией.

Канареечный релиз – это новая версия приложения рядом со стабильной версией, только небольшая часть пользователей попадает в новую версию, чтобы увидеть, как она себя ведет, прежде чем развернуть ее для всех пользователей. Это препятствует доступу слишком большого числа пользователей к плохим релизам.
Добавив эти две метки, вы, по существу, организовали свои модули в двух измерениях (горизонтально по приложениям и вертикально по релизам). (далее…)

Создание модулей (POD) из дескрипторов YAML или JSON

Автор Itworkroom
pod k8s

Создание модулей (POD).

Существуют неуправляемые модули, создаваемые напрямую и управляемые модули, которые создаются и управляются контроллерами репликации (ReplicationController) или развертываниями (Deployment).
Модули и другие ресурсы Kubernetes обычно создаются путем публикации манифеста JSON и YAML в конечной точке API REST Kubernetes или командой kubectl run. Определение объектов Kubernetes из файлов YAML позволяет хранить их в системе управления версиями.

Команда для получения полного определения дескриптора YAML существующего модуля:

$ kubectl get po имя_модуля -o yaml

Структура файла YAML развернутого модуля:
apiVersion: v1 [Версия API Kubernetes, используемая в этом дескрипторе YAML]
kind: Pod [Тип объекта/ресурса Kubernetes]
metadata: [метаданные – включают имя, пространство имен, метки и другую информацию о модуле]
(далее…)