﻿# Пример использования Readiness-проверки в переносимых сервисах

> [HTML Version](readiness.html)

В статье рассматривается пример реализации [Readiness‑пробы](https://kubernetes.io/ru/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) через http-запрос.

````
Начало внимание 

````
В данной статье не поясняется, как определить необходимость использования Readiness пробы.

````
Конец внимание 

## ````
Исходные данные

В модуле имеется два переносимых сервиса. Сервис#1 может предоставлять информацию о своём состоянии по http-запросу. Сервис#2 может интерпретировать полученные ответы или их отсутствие.

Требуется настроить Сервис#2 так, чтобы он не принимал входящий трафик при некотором состоянии Сервиса#1.

Принято решение делать это через Readiness пробы.

## Доработка Сервиса#2

Для Сервиса#2 необходимо определить обработку http-запроса, выполняющего получение статуса Сервиса#1.

Из переменной окружения **SERV1URL** берётся адрес Сервера#1. Ему отправляется http-запрос. Если получен ответ со статусом 200 и тело ответа удовлетворяет условиям проверки Сервиса#2, то добавленный метод будет возвращать статус 200. В ином случае статус 504.

````
func readnessFunc(w http.ResponseWriter, r \*http.Request) \{  
	if serv1URL, exists := os.LookupEnv("SERV1URL"); exists \{  
		response, err := http.Get(serv1URL + "/getstatus")  
		if err == nil \&\&  
			response.StatusCode == 200 \&\&  
			isValidStatus(response.Body) \{  
			fmt.Fprintf(w, "Yeah, it is works")  
			return  
		\}  
	\}  
	w.WriteHeader(http.StatusGatewayTimeout)  
\}

## ````
Настройка Сервиса#2

После того как образ Сервиса#2 собран и залит, нужно настроить использование Readiness пробы в ELMA365. Для этого:

1. В настройках модуля перейдите на вкладку **Сервисы**, затем откройте режим редактирования Сервиса#2.

2. На вкладке **Readiness** выберите тип **HTTP**.

3. Установите задержку перед началом сбора пробы.

````
Начало внимание 

````
Не устанавливайте слишком малое число задержки. Сервис#2 должен успеть инициализироваться в кластере, чтобы принимать запросы в пробы. Установка недостаточного значения может привести к тому, что Сервис#2 будет недоступен.

````
Конец внимание

4. ````
Укажите порт и путь на Сервисе#2 до http-метода, обеспечивающего проверку.

5. Передайте Сервису#2 информацию о расположении Сервиса#1. Для этого перейдите на вкладку **Переменные окружения** и создайте запись **SERV1URL** со значением, указывающим на Сервис#1.

6. Укажите адрес сервиса, нажав **\{+\}** в контроле ввода значения, и выберите сервис из списка. Будет сформировано значение вида **\{\$\_srv\_ИмяСервиса#1\}**.

## Дополнительная информация

При разработке и реализации учтите, что Readiness проба выполняется на протяжении всего существования Сервиса#2. В предложенном примере http-запросы от Сервиса#2 к Сервису#1 будут идти постоянно.