7 bonnes pratiques d'utilisation des conteneurs selon Google

Noter. trad.: L'auteur de l'article original est Théo Chamley, Google Cloud Solutions Architect. Dans cet article pour le blog Google Cloud, il propose un résumé du guide plus détaillé de son entreprise, intitulé "Meilleures pratiques pour l’exploitation des conteneurs" Dans ce document, les experts de Google ont rassemblé les meilleures pratiques d'exploitation des conteneurs dans le contexte de l'utilisation de Google Kubernetes Engine et plus encore, abordant un large éventail de sujets : de la sécurité à la surveillance et à la journalisation. Alors, quelles sont les pratiques les plus importantes en matière de conteneurs selon Google ?

7 bonnes pratiques d'utilisation des conteneurs selon Google

Moteur Kubernetes (Service basé sur Kubernetes pour exécuter des applications conteneurisées sur Google Cloud - environ. traduction) est l’un des meilleurs moyens d’exécuter des charges de travail qui doivent évoluer. Kubernetes assurera le bon fonctionnement de la plupart des applications si elles sont conteneurisées. Mais si vous souhaitez que votre application soit facile à gérer et que vous souhaitez profiter pleinement de Kubernetes, vous devez suivre les meilleures pratiques. Ils simplifieront le fonctionnement de l'application, sa surveillance et son débogage, et augmenteront également la sécurité.

Dans cet article, nous passerons en revue une liste de choses que vous devez savoir et faire pour exécuter efficacement des conteneurs sur Kubernetes. Ceux qui souhaitent approfondir les détails devraient lire le matériel Meilleures pratiques pour l’exploitation des conteneurs, et faites également attention à notre message précédent sur l'assemblage des conteneurs.

1. Utilisez les mécanismes de journalisation des conteneurs natifs

Si l’application s’exécute sur un cluster Kubernetes, peu de choses sont nécessaires pour les journaux. Un système de journalisation centralisé est probablement déjà intégré au cluster que vous utilisez. Dans le cas de l'utilisation de Kubernetes Engine, cela est responsable Journalisation Stackdriver. (Noter. trad.: Et si vous utilisez votre propre installation Kubernetes, nous vous recommandons de regarder de plus près notre solution Open Source - chalet.) Gardez la vie simple et utilisez des mécanismes de journalisation de conteneurs natifs. Écrivez les journaux sur stdout et stderr - ils seront automatiquement reçus, enregistrés et indexés.

Si vous le souhaitez, vous pouvez également écrire des journaux dans Format JSON. Cette approche permettra de leur ajouter facilement des métadonnées. Et avec eux, Stackdriver Logging aura la possibilité de rechercher dans les journaux à l'aide de ces métadonnées.

2. Assurez-vous que les conteneurs sont apatrides et immuables

Pour que les conteneurs fonctionnent correctement dans un cluster Kubernetes, ils doivent être sans état et immuables. Une fois ces conditions remplies, Kubernetes peut faire son travail, en créant et en détruisant des entités d'application quand et où cela est nécessaire.

Apatride signifie que tout état (données persistantes de toute nature) est stocké en dehors du conteneur. Pour cela, en fonction des besoins, différents types de stockage externe peuvent être utilisés : cloud Storage, Disques persistants, Redis, Cloud SQL ou d'autres bases de données gérées. (Noter. trad.: En savoir plus à ce sujet dans notre article «Opérateurs pour Kubernetes : comment exécuter des applications avec état".)

