3 votes

Signal de redémarrage de l'App Engine Flex

J'ai un processus long en cours d'exécution dans Go sur une instance App Engine flex, déployée via une image docker.

La plupart du temps, lorsque je déploie la version live, elle envoie un SIGTERM à l'application. Je peux l'attraper et faire un arrêt en douceur. C'est génial.

D'autres fois, le processus semble simplement disparaître et une nouvelle instance est créée. Je n'obtiens aucune sortie de journal, aucune indication de ce qui s'est passé. Cela semble se produire si je modifie le nombre d'instances (via manual_scaling) mais parfois cela se produit lors d'un déploiement normal.

Existe-t-il un moyen d'obtenir un SIGTERM de manière cohérente ? Y a-t-il d'autres stratégies que je peux utiliser pour savoir quand l'instance est tuée/redémarrée ?

Mise à jour : J'ai essayé quelques cas de test :

  1. "Supprimer" l'instance dans l'interface utilisateur de l'App Engine. L'instance s'est arrêtée proprement - en envoyant des signaux - et a redémarré puisqu'elle est configurée pour avoir une seule instance.
  2. Déployer, en passant de 1 à 2 instances. L'instance existante a redémarré proprement avec des signaux. La nouvelle instance est apparue.
  3. Déployer, en passant de 2 à 1 instance. Une instance existante a redémarré proprement avec des signaux. L'autre s'est pouf faute d'une meilleure description. L'affichage de "All logs" montre STDERR de mon application, puis plus rien. Aucune sortie dans les journaux vm.events, vm.syslog, vm.shutdown qui rapportent beaucoup de choses intéressantes pendant le redémarrage. Je sais également que les signaux n'ont pas été reçus par mon application car la base de données est laissée dans un état sale.

C'est sur ce dernier cas que j'aimerais avoir plus d'informations, merci ! Veuillez également me faire savoir s'il existe un meilleur endroit ou une meilleure façon de poser cette question.

0 votes

Rcarver, la réponse de Soni Sol a-t-elle été utile ?

0voto

Soni Sol Points 231

Sur App Engine, les instances Flex sont redémarré une fois par semaine pour appliquer des mises à jour critiques sur le runtime.

Ces redémarrages reçoivent toujours un SIGTERM et un SIGKILL 3 secondes avant que le redémarrage ne soit effectué.

Si votre application a des processus en cours depuis longtemps et que les redémarrages hebdomadaires peuvent les affecter. Une bonne alternative pour vous peut être de l'exécuter sur un moteur de calcul, car ces derniers sont mieux contrôlés par l'utilisateur et ne sont pas redémarrés chaque semaine.

Je viens de répliquer et je peux le confirmer :

  • Redéploiement 1 à 1 : le SIGTERM et un SIGKILL sont envoyés.
  • Au redémarrage hebdomadaire, un SIGTERM et un SIGKILL sont envoyés.
  • Redéploiement d'instances croissantes SIGTERM et un SIGKILL sont envoyés
  • En redéployant les instances réductrices (2 à 1) je peux voir que SIGTERM et un SIGKILL sont envoyés sur chaque instance.

Ces journaux sont générés sur le journal : appengine.googleapis.com/vm.shutdown Donc, si vous voulez continuer à utiliser App Engine, vous pouvez attendre ces signaux qui vous donneront 3 secondes avant que l'arrêt réel soit fait.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X