3 votes

Signal de redémarrage App Engine Flex

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

La plupart du temps, lorsque je déploie la version en direct, cela envoie un SIGTERM à l'application. Je peux intercepter cela et effectuer 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 définitivement se produire si je change le nombre d'instances (via manual_scaling) mais parfois cela se produit lors d'un déploiement normal.

Y a-t-il un moyen d'obtenir un SIGTERM de manière cohérente? Existe-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 d'App Engine. L'instance s'est arrêtée proprement - en envoyant des signaux - et a redémarré car elle est configurée pour avoir une seule instance.
  2. Déploiement, en passant de 1 à 2 instances. L'instance existante redémarrée proprement avec des signaux. La nouvelle instance est apparue.
  3. Déploiement, en passant de 2 à 1 instances. Une instance existante redémarrée proprement avec des signaux. L'autre est partie pouf faute d'une meilleure description. En consultant 'Tous les journaux' montrant 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 aussi 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 ce dernier cas sur lequel j'aimerais avoir plus d'informations, merci! Veuillez également me faire savoir s'il existe un endroit ou une meilleure façon de poser cette question.

0 votes

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

0voto

Soni Sol Points 231

Sur App Engine Flex, les instances sont redémarrées 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 soit effectué.

Si votre application a des processus en cours d'exécution pendant une longue période et que les redémarrages hebdomadaires peuvent les affecter. Une bonne alternative pour vous peut être de l'exécuter sur un Compute Engine car ces derniers sont davantage contrôlés par l'utilisateur et ne sont pas redémarrés chaque semaine.

J'ai juste reproduit et je peux confirmer que :

  • En re-déployant 1 sur 1 le SIGTERM et un SIGKILL sont envoyés
  • Lors du redémarrage hebdomadaire, un SIGTERM et un SIGKILL sont envoyés
  • En re-déployant en augmentant les instances, un SIGTERM et un SIGKILL sont envoyés
  • En re-déployant en réduisant les instances (de 2 à 1), je peux voir qu'un SIGTERM et un SIGKILL sont envoyés sur chaque instance.

Ces journaux sont générés sur le log : appengine.googleapis.com/vm.shutdown donc si vous souhaitez continuer à utiliser App Engine, vous pouvez attendre ces signaux qui vous donneront 3 secondes avant que l'arrêt effectif ne soit effectué.

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