Immuable signifie que le conteneur ne sera pas modifié au cours de sa vie : pas de mises à jour, de patchs, de changements de configuration. Si vous devez mettre à jour le code de votre application ou appliquer un correctif, créez une nouvelle image et déployez-la. Il est recommandé de déplacer la configuration du conteneur (port d'écoute, options d'environnement d'exécution, etc.) vers l'extérieur - vers Secrets и Cartes de configuration. Ils peuvent être mis à jour sans avoir à créer une nouvelle image de conteneur. Pour créer facilement des pipelines avec un assemblage d'images, vous pouvez utiliser Création en nuage. (Noter. trad.: Nous utilisons un outil Open Source à ces fins dapp.)

7 bonnes pratiques d'utilisation des conteneurs selon Google
Un exemple de mise à jour de la configuration de déploiement dans Kubernetes à l'aide de ConfigMap monté dans des pods en tant que configuration

3. Évitez les conteneurs privilégiés

Vous n'exécutez pas d'applications en tant que root sur vos serveurs, n'est-ce pas ? Si un attaquant pénètre dans l'application, il obtiendra un accès root. Les mêmes considérations s’appliquent à la non-exécution de conteneurs privilégiés. Si vous devez modifier les paramètres de l'hôte, vous pouvez attribuer des paramètres spécifiques au conteneur. capacités en utilisant l'option securityContext dans Kubernetes. Si vous devez changer sysctl, Kubernetes a résumé séparé pour ça. En général, essayez de tirer le meilleur parti de initialiser- et des conteneurs side-car pour effectuer des opérations privilégiées similaires. Ils n'ont pas besoin d'être accessibles au trafic interne ou externe.

Si vous administrez un cluster, vous pouvez utiliser Politique de sécurité des pods pour les restrictions sur l’utilisation des conteneurs privilégiés.

4. Évitez d'exécuter en tant que root

Les conteneurs privilégiés ont déjà été évoqués, mais ce sera encore mieux si, en plus de cela, vous n'exécutez pas d'applications à l'intérieur du conteneur en tant que root. Si un attaquant découvre une vulnérabilité distante dans une application avec les droits root permettant l'exécution de code, après quoi il peut quitter le conteneur via une vulnérabilité encore inconnue, il obtiendra la racine sur l'hôte.

La meilleure façon d’éviter cela est de ne rien exécuter en tant que root en premier lieu. Pour ce faire, vous pouvez utiliser la directive USER в Dockerfile ou runAsUser dans Kubernetes. L'administrateur du cluster peut également configurer le comportement d'application à l'aide de Politique de sécurité des pods.

5. Rendre l’application facile à surveiller

Tout comme la journalisation, la surveillance fait partie intégrante de la gestion des applications. Une solution de surveillance populaire dans la communauté Kubernetes est Prométhée - un système qui détecte automatiquement les pods et les services nécessitant une surveillance. (Noter. trad.: Voir aussi notre rapport détaillé sur le thème de la surveillance à l'aide de Prometheus et Kubernetes.) Pilote de pile est capable de surveiller les clusters Kubernetes et inclut sa propre version de Prometheus pour la surveillance des applications.

7 bonnes pratiques d'utilisation des conteneurs selon Google
Tableau de bord Kubernetes sur Stackdriver

Prometheus s'attend à ce que l'application transmette les métriques au point de terminaison HTTP. Disponible pour cela Bibliothèques clientes Prometheus. Le même format est utilisé par d'autres outils comme Recensement ouvert и Istio.

6. Rendre disponible l'état de santé de l'application

La gestion des applications en production est facilitée par sa capacité à communiquer son état à l'ensemble du système. L'application est-elle en cours d'exécution ? C'est OK? Êtes-vous prêt à recevoir du trafic ? Comment se comporte-t-il ? Le moyen le plus courant de résoudre ce problème consiste à mettre en œuvre des contrôles de santé. (bilans de santé). Kubernetes a deux types : sondes de vivacité et de préparation.

Pour sonde de vivacité (billets de vitalité) l'application doit avoir un point de terminaison HTTP qui renvoie une réponse « 200 OK » si elle est fonctionnelle et que ses dépendances de base sont satisfaites. Pour la sonde de préparation (vérifications de préparation au service) l'application doit avoir un autre point de terminaison HTTP qui renvoie une réponse « 200 OK » si l'application est dans un état sain, les étapes d'initialisation ont été terminées et toute demande valide n'entraîne pas d'erreur. Kubernetes n'acheminera le trafic vers le conteneur que si l'application est prête selon ces vérifications. Deux points de terminaison peuvent être fusionnés s’il n’y a aucune différence entre les états d’activité et de préparation.

Vous pouvez en savoir plus à ce sujet dans l'article connexe de Sandeep Dinesh, Developer Advocate de Google : «Bonnes pratiques Kubernetes : mise en place de contrôles d'état avec des sondes de préparation et d'activité».

7. Choisissez soigneusement la version de votre image

La plupart des images publiques et privées utilisent un système de marquage similaire à celui décrit dans Meilleures pratiques pour la création de conteneurs. Si l'image utilise un système proche de versionnement sémantique, il est nécessaire de prendre en compte les spécificités du marquage. Par exemple, balisez latest peut se déplacer fréquemment d'une image à l'autre - on ne peut pas s'y fier si vous avez besoin de versions et d'installations prévisibles et reproductibles.

Vous pouvez utiliser la balise X.Y.Z (ils sont presque toujours inchangés), mais dans ce cas, gardez une trace de tous les correctifs et mises à jour de l'image. Si l'image que vous utilisez a une balise X.Y, c'est une bonne option pour le juste milieu. En le choisissant, vous recevez automatiquement les correctifs et en même temps vous appuyez sur la version stable de l'application.

PS du traducteur

A lire aussi sur notre blog :

Source: habr.com

Ajouter un commentaire