Plan de lanzamiento de impacto cero del Chunyun Nacos K8S
1. Deje que el nuevo servicio comience primero, regístrese en el centro de registro y espere a que el cliente descubra el nuevo servicio.
2. Desconecte el servicio del centro de registro y espere a que el cliente actualice la lista de servicios.
3. Detenga el servicio normalmente y desconéctelo.
Basado en el mecanismo de actualización continua de K8S, cuando el nuevo POD esté listo, el antiguo POD se eliminará. Antes de eliminar el POD antiguo, se llamará al gancho preStop del contenedor.
El contenedor K8S en sí tiene una configuración de sonda lista para usar. Cuando la sonda de preparación vuelva a la normalidad, se eliminará el POD antiguo.
Podemos utilizar el actuador de verificación de estado de SpringBoot como una sonda lista para usar.
La configuración principal es inicialDelaySeconds, que es el tiempo de demora desde la creación del contenedor hasta la primera verificación de preparación.
InitialDelaySeconds=El tiempo que tarda el servicio en iniciarse. El tiempo promedio que tarda el cliente en actualizar la lista de servicios (cinta. Intervalo de actualización de la lista de servidores, el valor predeterminado es 30 segundos).
2. Desconecte el servicio del centro de registro y espere a que el cliente actualice la lista de servicios.
Necesitamos implementar un gancho preStop para desconectar el servicio del registro y esperar la cinta. serverlistrefreshinterval segundos, espere a que el cliente actualice el servicio y borre el servicio actual.
Usamos nacos como centro de registro. AbstractTautoserviceRegistration es la clase base abstracta del registro de servicio. El método de detención puede estar fuera de línea del centro de servicio. nacosautoserviceRegistration es la clase de implementación, por lo que solo necesitamos llamar a NacosAutoServiceRegistration. stop() desconecta el servicio.
Definimos un punto final de cierre de sesión y dejamos que k8s preStop lo llame.
No olvides registrar el punto final en BeanFactory.
Finalmente, necesitamos definir el gancho preStop de K8S.
3. Detenga el servicio normalmente y desconéctelo.
Spring Boot ya admite el apagado normal.
Necesitamos agregar la siguiente configuración. El tiempo de espera debe determinarse en función del consumo de tiempo de la solicitud habitual, no importa si es un poco mayor.
Finalmente hay otra configuración importante de K8S.
TerminationGracePeriodSeconds es mayor que Prestop Spring. ciclo vital. Tiempo de espera para cada fase de apagado, por lo que no importa si puedes configurarlo más grande.
Ve y pruébalo.