Tag Archives: Mimbolovek8s

Службы (Service) Kubernetes

Автор Itworkroom
Service-k8s

Служба Kubernetes – это ресурс, который формирует единую постоянную точку входа в группу модулей, предоставляющих одну и туже службу. Каждая служба имеет IP-адрес и порт, которые никогда не меняются до тех пор, пока существует служба. Клиенты могут открывать подключения к этому IP-адресу и порту, а затем маршрутизировать эти подключения в один из модулей, поддерживающих эту службу. Благодаря этому, клиентам службы не требуется знать расположение отдельных модулей, предоставляющих службу, что позволяет перемещать данные модули по кластеру в любое время. Подключения к службе сбалансированы по нагрузке на всех поддерживающих модулях.

Создание службы

Создать службу (т.е создать объект Service) можно с помощью команды kubectl expose или путем отправки YAML на сервер API Kubernetes.

Для того чтобы создать службу с помощью команды, надо сообщить Kubernetes обеспечить доступ к контроллеру репликации:

$ kubectl expose replicationcontroller kubia --type=LoadBalancer --name kubia-http-service "kubia-http" exposed

Команда expose создаст ресурс Service с тем же селектором модуля, что и используемый контроллером репликации, обеспечивая доступ ко всем своим модулям через единый IP-адрес и порт.
(далее…)

Набор демонов (DaemonSet)

Автор Itworkroom

В статье пойдет речь о запуске только одного модуля на каждом узле с помощью набора демонов (DaemonSet).

Наборы реплик (ReplicaSet) используются для запуска определенного количества модулей, развернутых в кластерной инфраструктуре Kubernetes. Но существуют случаи, когда требуется, чтобы модули связанные с обеспечением работы инфраструктуры, выполняющие операции системного уровня работали на каждом узле в кластере. Например, когда требуется на каждом узле запустить сборщик логов или монитор ресурсов. Еще одним хорошим примером является собственный процесс kube-proxy системы Kubernetes, который должен работать на всех узлах, чтобы заставлять службы работать. Наборы демонов (DaemonSet) запускают только одну реплику модуля на каждом узле, в то время как наборы реплик (replicaset) разбрасывают их по всему кластеру случайным образом.

Для запуска модуля на всех узлах кластера создается объект DaemonSet, который похож на объекты ReplicaSet, за исключением того, что модули, созданные набором демонов, уже имеют заданный целевой узел и пропускают планировщик Kubernetes, т.е. они не разбросаны по кластеру случайным образом. Набор демонов гарантированно создает модули по количеству узлов, и разворачивает каждый на своем узле. Падение узла не заставляет объект DaemonSet создавать модуль в другом месте. Но когда новый узел добавляется в кластер, набор демонов немедленно развертывает в нем новый экземпляр модуля.

Объяснение наборов демонов на примере

Развернем демон ssd-monitor, который должен работать на всех узлах, содержащих твердотельный накопитель (SSD). Создадим объект DaemonSet, который запускает этот демон на всех узлах, помеченных как имеющие SSD. Подразумевается, что администраторы кластера добавили метку disk=ssd во все такие узлы, поэтому создадим объект DaemonSet с помощью селектора узлов, который выбирает только узлы с этой меткой.

Создание YAML-определения ресурса DaemonSet (создайте файл с именем ssd-monitor-daemonset.yaml): (далее…)

Создание контроллера репликации (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 и каждый из них управляет своим собственным набором ресурсов, каждый из них должен использовать собственное пространство имен. (далее…)