{"id":37475,"date":"2019-10-31T22:17:51","date_gmt":"2019-10-31T19:17:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\/"},"modified":"2019-10-31T22:17:51","modified_gmt":"2019-10-31T19:17:51","slug":"instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","title":{"rendered":"Outils pour les d\u00e9veloppeurs d'applications ex\u00e9cut\u00e9es dans Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Outils pour les d\u00e9veloppeurs d&#039;applications ex\u00e9cut\u00e9es dans Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/ad1f46a3562dcefacaa1722ee1ce3387.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'approche moderne en mati\u00e8re d'exploitation r\u00e9sout de nombreux probl\u00e8mes urgents pour les entreprises. Les conteneurs et les orchestrateurs permettent de faire \u00e9voluer facilement des projets de toute complexit\u00e9, facilitent les d\u00e9ploiements de nouvelles versions, les rendant plus fiables, mais en m\u00eame temps cr\u00e9ent \u00e9galement des probl\u00e8mes suppl\u00e9mentaires pour les d\u00e9veloppeurs. Ce qui pr\u00e9occupe principalement un programmeur, c'est son code : l'architecture, la qualit\u00e9, la performance, l'\u00e9l\u00e9gance, et non pas comment cela fonctionnera dans Kubernetes ou comment le tester et le d\u00e9boguer apr\u00e8s avoir effectu\u00e9 m\u00eame des corrections mineures. Il est donc tout \u00e0 fait logique que des outils pour Kubernetes se d\u00e9veloppent activement, aidant \u00e0 r\u00e9soudre les probl\u00e8mes m\u00eame des d\u00e9veloppeurs les plus \u00ab archa\u00efques \u00bb et leur permettant de se concentrer sur l'essentiel.<\/p>\n<p>Cet aper\u00e7u pr\u00e9sente des informations br\u00e8ves sur certains outils qui facilitent la vie des programmeurs dont le code s'ex\u00e9cute dans les pods d'un cluster Kubernetes.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Aides simples<\/h2>\n<p><\/p>\n<h3>Kubectl-debug<\/h3>\n<p><\/p>\n<ul>\n<li> Essence : <b>ajoutez votre conteneur au pod et voyez ce qui s'y passe<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aylei\/kubectl-debug\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques br\u00e8ves GH : 715 \u00e9toiles, 54 commits, 9 contributeurs.<\/li>\n<li> Langage : Go.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nCe plugin pour kubectl permet de cr\u00e9er un conteneur suppl\u00e9mentaire \u00e0 l'int\u00e9rieur d'un pod int\u00e9ressant, qui partagera l'espace de noms des processus avec les autres conteneurs. Il permet de d\u00e9boguer le fonctionnement du pod : v\u00e9rifier le fonctionnement du r\u00e9seau, \u00e9couter le trafic r\u00e9seau, effectuer un strace sur le processus d'int\u00e9r\u00eat, etc.<\/p>\n<p>Vous pouvez \u00e9galement basculer dans le conteneur du processus en ex\u00e9cutant <code>chroot \/proc\/PID\/root<\/code> \u2014 cela peut \u00eatre tr\u00e8s pratique lorsque vous avez besoin d'obtenir un shell root dans un conteneur pour lequel le manifeste est configur\u00e9 avec <code>securityContext.runAs<\/code>.<\/p>\n<p>L'outil est simple et efficace, donc il peut \u00eatre utile \u00e0 chaque d\u00e9veloppeur. Nous en avons parl\u00e9 plus en d\u00e9tail dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">un article s\u00e9par\u00e9<\/a><\/noindex>.<\/p>\n<h3>Telepresence<\/h3>\n<p><\/p>\n<ul>\n<li> Essence : <b>d\u00e9placez l'application sur votre ordinateur. D\u00e9veloppez et d\u00e9boguez localement<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/www.telepresence.io\/\">Site<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/telepresenceio\/telepresence\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques br\u00e8ves GH : 2131 \u00e9toiles, 2712 commits, 33 contributeurs.<\/li>\n<li> Langage : Python.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nL'id\u00e9e de cet outil est de lancer un conteneur avec l'application sur l'ordinateur utilisateur local et de faire passer tout le trafic du cluster vers celui-ci et vice versa. Cette approche permet de d\u00e9velopper localement simplement en modifiant les fichiers dans votre IDE pr\u00e9f\u00e9r\u00e9 : les r\u00e9sultats seront disponibles imm\u00e9diatement.<\/p>\n<p>Les avantages du lancement local incluent la facilit\u00e9 des modifications et le r\u00e9sultat instantan\u00e9, ainsi que la possibilit\u00e9 de d\u00e9boguer l'application de mani\u00e8re famili\u00e8re. En revanche, les inconv\u00e9nients incluent des exigences \u00e9lev\u00e9es en mati\u00e8re de vitesse de connexion, ce qui est particuli\u00e8rement perceptible lorsque l'on travaille avec une application ayant un RPS et un trafic suffisamment \u00e9lev\u00e9s. De plus, Telepresence pr\u00e9sente des probl\u00e8mes avec les volumes docker sous Windows, ce qui peut devenir un obstacle d\u00e9cisif pour les d\u00e9veloppeurs habitu\u00e9s \u00e0 ce syst\u00e8me d'exploitation.<\/p>\n<p>Nous avons d\u00e9j\u00e0 partag\u00e9 notre exp\u00e9rience d'utilisation de Telepresence <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">ici<\/a><\/noindex>.<\/p>\n<h3>Ksync<\/h3>\n<p><\/p>\n<ul>\n<li> Essence : <b>synchronisation presque instantan\u00e9e du code avec le conteneur dans le cluster<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vapor-ware\/ksync\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques br\u00e8ves de GH : 555 \u00e9toiles, 362 commits, 11 contributeurs.<\/li>\n<li> Langage : Go.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nCet utilitaire permet de synchroniser le contenu d'un r\u00e9pertoire local avec le r\u00e9pertoire d'un conteneur ex\u00e9cut\u00e9 dans le cluster. Cet outil est particuli\u00e8rement adapt\u00e9 aux d\u00e9veloppeurs utilisant des langages de script, dont le principal probl\u00e8me est de livrer le code dans un conteneur op\u00e9rationnel. Ksync est con\u00e7u pour \u00e9liminer ce tracas.<\/p>\n<p>Avec une initialisation unique via la commande <code>ksync init<\/code> un DaemonSet est cr\u00e9\u00e9 dans le cluster, utilis\u00e9 pour suivre l'\u00e9tat du syst\u00e8me de fichiers du conteneur s\u00e9lectionn\u00e9. Sur son ordinateur local, le d\u00e9veloppeur ex\u00e9cute la commande <code>ksync watch<\/code>, qui surveille les configurations et lance <noindex><a rel=\"nofollow\" href=\"https:\/\/syncthing.net\/\">syncthing<\/a><\/noindex>, qui effectue la synchronisation directe des fichiers avec le cluster.<\/p>\n<p>Il ne reste plus qu'\u00e0 instruire ksync sur ce qu'il faut synchroniser et avec quoi. Par exemple, cette commande :<\/p>\n<pre><code class=\"plaintext\">ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false \/home\/user\/myproject\/ \/var\/www\/myproject\/<\/code><\/pre>\n<p>\n... cr\u00e9era un watcher nomm\u00e9 <code>myproject<\/code>, qui recherchera un pod avec l'\u00e9tiquette <code>app=backend<\/code> et tentera de synchroniser le r\u00e9pertoire local <code>\/home\/user\/myproject\/<\/code> avec le r\u00e9pertoire <code>\/var\/www\/myproject\/<\/code> du conteneur nomm\u00e9 <code>php<\/code>.<\/p>\n<p>Probl\u00e8mes et remarques sur ksync de notre exp\u00e9rience :<\/p>\n<ul>\n<li> Les n\u0153uds du cluster Kubernetes doivent utiliser <code>overlay2<\/code> comme driver de stockage pour Docker. Aucun autre utilitaire ne fonctionnera.<\/li>\n<li> Lors de l'utilisation de Windows comme syst\u00e8me d'exploitation client, le fonctionnement du watcher de fichiers peut \u00eatre incorrect. Ce bug a \u00e9t\u00e9 remarqu\u00e9 lors de l'utilisation de grands r\u00e9pertoires \u2014 avec un grand nombre de fichiers et de sous-r\u00e9pertoires. Nous avons cr\u00e9\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/syncthing\/syncthing\/issues\/5832\">un probl\u00e8me associ\u00e9<\/a><\/noindex> dans le projet syncthing, mais il n'y a pas eu de progr\u00e8s \u00e0 ce jour (d\u00e9but juillet).<\/li>\n<li> Utilisez le fichier <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.syncthing.net\/users\/ignoring.html\"><code>.stignore<\/code><\/a><\/noindex> pour sp\u00e9cifier les chemins ou les mod\u00e8les de fichiers \u00e0 ne pas synchroniser (par exemple, les r\u00e9pertoires <code>app\/cache<\/code> et <code>.git<\/code>).<\/li>\n<li> Par d\u00e9faut, ksync red\u00e9marrera le conteneur \u00e0 chaque modification de fichier. Pour Node.js, c'est pratique, mais pour PHP, c'est compl\u00e8tement inutile. Il vaut mieux d\u00e9sactiver opcache et utiliser le drapeau <code>--reload=false<\/code>.<\/li>\n<li> La configuration peut toujours \u00eatre corrig\u00e9e dans <code>$HOME\/.ksync\/ksync.yaml<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Squash<\/h3>\n<p><\/p>\n<ul>\n<li> Essence : <b>d\u00e9bugger les processus directement dans le cluster<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/solo-io\/squash\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques succinctes de GH : 1154 \u00e9toiles, 279 commits, 23 contributeurs.<\/li>\n<li> Langage : Go.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nCet outil est destin\u00e9 \u00e0 d\u00e9boguer des processus directement dans les pods. L'utilitaire est simple et permet en mode interactif de choisir le d\u00e9bogueur souhait\u00e9. <i>(voir ci-dessous)<\/i> et l\u2019espace de noms + le pod, dans le processus duquel il faut intervenir. Actuellement, sont pris en charge :<\/p>\n<ul>\n<li> delve \u2014 pour les applications en Go ;<\/li>\n<li> GDB \u2014 via target remote + redirection de port ;<\/li>\n<li> redirection de port JDWP pour le d\u00e9bogage des applications Java.<\/li>\n<\/ul>\n<p>\nDu c\u00f4t\u00e9 IDE, le support existe seulement dans VScode (avec <noindex><a rel=\"nofollow\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ilevine.squash\">les extensions<\/a><\/noindex>), mais pour l'ann\u00e9e en cours (2019) sont pr\u00e9vus Eclipse et Intellij.<\/p>\n<p>Pour d\u00e9boguer des processus, Squash lance un conteneur privil\u00e9gi\u00e9 sur les n\u0153uds du cluster, il est donc n\u00e9cessaire de se familiariser d'abord avec les capacit\u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/squash.solo.io\/secure_mode\/\">du mode s\u00e9curis\u00e9<\/a><\/noindex> afin d'\u00e9viter des probl\u00e8mes de s\u00e9curit\u00e9.<\/p>\n<h2>Solutions complexes<\/h2>\n<p>\nPassons \u00e0 l'artillerie lourde \u2014 des projets plus 'scalables' destin\u00e9s \u00e0 r\u00e9pondre simultan\u00e9ment \u00e0 de nombreux besoins des d\u00e9veloppeurs.<\/p>\n<p><i><b>NB<\/b>: Cette liste inclut sans aucun doute notre utilitaire Open Source <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333682\/\"><b>werf<\/b><\/a><\/noindex> (anciennement connu sous le nom de dapp). Cependant, nous avons d\u00e9j\u00e0 \u00e9crit et parl\u00e9 \u00e0 plusieurs reprises \u00e0 son sujet, et nous avons donc d\u00e9cid\u00e9 de ne pas l'inclure dans cet aper\u00e7u. Pour ceux qui souhaitent en savoir plus sur ses fonctionnalit\u00e9s, nous recommandons de lire\/\u00e9couter la pr\u00e9sentation \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 notre outil pour CI\/CD dans Kubernetes<\/a><\/noindex>\u00bb.<\/i><\/p>\n<h3>DevSpace<\/h3>\n<p><\/p>\n<ul>\n<li> Essence : <b>pour ceux qui souhaitent commencer \u00e0 travailler avec Kubernetes, mais ne veulent pas s'enfoncer profond\u00e9ment dans ses m\u00e9andres<\/b>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devspace-cloud\/devspace\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques succinctes de GH : 630 \u00e9toiles, 1912 commits, 13 contributeurs.<\/li>\n<li> Langage : Go.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nSolution de la soci\u00e9t\u00e9 \u00e9ponyme, fournissant des clusters g\u00e9r\u00e9s avec Kubernetes pour le d\u00e9veloppement en \u00e9quipe. L'utilitaire a \u00e9t\u00e9 con\u00e7u pour des clusters commerciaux, mais fonctionne parfaitement avec n'importe quel autre.<\/p>\n<p>Lors de l'ex\u00e9cution de la commande <code>devspace init<\/code> dans le r\u00e9pertoire du projet, vous serez invit\u00e9 (en mode interactif) :<\/p>\n<ul>\n<li> \u00e0 choisir un cluster Kubernetes actif,<\/li>\n<li> \u00e0 utiliser l'existant <code>Dockerfile<\/code> (ou \u00e0 en g\u00e9n\u00e9rer un nouveau) pour cr\u00e9er un conteneur bas\u00e9 sur celui-ci,<\/li>\n<li> \u00e0 choisir un d\u00e9p\u00f4t pour stocker les images de conteneurs, etc.<\/li>\n<\/ul>\n<p>\nApr\u00e8s toutes ces \u00e9tapes pr\u00e9paratoires, vous pouvez commencer le d\u00e9veloppement en ex\u00e9cutant la commande <code>devspace dev<\/code>. Cela rassemblera le conteneur, le t\u00e9l\u00e9chargera dans le d\u00e9p\u00f4t, d\u00e9ploiera l'application dans le cluster et lancera le redirectionnement des ports ainsi que la synchronisation du conteneur avec le r\u00e9pertoire local.<\/p>\n<p>Il vous sera propos\u00e9 en option d'entrer dans le conteneur via le terminal. Il vaut mieux ne pas d\u00e9cliner cette option, car en r\u00e9alit\u00e9, le conteneur d\u00e9marre avec la commande sleep, et pour un test r\u00e9el, l'application doit \u00eatre lanc\u00e9e manuellement.<\/p>\n<p>Enfin, la commande <code>devspace deploy<\/code> d\u00e9ploie l'application et l'infrastructure associ\u00e9e dans le cluster, apr\u00e8s quoi tout commence \u00e0 fonctionner en mode production.<\/p>\n<p>Toute la configuration du projet est sauvegard\u00e9e dans le fichier <code>devspace.yaml<\/code>. En plus des r\u00e9glages de l'environnement de d\u00e9veloppement, vous y trouverez \u00e9galement une description de l'infrastructure, ressemblant \u00e0 des manifestes Kubernetes standards, mais fortement simplifi\u00e9s.<\/p>\n<p><img decoding=\"async\" alt=\"Outils pour les d\u00e9veloppeurs d&#039;applications ex\u00e9cut\u00e9es dans Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/7abbba3806facfb69ba4e3f9e0f18938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architecture et \u00e9tapes cl\u00e9s de travail avec DevSpace<\/i><\/p>\n<p>De plus, il est facile d'ajouter un composant pr\u00e9d\u00e9fini au projet (comme une base de donn\u00e9es MySQL) ou un Helm chart. Pour plus de d\u00e9tails, lisez <noindex><a rel=\"nofollow\" href=\"https:\/\/devspace.cloud\/docs\/\">documentation<\/a><\/noindex> \u2014 ce n'est pas compliqu\u00e9.<\/p>\n<h3>Skaffold<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/skaffold.dev\/\">Site<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/skaffold\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques succinctes sur GH : 7423 \u00e9toiles, 4173 commits, 136 contributeurs.<\/li>\n<li> Langage : Go.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nCet utilitaire de Google pr\u00e9tend couvrir tous les besoins des d\u00e9veloppeurs dont le code sera ex\u00e9cut\u00e9 d'une mani\u00e8re ou d'une autre dans un cluster Kubernetes. Commencer \u00e0 l'utiliser n'est pas aussi simple que devspace : aucune interactivit\u00e9, d\u00e9finition de la langue et cr\u00e9ation automatique. <code>Dockerfile<\/code> ceci ne vous sera pas propos\u00e9 ici.<\/p>\n<p>Cependant, si cela ne vous effraie pas, voici ce que Skaffold permet de faire :<\/p>\n<ul>\n<li> Surveiller les changements dans le code source.<\/li>\n<li> Le synchroniser avec le conteneur du pod, s'il ne n\u00e9cessite pas de construction.<\/li>\n<li> Construire des conteneurs avec le code si le langage de programmation est interpr\u00e9t\u00e9, ou compiler des artefacts et les emballer dans des conteneurs.<\/li>\n<li> V\u00e9rifier automatiquement les images g\u00e9n\u00e9r\u00e9es \u00e0 l'aide de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/container-structure-test\">container-structure-test<\/a><\/noindex>.<\/li>\n<li> Taguer et t\u00e9l\u00e9charger les images dans le Docker Registry.<\/li>\n<li> D\u00e9ployer l'application dans le cluster en utilisant kubectl, Helm ou kustomize.<\/li>\n<li> Faire du redirectionnement de ports.<\/li>\n<li> D\u00e9boguer des applications \u00e9crites en Java, Node.js, Python.<\/li>\n<\/ul>\n<p>\nLe flux de travail dans diverses variations est d\u00e9crit de mani\u00e8re d\u00e9clarative dans le fichier <code>skaffold.yaml<\/code>. Pour le projet, plusieurs profils peuvent \u00e9galement \u00eatre d\u00e9finis, o\u00f9 les \u00e9tapes de construction et de d\u00e9ploiement peuvent \u00eatre partiellement ou totalement modifi\u00e9es. Par exemple, pour le d\u00e9veloppement, sp\u00e9cifiez une image de base confortable pour le d\u00e9veloppeur, tandis que pour le staging et la production, une image minimale peut \u00eatre utilis\u00e9e (+ utiliser <code>securityContext<\/code> des conteneurs ou red\u00e9finir le cluster dans lequel l'application sera d\u00e9ploy\u00e9e).<\/p>\n<p>La construction des conteneurs Docker peut \u00eatre effectu\u00e9e localement ou \u00e0 distance : dans <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/cloud-build\/\">Google Cloud Build<\/a><\/noindex> ou dans un cluster \u00e0 l'aide de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\">Kaniko<\/a><\/noindex>. Bazel et Jib Maven\/Gradle sont \u00e9galement pris en charge. Pour le tagging, Skaffold supporte de nombreuses strat\u00e9gies : par hash de commit git, date\/heure, somme sha256 des sources, etc.<\/p>\n<p>Il convient \u00e9galement de noter la possibilit\u00e9 de tester les conteneurs. Le framework mentionn\u00e9 pr\u00e9c\u00e9demment, container-structure-test, propose les m\u00e9thodes de v\u00e9rification suivantes :<\/p>\n<ul>\n<li> Ex\u00e9cution de commandes dans le contexte du conteneur avec suivi des codes de sortie et v\u00e9rification de la sortie textuelle de la commande.<\/li>\n<li> V\u00e9rification de la pr\u00e9sence de fichiers dans le conteneur et de la conformit\u00e9 des attributs sp\u00e9cifi\u00e9s.<\/li>\n<li> Contr\u00f4le du contenu des fichiers via des expressions r\u00e9guli\u00e8res.<\/li>\n<li> Comparaison des m\u00e9tadonn\u00e9es de l'image (<code>ENV<\/code>, <code>ENTRYPOINT<\/code>, <code>VOLUMES<\/code> etc.).<\/li>\n<li> V\u00e9rification de la compatibilit\u00e9 des licences.<\/li>\n<\/ul>\n<p>\nLa synchronisation des fichiers avec le conteneur n'est pas la m\u00e9thode la plus optimale : Skaffold cr\u00e9e simplement une archive avec les sources, la copie et la d\u00e9compresse dans le conteneur (tar doit \u00eatre install\u00e9). Donc, si votre t\u00e2che principale est la synchronisation du code, il est pr\u00e9f\u00e9rable de regarder vers une solution sp\u00e9cialis\u00e9e (ksync).<\/p>\n<p><img decoding=\"async\" alt=\"Outils pour les d\u00e9veloppeurs d&#039;applications ex\u00e9cut\u00e9es dans Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/a53647e9d3bf002c292dcae7a774e561.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Les principales \u00e9tapes de fonctionnement de Skaffold<\/i><\/p>\n<p>Dans l'ensemble, l'outil ne permet pas de s'abstraire des manifests Kubernetes et n'a pas d'interactivit\u00e9, ce qui peut le rendre difficile \u00e0 ma\u00eetriser. Mais c'est \u00e9galement son avantage - une plus grande libert\u00e9 d'action.<\/p>\n<h3>Garden<\/h3>\n<p><\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/garden.io\/\">Site<\/a><\/noindex>; <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\">GitHub<\/a><\/noindex>.<\/li>\n<li> Statistiques succinctes sur GH : 1063 \u00e9toiles, 1927 commits, 17 contributeurs.<\/li>\n<li> Langage : TypeScript <i>(il est pr\u00e9vu de diviser le projet en plusieurs composants, dont certains seront en Go, ainsi que de cr\u00e9er un SDK pour le d\u00e9veloppement d'extensions en TypeScript\/JavaScript et Go)<\/i>.<\/li>\n<li> Licence : Apache License 2.0.<\/li>\n<\/ul>\n<p>\nTout comme Skaffold, Garden vise \u00e0 automatiser les processus de livraison du code de l'application vers le cluster K8s. Pour cela, il est d'abord n\u00e9cessaire de d\u00e9crire la structure du projet dans un fichier YAML, puis de lancer la commande <code>garden dev<\/code>. Cela fera toute la magie :<\/p>\n<ul>\n<li> Construire des conteneurs avec diff\u00e9rentes parties du projet.<\/li>\n<li> Effectuer des tests d'int\u00e9gration et unitaires, si ceux-ci ont \u00e9t\u00e9 d\u00e9crits.<\/li>\n<li> D\u00e9ploie tous les composants du projet dans le cluster.<\/li>\n<li> En cas de modification du code source, relancera l'ensemble du pipeline.<\/li>\n<\/ul>\n<p>\nL'accent est mis sur le partage collaboratif d'un cluster distant par l'\u00e9quipe de d\u00e9veloppeurs lors de l'utilisation de cet outil. Dans ce cas, si certaines \u00e9tapes de compilation et de test ont d\u00e9j\u00e0 \u00e9t\u00e9 effectu\u00e9es, cela acc\u00e9l\u00e9rera consid\u00e9rablement tout le processus, car Garden pourra utiliser les r\u00e9sultats mis en cache.<\/p>\n<p>Le module du projet peut \u00eatre un conteneur, un conteneur Maven, un chart Helm, un manifeste pour <code>kubectl apply<\/code> ou m\u00eame une fonction OpenFaaS. De plus, n'importe quel module peut \u00eatre tir\u00e9 d'un r\u00e9f\u00e9rentiel Git distant. Le module peut d\u00e9finir (ou non) des services, des t\u00e2ches et des tests. Les services et les t\u00e2ches peuvent avoir des d\u00e9pendances, ce qui permet de d\u00e9finir l'ordre de d\u00e9ploiement de chaque service, d'organiser le lancement des t\u00e2ches et des tests.<\/p>\n<p>Garden offre \u00e0 l'utilisateur un joli tableau de bord (pour l'instant en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/dashboard\">\u00e9tat exp\u00e9rimental<\/a><\/noindex>), qui affiche le graphique du projet : les composants, l'ordre de compilation, l'ex\u00e9cution des t\u00e2ches et des tests, ainsi que leurs relations et d\u00e9pendances. Dans le navigateur, vous pouvez \u00e9galement consulter les journaux de tous les composants du projet, v\u00e9rifier ce que renvoie tel ou tel composant via HTTP (s'il y a bien une ressource ingress d\u00e9clar\u00e9e pour cela).<\/p>\n<p><img decoding=\"async\" alt=\"Outils pour les d\u00e9veloppeurs d&#039;applications ex\u00e9cut\u00e9es dans Kubernetes\" src=\"\/wp-content\/uploads\/2019\/08\/931b48a306fcce025e4dd8aa51d01552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Le panneau pour Garden<\/i><\/p>\n<p>Cet outil dispose \u00e9galement d'un mode de rechargement \u00e0 chaud, qui synchronise simplement les modifications des scripts avec le conteneur dans le cluster, acc\u00e9l\u00e9rant consid\u00e9rablement le processus de d\u00e9bogage de l'application. Garden offre un bon <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.garden.io\/\">documentation<\/a><\/noindex> ensemble correct d'exemples <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/garden-io\/garden\/tree\/master\/examples\">, permettant de se familiariser rapidement et de commencer \u00e0 l'utiliser. D'ailleurs, nous avons tout r\u00e9cemment publi\u00e9<\/a><\/noindex>la traduction d'un article <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">de ses auteurs.<\/a><\/noindex> \u00c9videmment, cette liste d'outils pour le d\u00e9veloppement et le d\u00e9bogage d'applications dans Kubernetes n'est pas exhaustive. Il existe encore de nombreux utilitaires tr\u00e8s utiles et pratiques, dignes non seulement d'un article \u00e0 part, mais au minimum d'une mention. Dites-nous quels outils vous utilisez, quels probl\u00e8mes vous avez rencontr\u00e9s et comment vous les avez r\u00e9solus !<\/p>\n<h2>Conclusion<\/h2>\n<p>\nGarden v0.10.0 : Votre ordinateur portable n'a pas besoin de Kubernetes<\/p>\n<h2>P.S.<\/h2>\n<p>\nLisez aussi dans notre blog :<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf est notre outil pour CI\/CD dans Kubernetes (aper\u00e7u et vid\u00e9o de la pr\u00e9sentation).<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459586\/\">Conseils et astuces Kubernetes : sur le d\u00e9veloppement local et Telepresence<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/446788\/\">Le plugin kubectl-debug pour le d\u00e9bogage dans les pods Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/436112\/\">Le plugin kubectl-debug pour le d\u00e9bogage dans les pods Kubernetes.<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/462707\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0443\u0449\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441\u0430. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0440\u0435\u043b\u0438\u0437\u044b \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0434\u0435\u043b\u0430\u044e\u0442 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u043c\u0438, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u0431\u043e\u0442\u0438\u0442 \u0435\u0433\u043e \u043a\u043e\u0434: \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u2014 \u0430 \u043d\u0435 \u0442\u043e, \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0435\u0434\u0435\u0442 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Outils pour les d\u00e9veloppeurs d'applications d\u00e9ploy\u00e9es sur Kubernetes | ProHoster","description":"\ud83e\udd47 Outils pour les d\u00e9veloppeurs d'applications s'ex\u00e9cutant dans Kubernetes | ProHoster","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0432 Kubernetes | ProHoster","og:description":"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/instrumenty-dlya-razrabotchikov-prilozhenij-zapuskaemyh-v-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:51+00:00","article:modified_time":"2019-10-31T19:17:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37475","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:00:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:26:27","updated":"2026-01-23 18:00:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37475"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28120"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}