{"id":24733,"date":"2026-09-16T16:57:30","date_gmt":"2026-09-16T16:57:30","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/"},"modified":"2026-09-16T16:57:30","modified_gmt":"2026-09-16T16:57:30","slug":"creer-des-environnements-de-developpement-avec-kubernetes-devgun","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/","title":{"rendered":"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Lorsque nous avons commenc\u00e9 \u00e0 cr\u00e9er des environnements de d\u00e9veloppement locaux, nous nous sommes tourn\u00e9s vers des outils courants comme Vagrant. Mais, comme pour la plupart des environnements construits avec Vagrant, les temps de compilation sont longs. Par cons\u00e9quent, les images Vagrant ont une longue dur\u00e9e de vie et ont tendance \u00e0 d\u00e9river avec le temps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nos services et notre infrastructure changent constamment, la compilation Vagrant \u00e9tait donc presque toujours cass\u00e9e. Nous voulions \u00e9viter le traditionnel \u00ab\u00a0rite de passage des nouvelles recrues\u00a0\u00bb, qui implique souvent des jours de travail pour que Vagrant r\u00e9ussisse \u00e0 compiler une nouvelle machine virtuelle de d\u00e9veloppement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l&rsquo;id\u00e9al, les nouvelles recrues peuvent \u00eatre productives dans les heures qui suivent leur embauche, et non des jours ou des semaines plus tard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 tout cela s&rsquo;ajoutait le fait que nous avons beaucoup de microservices qui doivent s&rsquo;ex\u00e9cuter dans l&rsquo;environnement de d\u00e9veloppement et s&rsquo;int\u00e9grer de mani\u00e8re transparente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Les objectifs du projet \u00e9taient simples\u00a0:<\/b><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configurer et d\u00e9truire un environnement de d\u00e9veloppement rapidement et de mani\u00e8re reproductible.<\/li>\n\n\n\n<li>Configuration et destruction de l&rsquo;environnement de d\u00e9veloppement en une seule \u00e9tape.<\/li>\n\n\n\n<li>D\u00e9marrer et arr\u00eater les services, ainsi que leurs d\u00e9pendances, \u00e0 volont\u00e9.<\/li>\n<\/ul>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-1400\"><p class=\"h5 m-0\" id=\"toc-title-1400\">Table des mati\u00e8res<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#evaluer-les-plateformes-dorchestration\">\u00c9valuer les plateformes d&rsquo;orchestration<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#creer-une-interface-en-ligne-de-commande-cli\">Cr\u00e9er une interface en ligne de commande (CLI)<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#gerer-les-services-personnalises-et-tiers-avec-une-specification\">G\u00e9rer les services personnalis\u00e9s et tiers avec une sp\u00e9cification<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#et-maintenant-les-developpements-futurs\">Et maintenant\u2026 les d\u00e9veloppements futurs<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">\u00c9valuer les plateformes d&rsquo;orchestration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puisque nos microservices s&rsquo;ex\u00e9cutaient d\u00e9j\u00e0 dans des conteneurs, nous savions qu&rsquo;il fallait choisir un syst\u00e8me d&rsquo;orchestration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Plusieurs membres de notre \u00e9quipe de d\u00e9veloppement s&rsquo;int\u00e9ressaient \u00e0\u00a0<a href=\"https:\/\/mesosphere.github.io\/marathon\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Mesos Marathon<\/a>, nous l&rsquo;avons donc test\u00e9 en premier. Malheureusement, les exigences en mati\u00e8re de m\u00e9moire et de mat\u00e9riel pour ex\u00e9cuter Marathon dans un petit environnement de d\u00e9veloppement local \u00e9taient beaucoup trop restrictives pour nous. Au moment de nos tests, Minimesos \u00e9tait \u00e9galement incapable de connecter correctement les conteneurs dans Marathon au r\u00e9seau local, ce qui constituait un obstacle majeur pour notre projet. <b>Ces probl\u00e8mes ont montr\u00e9 clairement que Mesos ne serait pas adapt\u00e9 \u00e0 nos besoins.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, nous avons \u00e9valu\u00e9 Kubernetes et\u00a0<a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/install-minikube\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Minikube<\/a>\u00a0car nous \u00e9tions attir\u00e9s par la communaut\u00e9 tr\u00e8s active autour de ces projets. Nous avons constat\u00e9 que l&#8217;empreinte m\u00e9moire \u00e9tait minime, et la mise en r\u00e9seau fonctionnait parfaitement. La plupart des fonctionnalit\u00e9s qui nous int\u00e9ressaient fonctionnaient de base, et l&rsquo;ex\u00e9cution de nos applications tierces dans Minikube s&rsquo;est r\u00e9v\u00e9l\u00e9e plus simple que pr\u00e9vu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En choisissant Minikube comme plateforme, nous avons pu avancer rapidement sur le projet et consacrer la majeure partie de notre temps \u00e0 d\u00e9velopper ce qui allait devenir Devgun.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cr\u00e9er une interface en ligne de commande (CLI)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour atteindre les objectifs de notre projet, nous avons d\u00e9cid\u00e9 de cr\u00e9er une interface en ligne de commande tout-en-un \u00e9crite en Golang. Nous voulions une CLI qui puisse \u00eatre distribu\u00e9e sous forme de binaire unique \u00e0 notre \u00e9quipe de d\u00e9veloppement, nous en avons donc cr\u00e9\u00e9 une appel\u00e9e Devgun.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4854\" width=\"800\" height=\"458\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/minikube-mailgun-devgun.jpg\" alt=\"Minikube and Mailgun logos with plus symbol in between\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/minikube-mailgun-devgun.jpg 800w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/minikube-mailgun-devgun-300x172.jpg 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/minikube-mailgun-devgun-768x440.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Devgun ne fait aucune supposition sur l&rsquo;environnement de d\u00e9veloppement. Il t\u00e9l\u00e9charge automatiquement tous les outils dont il a besoin, notamment Minikube, kubectl et les outils sp\u00e9cifiques \u00e0 Mailgun, dans le r\u00e9pertoire\u00a0<code>\/.devgun\/bin<\/code>. <b>Il vous suffit d&rsquo;ajouter votre chemin d&rsquo;acc\u00e8s une fois la configuration initiale termin\u00e9e. Le fait de tout installer dans un seul r\u00e9pertoire rend la d\u00e9sinstallation aussi simple que\u00a0<\/b><b><code>rm -rf ~\/devgun<\/code><\/b><b>.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons compil\u00e9 tous les fichiers manifestes Kubernetes dans le binaire statique \u00e0 l&rsquo;aide du\u00a0<a href=\"http:\/\/github.com\/tmthrgd\/go-bindata\" target=\"_tabs\" rel=\"noopener noreferrer\">projet go-bindata<\/a>, ce qui permet de t\u00e9l\u00e9charger un seul fichier et de l&rsquo;ex\u00e9cuter pour installer un environnement de d\u00e9veloppement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;ex\u00e9cution de Devgun ressemble \u00e0 ceci\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    $ devgun startrnPulling kubectl                              [done]  rnPulling minikube                             [done]  rnWriting Minikube configuration               [done after 0.702698 seconds]  rnBooting Minikube environment                 [done after 77.297039 seconds]  rnWaiting for Kubernetes..                     [done]  rnINFO[0148] Setting up minikube routes -- enter your sudo password if prompted  rnModifying routes                             [done after 0.012867 seconds]  rnAdding kube-dns resolver entry               [done after 0.002070 seconds]  rnApplying kube-dns-external configuration     [done after 0.212881 seconds]  rnEnabling Heapster                            [done after 37.506335 seconds]  rn========================================================rnMinikube is now configured and running....rnrn# Set up path for our bin directory with dev toolsrnexport PATH=&quot;$PATH:\/Users\/thrawn\/.devgun\/bin&quot;rnrnNext you should choose a mailgun service to start using &lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;devgun service start&lt;\/code&gt;rnrn* Use &lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;devgun service list&lt;\/code&gt; to see a list of services to startrn* Use &lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;devgun service start&lt;\/code&gt; to start a service and its dependenciesrn* Use &lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;kubectl get pods&lt;\/code&gt; to list running podsrn* Use &lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;kubectl describe pod &lt;pod-name&gt;&lt;\/code&gt; to inspect a pod and see the pod logrn* Use &lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;kubectl log &lt;pod-name&gt;&lt;\/code&gt; to see the container logsrn========================================================rn\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">En plus de cr\u00e9er un environnement Kubernetes, Devgun ajoute \u00e9galement quelques routes r\u00e9seau au poste local. Par exemple, sur OS X, les routes suivantes sont ajout\u00e9es\u00a0:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>route -n add 172.17.0.0\/16 <br>\nroute -n add 10.0.0.0\/24   <\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela permet \u00e0 notre \u00e9quipe de d\u00e9veloppement d&rsquo;ex\u00e9cuter et de tester des applications sur leurs postes locaux avec une connectivit\u00e9 compl\u00e8te aux conteneurs du cluster K8, comme si elles s&rsquo;ex\u00e9cutaient dans le cluster lui-m\u00eame. Nous activons \u00e9galement la recherche DNS en utilisant la fonctionnalit\u00e9 de r\u00e9solution int\u00e9gr\u00e9e \u00e0 OS X. Nous cr\u00e9ons\u00a0<code>\/etc\/resolver\/local<\/code>\u00a0avec le contenu suivant\u00a0:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>search cluster.local svc.cluster.local default.svc.cluster.local<br>\nnameserver 172.17.0.3  <\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela permet la r\u00e9solution DNS des services Kubernetes.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    $ devgun service start etcdrnStarting service: etcd                       [done after 7.084730 seconds]rnrn$ ping etcdrnPING etcd.default.svc.cluster.local (172.17.0.4): 56 data bytes  rn64 bytes from 172.17.0.4: icmp_seq=0 ttl=63 time=0.220 ms  rn^Crn--- etcd.default.svc.cluster.local ping statistics ---rn1 packets transmitted, 1 packets received, 0.0% packet loss  rnround-trip min\/avg\/max\/stddev = 0.220\/0.220\/0.220\/0.000 ms  \r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">G\u00e9rer les services personnalis\u00e9s et tiers avec une sp\u00e9cification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puisque Devgun doit g\u00e9rer un m\u00e9lange de services personnalis\u00e9s et tiers, nous avons d\u00e9velopp\u00e9 un fichier de sp\u00e9cification YAML personnalis\u00e9 que nous d\u00e9finissons pour chaque service. Le fichier de sp\u00e9cification ressemble \u00e0 ceci\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    ervice:  rn  name: scoutrn  resources:rn    &lt;&lt;: *k8s_deploy_resourcesrn  depends_on:rn  - name: vulcandrn  - name: cassandrarn  - name: kafka-pixyrn  - name: kafkarn  - name: etcdrn  - name: metricsrn  hooks:rn    pre:rn      start:rn        - exec: &gt;rn            cqlsh -e &quot;CREATE KEYSPACE IF NOT EXISTS scout WITH REPLICATION={&#039;class&#039;:&#039;SimpleStrategy&#039;,&#039;replication_factor&#039;:1}&quot; $POD_IPrn          where: service:cassandra:cassandra\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Il d\u00e9finit un service personnalis\u00e9 appel\u00e9 \u00ab\u00a0scout\u00a0\u00bb, qui lit les \u00e9v\u00e9nements de Kafka et enregistre des statistiques sur les \u00e9v\u00e9nements dans Cassandra. La sp\u00e9cification indique \u00e0 Devgun de quels services personnalis\u00e9s et tiers il d\u00e9pend, et <b>quels hooks ex\u00e9cuter sur les diff\u00e9rents conteneurs avant de d\u00e9marrer le service scout.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La cl\u00e9\u00a0<code>resources<\/code>\u00a0fait r\u00e9f\u00e9rence aux fichiers manifestes Kubernetes (comme ConfigMap, les d\u00e9ploiements et les descriptions de services) d\u00e9finis ailleurs dans le fichier de sp\u00e9cification, que Devgun utilise pour d\u00e9marrer les conteneurs dans K8.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et maintenant\u2026 les d\u00e9veloppements futurs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque nous avons con\u00e7u Devgun, nous sommes partis de la base, sans prendre en compte les sc\u00e9narios de d\u00e9veloppement et de d\u00e9ploiement plus larges. Maintenant que nous avons eu le temps d&rsquo;utiliser Devgun, nous nous demandons si nos abstractions sont correctes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons commenc\u00e9 \u00e0 nous poser des questions\u00a0: quelle exp\u00e9rience voulons-nous offrir \u00e0 notre \u00e9quipe de d\u00e9veloppement lorsqu&rsquo;elle se pr\u00e9pare \u00e0 cr\u00e9er et \u00e0 d\u00e9ployer un nouveau service\u00a0? O\u00f9 s&rsquo;arr\u00eatent les responsabilit\u00e9s du d\u00e9veloppement et o\u00f9 commencent celles des op\u00e9rations\u00a0? Quelle part des op\u00e9rations pouvons-nous automatiser, et quelle part n\u00e9cessite une intervention humaine\u00a0? Comment faciliter la transmission d&rsquo;informations entre le d\u00e9veloppement et les op\u00e9rations\u00a0?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons commenc\u00e9 \u00e0 d\u00e9finir des sc\u00e9narios et des personas qui fa\u00e7onneront <b>l&rsquo;\u00e9volution future de Devgun<\/b>. Dans mon prochain article, je partagerai une partie de notre travail et de nos r\u00e9flexions sur la fa\u00e7on dont l&rsquo;exp\u00e9rience de d\u00e9veloppement pourrait \u00e9voluer \u00e0 mesure que nous continuons \u00e0 travailler avec Kubernetes et Devgun. Inscrivez-vous \u00e0 notre blog pour ne rien manquer.<\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_215b51631774b38a2c4b965d46835fab\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                S&rsquo;inscrire            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_215b51631774b38a2c4b965d46835fab\">\r\n                Lancez-vous, c&rsquo;est facile ! Et c&rsquo;est gratuit.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">D\u00e9couvrez ce que vous pouvez accomplir avec la meilleure plateforme de livraison d\u2019emails au monde.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Lorsque nous avons commenc\u00e9 \u00e0 cr\u00e9er des environnements de d\u00e9veloppement locaux, nous nous sommes tourn\u00e9s vers des outils courants comme Vagrant. Mais, comme pour la plupart des environnements construits avec Vagrant, les temps de compilation sont longs. Par cons\u00e9quent, les images Vagrant ont une longue dur\u00e9e de vie et ont tendance \u00e0 d\u00e9river avec le temps.<\/p>\n","protected":false},"author":35,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24733","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Nous avons d&#039;abord abord\u00e9 le probl\u00e8me de la cr\u00e9ation d&#039;environnements de d\u00e9veloppement locaux en nous tournant vers des outils courants, mais pour les besoins de notre projet, nous avons trouv\u00e9 que Kubernetes \u00e9tait plus adapt\u00e9.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Nous avons d&#039;abord abord\u00e9 le probl\u00e8me de la cr\u00e9ation d&#039;environnements de d\u00e9veloppement locaux en nous tournant vers des outils courants, mais pour les besoins de notre projet, nous avons trouv\u00e9 que Kubernetes \u00e9tait plus adapt\u00e9.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/\",\"name\":\"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T16:57:30+00:00\",\"description\":\"Nous avons d'abord abord\u00e9 le probl\u00e8me de la cr\u00e9ation d'environnements de d\u00e9veloppement locaux en nous tournant vers des outils courants, mais pour les besoins de notre projet, nous avons trouv\u00e9 que Kubernetes \u00e9tait plus adapt\u00e9.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/it-and-engineering\\\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes - Transactional Email API Service For Developers | Mailgun","description":"Nous avons d'abord abord\u00e9 le probl\u00e8me de la cr\u00e9ation d'environnements de d\u00e9veloppement locaux en nous tournant vers des outils courants, mais pour les besoins de notre projet, nous avons trouv\u00e9 que Kubernetes \u00e9tait plus adapt\u00e9.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/","og_locale":"fr_FR","og_type":"article","og_title":"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes - Transactional Email API Service For Developers | Mailgun","og_description":"Nous avons d'abord abord\u00e9 le probl\u00e8me de la cr\u00e9ation d'environnements de d\u00e9veloppement locaux en nous tournant vers des outils courants, mais pour les besoins de notre projet, nous avons trouv\u00e9 que Kubernetes \u00e9tait plus adapt\u00e9.","og_url":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/","url":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/","name":"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T16:57:30+00:00","description":"Nous avons d'abord abord\u00e9 le probl\u00e8me de la cr\u00e9ation d'environnements de d\u00e9veloppement locaux en nous tournant vers des outils courants, mais pour les besoins de notre projet, nous avons trouv\u00e9 que Kubernetes \u00e9tait plus adapt\u00e9.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/fr\/blog\/it-and-engineering\/creer-des-environnements-de-developpement-avec-kubernetes-devgun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/fr\/blog\/"},{"@type":"ListItem","position":3,"name":"Devgun\u00a0: cr\u00e9er des environnements de d\u00e9veloppement avec Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/fr\/#website","url":"https:\/\/www.mailgun.com\/fr\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !","publisher":{"@id":"https:\/\/www.mailgun.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/fr\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/24733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/users\/35"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/24733\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media?parent=24733"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog_category?post=24733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}