Попытка реализовать плавное завершение работы приложения Spring Boot 2, работающего в KubernetesJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Попытка реализовать плавное завершение работы приложения Spring Boot 2, работающего в Kubernetes

Сообщение Anonymous »

Я пытаюсь реализовать плавное завершение работы в нашем приложении Spring Boot 2, чтобы удалить ошибки 5xx при уменьшении масштаба модулей.
Я установил
management:
endpoints:
jmx:
exposure:
include: "*"
web:
exposure:
include: "*"
endpoint:
shutdown:
enabled: true

server.shutdown: graceful

внутри моего файла application.yaml, и я использую конечную точку /actuator/health в качестве проверки работоспособности и готовности внутри моего файла Deployment.yaml .
Я установил период ожидания в 50 секунд внутри preStopHook, а мой terminationGracePeriod — 120 секунд.
Мой файл Deployment.yamllifecycle:
preStop:
exec:
command: ["/bin/sh","-c","sleep 50;","rm -rf /mnt/bixby/log/$HOSTNAME"]
terminationGracePeriod: 120

livenessProbe:
httpGet:
port: 8080
path: /actuator/health
initialDelaySeconds: 45
periodSeconds: 5
readinessProbe:
httpGet:
port: 8080
path: /actuator/health
initialDelaySeconds: 45
periodSeconds: 5

Странно то, что эта штука работает в одной среде (назовем ее dev1), но не работает в другой (dev2).
Когда я удаляю модуль, и когда я отправляю запрос на завивку в конечную точку /actuator/health, он возвращает {"status":"DOWN","groups":["liveness","readiness"] в dev1, но это не так t возвращает любой ответ в среде dev2. Я получаю следующий результат: (52) Пустой ответ от сервера через 50 секунд, что также является временем сна моего prestopHook . И, как ни странно, наша собственная конечная точка проверки работоспособности, которую мы использовали ранее, возвращает правильный ответ в течение этого периода.
После этого, если я снова сделаю запрос на завивку, я получу следующий результат:
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /actuator/health HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 503 Service Unavailable
< Connection: keep-alive
< Content-Length: 0

Также странно, что в среде dev1, где плавное завершение работы, кажется, работает правильно, модуль завершается через 50 секунд, что странно, поскольку terminationGracePeriod составляет 120 секунд.
У меня есть добавил следующий код предварительного уничтожения в мое приложение весенней загрузки
@PreDestroy
public void tearDown() {
logger.log("Application shutting down");
}

Все конфигурации, образ Docker приложения Spring Boot, версия Kubernetes в обоих окружениях одинаковы.
Я также добавил эту конфигурацию чванства для привода работать вместе с чванством
@Bean // This bean is required when you want swagger and actuator to work together
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
return new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof WebMvcRequestHandlerProvider
|| bean instanceof RequestHandlerProvider) {
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
}
return bean;
}

private void customizeSpringfoxHandlerMappings(
List mappings) {
List copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null)
.collect(Collectors.toList());
mappings.clear();
mappings.addAll(copy);
}

@SuppressWarnings("unchecked")
private List getHandlerMappings(Object bean) {
try {
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
field.setAccessible(true);
return (List) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
};
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ning-in-ku
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»