[{"data":1,"prerenderedAt":717},["ShallowReactive",2],{"/en-us/blog/tags/kubernetes/":3,"navigation-fr-fr":19,"banner-fr-fr":440,"footer-fr-fr":453,"kubernetes-tag-page-fr-fr":665},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"content":8,"config":10,"_id":12,"_type":13,"title":14,"_source":15,"_file":16,"_stem":17,"_extension":18},"/en-us/blog/tags/kubernetes","tags",false,"",{"tag":9,"tagSlug":9},"kubernetes",{"template":11},"BlogTag","content:en-us:blog:tags:kubernetes.yml","yaml","Kubernetes","content","en-us/blog/tags/kubernetes.yml","en-us/blog/tags/kubernetes","yml",{"_path":20,"_dir":21,"_draft":6,"_partial":6,"_locale":7,"data":22,"_id":436,"_type":13,"title":437,"_source":15,"_file":438,"_stem":439,"_extension":18},"/shared/fr-fr/main-navigation","fr-fr",{"logo":23,"freeTrial":28,"sales":33,"login":38,"items":43,"search":377,"minimal":413,"duo":427},{"config":24},{"href":25,"dataGaName":26,"dataGaLocation":27},"/fr-fr/","gitlab logo","header",{"text":29,"config":30},"Commencer un essai gratuit",{"href":31,"dataGaName":32,"dataGaLocation":27},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":34,"config":35},"Contacter l'équipe commerciale",{"href":36,"dataGaName":37,"dataGaLocation":27},"/fr-fr/sales/","sales",{"text":39,"config":40},"Connexion",{"href":41,"dataGaName":42,"dataGaLocation":27},"https://gitlab.com/users/sign_in/","sign in",[44,88,187,192,298,358],{"text":45,"config":46,"cards":48,"footer":71},"Plateforme",{"dataNavLevelOne":47},"platform",[49,55,63],{"title":45,"description":50,"link":51},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":52,"config":53},"Découvrir notre plateforme",{"href":54,"dataGaName":47,"dataGaLocation":27},"/fr-fr/platform/",{"title":56,"description":57,"link":58},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":59,"config":60},"Découvrez GitLab Duo",{"href":61,"dataGaName":62,"dataGaLocation":27},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":64,"description":65,"link":66},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":67,"config":68},"En savoir plus",{"href":69,"dataGaName":70,"dataGaLocation":27},"/fr-fr/why-gitlab/","why gitlab",{"title":72,"items":73},"Démarrer avec",[74,79,84],{"text":75,"config":76},"Ingénierie de plateforme",{"href":77,"dataGaName":78,"dataGaLocation":27},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":80,"config":81},"Expérience développeur",{"href":82,"dataGaName":83,"dataGaLocation":27},"/fr-fr/developer-experience/","Developer experience",{"text":85,"config":86},"MLOps",{"href":87,"dataGaName":85,"dataGaLocation":27},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":89,"left":90,"config":91,"link":93,"lists":97,"footer":169},"Produit",true,{"dataNavLevelOne":92},"solutions",{"text":94,"config":95},"Voir toutes les solutions",{"href":96,"dataGaName":92,"dataGaLocation":27},"/fr-fr/solutions/",[98,124,147],{"title":99,"description":100,"link":101,"items":106},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":102},{"icon":103,"href":104,"dataGaName":105,"dataGaLocation":27},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[107,111,115,120],{"text":108,"config":109},"CI/CD",{"href":110,"dataGaLocation":27,"dataGaName":108},"/fr-fr/solutions/continuous-integration/",{"text":112,"config":113},"Développement assisté par l'IA",{"href":61,"dataGaLocation":27,"dataGaName":114},"AI assisted development",{"text":116,"config":117},"Gestion du code source",{"href":118,"dataGaLocation":27,"dataGaName":119},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":121,"config":122},"Livraison de logiciels automatisée",{"href":104,"dataGaLocation":27,"dataGaName":123},"Automated software delivery",{"title":125,"description":126,"link":127,"items":132},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":128},{"href":129,"dataGaName":130,"dataGaLocation":27,"icon":131},"/fr-fr/solutions/security-compliance/","security and compliance","ShieldCheckLight",[133,138,143],{"text":134,"config":135},"Application Security Testing",{"href":136,"dataGaName":137,"dataGaLocation":27},"/solutions/application-security-testing/","Application security testing",{"text":139,"config":140},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":141,"dataGaLocation":27,"dataGaName":142},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":144,"config":145},"Software Compliance",{"href":146,"dataGaName":144,"dataGaLocation":27},"/solutions/software-compliance/",{"title":148,"link":149,"items":154},"Mesures",{"config":150},{"icon":151,"href":152,"dataGaName":153,"dataGaLocation":27},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[155,159,164],{"text":156,"config":157},"Visibilité et mesures",{"href":152,"dataGaLocation":27,"dataGaName":158},"Visibility and Measurement",{"text":160,"config":161},"Gestion de la chaîne de valeur",{"href":162,"dataGaLocation":27,"dataGaName":163},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":165,"config":166},"Données d'analyse et informations clés",{"href":167,"dataGaLocation":27,"dataGaName":168},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":170,"items":171},"GitLab pour",[172,177,182],{"text":173,"config":174},"Entreprises",{"href":175,"dataGaLocation":27,"dataGaName":176},"/fr-fr/enterprise/","enterprise",{"text":178,"config":179},"PME",{"href":180,"dataGaLocation":27,"dataGaName":181},"/fr-fr/small-business/","small business",{"text":183,"config":184},"Secteur public",{"href":185,"dataGaLocation":27,"dataGaName":186},"/fr-fr/solutions/public-sector/","public sector",{"text":188,"config":189},"Tarifs",{"href":190,"dataGaName":191,"dataGaLocation":27,"dataNavLevelOne":191},"/fr-fr/pricing/","pricing",{"text":193,"config":194,"link":196,"lists":200,"feature":285},"Ressources",{"dataNavLevelOne":195},"resources",{"text":197,"config":198},"Afficher toutes les ressources",{"href":199,"dataGaName":195,"dataGaLocation":27},"/fr-fr/resources/",[201,234,257],{"title":202,"items":203},"Premiers pas",[204,209,214,219,224,229],{"text":205,"config":206},"Installation",{"href":207,"dataGaName":208,"dataGaLocation":27},"/fr-fr/install/","install",{"text":210,"config":211},"Guides de démarrage rapide",{"href":212,"dataGaName":213,"dataGaLocation":27},"/fr-fr/get-started/","quick setup checklists",{"text":215,"config":216},"Apprentissage",{"href":217,"dataGaLocation":27,"dataGaName":218},"https://university.gitlab.com/","learn",{"text":220,"config":221},"Documentation sur le produit",{"href":222,"dataGaName":223,"dataGaLocation":27},"https://docs.gitlab.com/","product documentation",{"text":225,"config":226},"Vidéos sur les bonnes pratiques",{"href":227,"dataGaName":228,"dataGaLocation":27},"/fr-fr/getting-started-videos/","best practice videos",{"text":230,"config":231},"Intégrations",{"href":232,"dataGaName":233,"dataGaLocation":27},"/fr-fr/integrations/","integrations",{"title":235,"items":236},"Découvrir",[237,242,247,252],{"text":238,"config":239},"Histoires de succès client",{"href":240,"dataGaName":241,"dataGaLocation":27},"/fr-fr/customers/","customer success stories",{"text":243,"config":244},"Blog",{"href":245,"dataGaName":246,"dataGaLocation":27},"/fr-fr/blog/","blog",{"text":248,"config":249},"Travail à distance",{"href":250,"dataGaName":251,"dataGaLocation":27},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":253,"config":254},"TeamOps",{"href":255,"dataGaName":256,"dataGaLocation":27},"/fr-fr/teamops/","teamops",{"title":258,"items":259},"Connecter",[260,265,270,275,280],{"text":261,"config":262},"Services GitLab",{"href":263,"dataGaName":264,"dataGaLocation":27},"/fr-fr/services/","services",{"text":266,"config":267},"Communauté",{"href":268,"dataGaName":269,"dataGaLocation":27},"/community/","community",{"text":271,"config":272},"Forum",{"href":273,"dataGaName":274,"dataGaLocation":27},"https://forum.gitlab.com/","forum",{"text":276,"config":277},"Événements",{"href":278,"dataGaName":279,"dataGaLocation":27},"/events/","events",{"text":281,"config":282},"Partenaires",{"href":283,"dataGaName":284,"dataGaLocation":27},"/fr-fr/partners/","partners",{"backgroundColor":286,"textColor":287,"text":288,"image":289,"link":293},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":290,"config":291},"carte promo The Source",{"src":292},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":294,"config":295},"Lire les articles les plus récents",{"href":296,"dataGaName":297,"dataGaLocation":27},"/fr-fr/the-source/","the source",{"text":299,"config":300,"lists":302},"Société",{"dataNavLevelOne":301},"company",[303],{"items":304},[305,310,316,318,323,328,333,338,343,348,353],{"text":306,"config":307},"À propos",{"href":308,"dataGaName":309,"dataGaLocation":27},"/fr-fr/company/","about",{"text":311,"config":312,"footerGa":315},"Emplois",{"href":313,"dataGaName":314,"dataGaLocation":27},"/jobs/","jobs",{"dataGaName":314},{"text":276,"config":317},{"href":278,"dataGaName":279,"dataGaLocation":27},{"text":319,"config":320},"Leadership",{"href":321,"dataGaName":322,"dataGaLocation":27},"/company/team/e-group/","leadership",{"text":324,"config":325},"Équipe",{"href":326,"dataGaName":327,"dataGaLocation":27},"/company/team/","team",{"text":329,"config":330},"Manuel",{"href":331,"dataGaName":332,"dataGaLocation":27},"https://handbook.gitlab.com/","handbook",{"text":334,"config":335},"Relations avec les investisseurs",{"href":336,"dataGaName":337,"dataGaLocation":27},"https://ir.gitlab.com/","investor relations",{"text":339,"config":340},"Centre de confiance",{"href":341,"dataGaName":342,"dataGaLocation":27},"/fr-fr/security/","trust center",{"text":344,"config":345},"Centre pour la transparence de l'IA",{"href":346,"dataGaName":347,"dataGaLocation":27},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":349,"config":350},"Newsletter",{"href":351,"dataGaName":352,"dataGaLocation":27},"/company/contact/","newsletter",{"text":354,"config":355},"Presse",{"href":356,"dataGaName":357,"dataGaLocation":27},"/press/","press",{"text":359,"config":360,"lists":361},"Nous contacter",{"dataNavLevelOne":301},[362],{"items":363},[364,367,372],{"text":34,"config":365},{"href":36,"dataGaName":366,"dataGaLocation":27},"talk to sales",{"text":368,"config":369},"Aide",{"href":370,"dataGaName":371,"dataGaLocation":27},"/support/","get help",{"text":373,"config":374},"Portail clients GitLab",{"href":375,"dataGaName":376,"dataGaLocation":27},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":378,"login":379,"suggestions":386},"Fermer",{"text":380,"link":381},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":382,"config":383},"gitlab.com",{"href":41,"dataGaName":384,"dataGaLocation":385},"search login","search",{"text":387,"default":388},"Suggestions",[389,392,397,399,404,409],{"text":56,"config":390},{"href":61,"dataGaName":391,"dataGaLocation":385},"GitLab Duo (AI)",{"text":393,"config":394},"Suggestions de code (IA)",{"href":395,"dataGaName":396,"dataGaLocation":385},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":108,"config":398},{"href":110,"dataGaName":108,"dataGaLocation":385},{"text":400,"config":401},"GitLab sur AWS",{"href":402,"dataGaName":403,"dataGaLocation":385},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":405,"config":406},"GitLab sur Google Cloud ",{"href":407,"dataGaName":408,"dataGaLocation":385},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":410,"config":411},"Pourquoi utiliser GitLab ?",{"href":69,"dataGaName":412,"dataGaLocation":385},"Why GitLab?",{"freeTrial":414,"mobileIcon":419,"desktopIcon":424},{"text":415,"config":416},"Commencer votre essai gratuit",{"href":417,"dataGaName":32,"dataGaLocation":418},"https://gitlab.com/-/trials/new/","nav",{"altText":420,"config":421},"Icône GitLab",{"src":422,"dataGaName":423,"dataGaLocation":418},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":420,"config":425},{"src":426,"dataGaName":423,"dataGaLocation":418},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":428,"mobileIcon":432,"desktopIcon":434},{"text":429,"config":430},"En savoir plus sur GitLab Duo",{"href":61,"dataGaName":431,"dataGaLocation":418},"gitlab duo",{"altText":420,"config":433},{"src":422,"dataGaName":423,"dataGaLocation":418},{"altText":420,"config":435},{"src":426,"dataGaName":423,"dataGaLocation":418},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":441,"_dir":21,"_draft":6,"_partial":6,"_locale":7,"title":442,"titleMobile":442,"button":443,"config":448,"_id":450,"_type":13,"_source":15,"_file":451,"_stem":452,"_extension":18},"/shared/fr-fr/banner","La plateforme GitLab Duo Agent est maintenant disponible en version bêta publique !",{"text":444,"config":445},"Essayer la version bêta",{"href":446,"dataGaName":447,"dataGaLocation":27},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":449},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":454,"_dir":21,"_draft":6,"_partial":6,"_locale":7,"data":455,"_id":661,"_type":13,"title":662,"_source":15,"_file":663,"_stem":664,"_extension":18},"/shared/fr-fr/main-footer",{"text":456,"source":457,"edit":463,"contribute":468,"config":473,"items":478,"minimal":652},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":458,"config":459},"Afficher le code source de la page",{"href":460,"dataGaName":461,"dataGaLocation":462},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":464,"config":465},"Modifier cette page",{"href":466,"dataGaName":467,"dataGaLocation":462},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":469,"config":470},"Veuillez contribuer",{"href":471,"dataGaName":472,"dataGaLocation":462},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":474,"facebook":475,"youtube":476,"linkedin":477},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[479,502,556,589,623],{"title":45,"links":480,"subMenu":485},[481],{"text":482,"config":483},"Plateforme DevSecOps",{"href":54,"dataGaName":484,"dataGaLocation":462},"devsecops platform",[486],{"title":188,"links":487},[488,492,497],{"text":489,"config":490},"Voir les forfaits",{"href":190,"dataGaName":491,"dataGaLocation":462},"view plans",{"text":493,"config":494},"Pourquoi choisir GitLab Premium ?",{"href":495,"dataGaName":496,"dataGaLocation":462},"/fr-fr/pricing/premium/","why premium",{"text":498,"config":499},"Pourquoi choisir GitLab Ultimate ?",{"href":500,"dataGaName":501,"dataGaLocation":462},"/fr-fr/pricing/ultimate/","why ultimate",{"title":503,"links":504},"Solutions",[505,510,513,515,520,525,529,532,535,540,542,544,546,551],{"text":506,"config":507},"Transformation digitale",{"href":508,"dataGaName":509,"dataGaLocation":462},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":511,"config":512},"Sécurité et conformité",{"href":136,"dataGaName":137,"dataGaLocation":462},{"text":121,"config":514},{"href":104,"dataGaName":105,"dataGaLocation":462},{"text":516,"config":517},"Développement agile",{"href":518,"dataGaName":519,"dataGaLocation":462},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":521,"config":522},"Transformation cloud",{"href":523,"dataGaName":524,"dataGaLocation":462},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":526,"config":527},"SCM",{"href":118,"dataGaName":528,"dataGaLocation":462},"source code management",{"text":108,"config":530},{"href":110,"dataGaName":531,"dataGaLocation":462},"continuous integration & delivery",{"text":160,"config":533},{"href":162,"dataGaName":534,"dataGaLocation":462},"value stream management",{"text":536,"config":537},"GitOps",{"href":538,"dataGaName":539,"dataGaLocation":462},"/fr-fr/solutions/gitops/","gitops",{"text":173,"config":541},{"href":175,"dataGaName":176,"dataGaLocation":462},{"text":178,"config":543},{"href":180,"dataGaName":181,"dataGaLocation":462},{"text":183,"config":545},{"href":185,"dataGaName":186,"dataGaLocation":462},{"text":547,"config":548},"Formation",{"href":549,"dataGaName":550,"dataGaLocation":462},"/fr-fr/solutions/education/","education",{"text":552,"config":553},"Services financiers",{"href":554,"dataGaName":555,"dataGaLocation":462},"/fr-fr/solutions/finance/","financial services",{"title":193,"links":557},[558,560,562,564,567,569,573,575,577,579,581,583,585,587],{"text":205,"config":559},{"href":207,"dataGaName":208,"dataGaLocation":462},{"text":210,"config":561},{"href":212,"dataGaName":213,"dataGaLocation":462},{"text":215,"config":563},{"href":217,"dataGaName":218,"dataGaLocation":462},{"text":220,"config":565},{"href":222,"dataGaName":566,"dataGaLocation":462},"docs",{"text":243,"config":568},{"href":245,"dataGaName":246},{"text":570,"config":571},"Histoires de réussite client",{"href":572,"dataGaLocation":462},"/customers/",{"text":238,"config":574},{"href":240,"dataGaName":241,"dataGaLocation":462},{"text":248,"config":576},{"href":250,"dataGaName":251,"dataGaLocation":462},{"text":261,"config":578},{"href":263,"dataGaName":264,"dataGaLocation":462},{"text":253,"config":580},{"href":255,"dataGaName":256,"dataGaLocation":462},{"text":266,"config":582},{"href":268,"dataGaName":269,"dataGaLocation":462},{"text":271,"config":584},{"href":273,"dataGaName":274,"dataGaLocation":462},{"text":276,"config":586},{"href":278,"dataGaName":279,"dataGaLocation":462},{"text":281,"config":588},{"href":283,"dataGaName":284,"dataGaLocation":462},{"title":299,"links":590},[591,593,595,597,599,601,603,607,612,614,616,618],{"text":306,"config":592},{"href":308,"dataGaName":301,"dataGaLocation":462},{"text":311,"config":594},{"href":313,"dataGaName":314,"dataGaLocation":462},{"text":319,"config":596},{"href":321,"dataGaName":322,"dataGaLocation":462},{"text":324,"config":598},{"href":326,"dataGaName":327,"dataGaLocation":462},{"text":329,"config":600},{"href":331,"dataGaName":332,"dataGaLocation":462},{"text":334,"config":602},{"href":336,"dataGaName":337,"dataGaLocation":462},{"text":604,"config":605},"Sustainability",{"href":606,"dataGaName":604,"dataGaLocation":462},"/sustainability/",{"text":608,"config":609},"Diversité, inclusion et appartenance (DIB)",{"href":610,"dataGaName":611,"dataGaLocation":462},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":339,"config":613},{"href":341,"dataGaName":342,"dataGaLocation":462},{"text":349,"config":615},{"href":351,"dataGaName":352,"dataGaLocation":462},{"text":354,"config":617},{"href":356,"dataGaName":357,"dataGaLocation":462},{"text":619,"config":620},"Déclaration de transparence sur l'esclavage moderne",{"href":621,"dataGaName":622,"dataGaLocation":462},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":359,"links":624},[625,628,630,632,637,642,647],{"text":626,"config":627},"Échanger avec un expert",{"href":36,"dataGaName":37,"dataGaLocation":462},{"text":368,"config":629},{"href":370,"dataGaName":371,"dataGaLocation":462},{"text":373,"config":631},{"href":375,"dataGaName":376,"dataGaLocation":462},{"text":633,"config":634},"Statut",{"href":635,"dataGaName":636,"dataGaLocation":462},"https://status.gitlab.com/","status",{"text":638,"config":639},"Conditions d'utilisation",{"href":640,"dataGaName":641},"/terms/","terms of use",{"text":643,"config":644},"Déclaration de confidentialité",{"href":645,"dataGaName":646,"dataGaLocation":462},"/fr-fr/privacy/","privacy statement",{"text":648,"config":649},"Préférences en matière de cookies",{"dataGaName":650,"dataGaLocation":462,"id":651,"isOneTrustButton":90},"cookie preferences","ot-sdk-btn",{"items":653},[654,656,659],{"text":638,"config":655},{"href":640,"dataGaName":641,"dataGaLocation":462},{"text":657,"config":658},"Politique de confidentialité",{"href":645,"dataGaName":646,"dataGaLocation":462},{"text":648,"config":660},{"dataGaName":650,"dataGaLocation":462,"id":651,"isOneTrustButton":90},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",{"allPosts":666,"featuredPost":692,"totalPagesCount":715,"initialPosts":716},[667],{"_path":668,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":669,"content":677,"config":685,"_id":688,"_type":13,"title":689,"_source":15,"_file":690,"_stem":691,"_extension":18},"/fr-fr/blog/kubernetes-the-container-orchestration-solution",{"title":670,"description":671,"ogTitle":670,"ogDescription":671,"noIndex":6,"ogImage":672,"ogUrl":673,"ogSiteName":674,"ogType":675,"canonicalUrls":673,"schema":676},"Kubernetes : tout savoir sur la solution d’orchestration des conteneurs","Kubernetes, également connue sous son diminutif K8s, est une solution open source incontournable pour déployer et maintenir des applications, notamment dans le cloud.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660215/Blog/Hero%20Images/kubernetes-container-orchestration-solution.jpg","https://about.gitlab.com/blog/kubernetes-the-container-orchestration-solution","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Kubernetes : tout savoir sur la solution d’orchestration des conteneurs\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Team\"}],\n        \"datePublished\": \"2024-07-25\",\n      }",{"title":670,"description":671,"authors":678,"heroImage":672,"date":680,"body":681,"category":682,"tags":683},[679],"GitLab Team","2024-07-25","Ce logiciel permet d'automatiser les tâches de déploiement et de gestion d'applications conteneurisées à grande échelle. \n\nKubernetes est devenu au fil du temps un outil essentiel en développement d'applications dans de nombreux domaines, comme les [microservices](https://about.gitlab.com/fr-fr/topics/microservices/ \"Que sont les microservices ? \"), les applications web et les bases de données. Ses performances et son évolutivité en font aujourd’hui un standard reconnu en gestion de conteneurs.\n\nDécouvrez dans cet article tout ce que vous devez savoir sur Kubernetes. \n\n- [Qu'est-ce que Kubernetes ?](#quest-ce-que-kubernetes)\n- [Comment fonctionne une architecture Kubernetes ?](#comment-fonctionne-une-architecture-kubernetes)\n- [Quels sont les avantages de Kubernetes ?](#quels-sont-les-avantages-de-kubernetes)\n- [Quelles sont les limites de Kubernetes ?](#quelles-sont-les-limites-de-kubernetes)\n- [Utiliser Kubernetes au sein de vos équipes](#utiliser-kubernetes-au-sein-de-vos-equipes)\n- [Kubernetes, Git et GitLab](#kubernetes-git-et-gitlab)\n\n## Qu'est-ce que Kubernetes ?\n\nKubernetes est un système [__open source__](https://about.gitlab.com/fr-fr/blog/what-is-open-source/ \"Qu'est-ce que l'open source ?\") qui permet d’orchestrer efficacement les conteneurs d'une application informatique. La __conteneurisation__ est une approche largement plébiscitée en développement d'applications TIC, particulièrement dans les domaines de la transformation digitale et du cloud.\n\nSi la notion de conteneurs ne vous est pas familière, sachez qu'il s'agit d'une méthode de développement d'application qui consiste à regrouper les composants d'une application dans des unités standardisées – des conteneurs – qui sont indépendants des appareils et des systèmes d'exploitation sur lesquels ils se trouvent. En isolant les applications de leur environnement, cette technologie __facilite leur déploiement, leur portabilité, et limite des conflits d'interopérabilité.__\n\nC'est à ce niveau que nous utilisons le logiciel Kubernetes. Certes, les conteneurs permettent de découper les applications en modules plus petits et autonomes, facilitant ainsi leur déploiement. Mais pour que les conteneurs puissent interagir au sein d'une application, un système de gestion englobant ces modules est nécessaire. C'est précisément ce que Kubernetes permet de faire ! Kubernetes fournit une plateforme pour contrôler où et comment les conteneurs s'exécutent, de façon à orchestrer et à planifier leur exécution pour gérer des applications conteneurisées à grande échelle. \n\n## Comment fonctionne une architecture Kubernetes ?\n\nPour comprendre comment fonctionne une __architecture Kubernetes__, il est essentiel de se familiariser avec certaines notions, à commencer par celle du cluster, qui est l'échelle la plus large de l'architecture. \n\n### Cluster Kubernetes\n\nUn __cluster Kubernetes__ se définit comme l'ensemble des __machines virtuelles__ ou physiques sur lesquelles est installée une __application conteneurisée__.\n\n![Components of Kubernetes](https://res.cloudinary.com/about-gitlab-com/image/upload/v1749673941/Blog/Content%20Images/components-of-kubernetes.png)\n*Source: [Kubernetes](https://kubernetes.io/docs/concepts/overview/components/ \"Kubernetes website\")*.\n\nCe cluster comprend différents éléments :\n\n- __Nœud (Node) :__ c'est une unité de travail dans un cluster Kubernetes. Il s'agit d'une machine virtuelle (VM) ou physique (bare-metal) qui exécute des tâches pour le compte de l'application.\n- __Pod :__ un pod est la plus petite unité déployable dans Kubernetes. Il représente un groupe de conteneurs fonctionnant ensemble sur un même nœud. Les conteneurs à l'intérieur d'un pod partagent le même réseau et peuvent communiquer entre eux via localhost.\n- __Service :__ un service Kubernetes permet d'exposer un pod au réseau ou à d'autres pods. Il offre un point d'accès stable et bien défini vers les applications hébergées par les pods.\n- __Volume :__ une abstraction de dossier qui permet de résoudre des problèmes de partage et de récupération des fichiers au sein d'un conteneur.\n- __Namespace (espace de nommage) :__ un namespace permet de grouper et d’isoler des ressources afin de former un cluster virtuel.\n\nL'architecture de Kubernetes repose sur deux principaux types de nœuds : le __nœud maître__ *(master)* et les nœuds ouvriers ou nœuds de travail *(__worker nodes__)*. Le nœud maître est responsable de la gestion globale du cluster Kubernetes et de la communication avec les __nœuds de travail__. Parmi ses composantes clés, l'API est le point de contact central pour toutes les communications entre les utilisateurs et le cluster. L'[Etcd](https://kubernetes.io/fr/docs/concepts/overview/components/#etcd \"Etcd\") est la base de données clé-valeur où sont stockées les configurations, l'état du système et les métadonnées des objets. Le controller manager coordonne les opérations d'arrière-plan telles que la réplication des pods, et le scheduler place les pods sur les nœuds en fonction des ressources disponibles.\n\nLes nœuds de travail, quant à eux, sont les machines qui exécutent et gèrent les applications contenues dans les pods. En leur sein, le [kubelet](https://kubernetes.io/fr/docs/concepts/overview/components/#kubelet \"Kubelet\") est l'agent qui s'exécute sur chaque nœud et communique avec le maître pour recevoir les commandes et transmettre l'état des pods. Le proxy réseau ou [kube-proxy](https://kubernetes.io/fr/docs/concepts/overview/components/#kube-proxy \"Kube-proxy\") maintient les règles réseau sur les nœuds pour permettre l'accès aux services depuis l'extérieur du cluster Kubernetes. Enfin, le container runtime est le logiciel responsable de l'exécution et la gestion des conteneurs au sein des pods.\n\n### Boucles de réconciliation\n\nLes __boucles de réconciliation (ou control loops)__ de K8s sont un mécanisme qui permet au système de maintenir un état cohérent et fiable. Kubernetes suit un __modèle déclaratif__, où l'utilisateur spécifie l'__état désiré__ d'un cluster à travers des manifestes YAML, comme le nombre de réplicas d’un déploiement, la configuration réseau, les volumes attachés, et plus encore. L’__état courant__, en revanche, est la représentation en temps réel de l’état effectif des ressources dans le cluster. \n\nLa __boucle de réconciliation__ est un processus continu dans lequel les __contrôleurs Kubernetes__ (comme le Deployment Controller, le Node Controller ou le ReplicaSet Controller) surveillent l’état actuel et tentent de l’ajuster pour qu’il corresponde à l’état souhaité. Lorsqu’une divergence est détectée (ex. un pod est supprimé ou un nœud devient indisponible), Kubernetes agit automatiquement pour restaurer la conformité en appliquant les correctifs nécessaires. Ce mécanisme permet à Kubernetes d'être __auto-réparateur__ et de garantir la haute disponibilité et la stabilité des applications déployées.\n\n### Manifestes\n\nPour décrire et gérer les ressources dans Kubernetes, nous utilisons des manifestes, c'est-à-dire des fichiers de configuration au format YAML ou JSON. Ces fichiers définissent l’état désiré d’un objet Kubernetes, comme un Pod, un Service ou un Déploiement. Un manifeste spécifie des paramètres essentiels tels que l’image du conteneur, le __nombre de réplicas__, les volumes ou les règles de mise en réseau. Une fois appliqué avec la commande `kubectl apply -f`, Kubernetes compare cet état désiré à l’état courant du cluster et ajuste les ressources pour garantir leur conformité. \n\n### Et Docker dans tout ça ?\n\nParmi tous les composants d'un cluster K8s, le choix du runtime au sein des nœuds de travail est important. Différents logiciels sont disponibles pour cela, comme rkt ou CRI-O, mais Docker est l'outil le plus couramment utilisé. Alors, qu'est-ce que Docker ? Et quelle est la différence entre Docker et Kubernetes ?\n\nDocker est une solution open source qui s'utilise spécifiquement au niveau des conteneurs. Il permet de __packager les conteneurs__ dans un format standardisé et léger, ce qui augmente leur portabilité dans différents environnements. C'est donc un outil complémentaire à K8s qui facilite la gestion des conteneurs en eux-mêmes, tandis que Kubernetes simplifie leur intégration et communication au sein de l'application.\n\n## Quels sont les avantages de Kubernetes ?\n\nLancée par Google en 2014, la première version stable de Kubernetes est apparue en juillet 2015. Depuis lors, la popularité de ce logiciel ne se dément pas, faisant de K8s une référence dans le domaine de l'orchestration de conteneurs, particulièrement pour les architectures orientées microservices. Mais alors, pourquoi utiliser Kubernetes ? Ce succès s'explique avant tout par les excellentes performances de ce logiciel en __orchestration de conteneurs__. \n\nLes avantages de Kubernetes sont nombreux : \n\n- __Automatisation :__  Kubernetes facilite l'automatisation des tâches liées au déploiement, au dimensionnement et à la mise à jour des applications conteneurisées.\n- __Flexibilité :__ le logiciel s'adapte à différentes technologies de conteneurs, diverses architectures matérielles et systèmes d'exploitation.\n- __Scalabilité :__  K8s permet de déployer et de gérer facilement des milliers de conteneurs, quel que soit leur état : en cours d'exécution, en pause, ou arrêtés.\n- __Migration :__  il est possible de migrer facilement des applications vers Kubernetes, sans avoir à modifier le code source.\n- __Support multi-cluster :__ Kubernetes permet de gérer de manière centralisée plusieurs clusters de conteneurs répartis sur différentes infrastructures.\n- __Gestion des mises à jour :__ Le logiciel prend en charge les déploiements rolling-update pour mettre à jour les applications sans interruption de service. \n\n### Un écosystème robuste et évolutif\n\nKubernetes se distingue ainsi par sa capacité à gérer les conteneurs de manière performante et sûre, tout en maintenant une indépendance vis-à-vis des fournisseurs d'infrastructures cloud. Son architecture modulaire s'adapte aux besoins spécifiques de chaque entreprise, et supporte un très large éventail d'applications et de services (services Web, traitement de données, applications mobiles, etc.).\n\nDans la course à la transformation digitale, Kubernetes convainc aussi grâce à son écosystème riche et extensible au sein de la communauté open source. Géré par la *__Cloud Native Computing Foundation (CNCF)__*, K8s est porté par des milliers de développeurs et développeuses partout dans le monde. Ils contribuent au développement du projet et à l'amélioration continue de ses fonctionnalités. \n\n## Quelles sont les limites de Kubernetes ?\n\nLes avantages de Kubernetes en font un choix sûr pour de nombreuses équipes de développement dans le domaine des applications [cloud-native](https://about.gitlab.com/fr-fr/topics/cloud-native/ \"Qu'est-ce que l'approche cloud-native ?\"). Néanmoins, il convient de souligner certaines limites. Kubernetes demande un solide bagage technique et de se former à de nouveaux concepts et méthodes de développement. Le logiciel peut être complexe à configurer en début de projet. La configuration est cependant cruciale, notamment pour sécuriser la plateforme. Disposer d'une équipe de développement expérimentée en __projet K8s__ constitue donc un sérieux atout. \n\nAutre difficulté, la mise en place et la maintenance d'une architecture K8s requièrent aussi du temps et des ressources, notamment pour mettre à jour ses différents composants et logiciels. Cela pose la question d'un possible surdimensionnement. Dans le cas d'une petite application, ou d'un projet sans challenge particulier en termes de scalabilité, une architecture plus basique peut suffire tout en se montrant plus économe. \n\n## Utiliser Kubernetes au sein de vos équipes\n\nDes dizaines de milliers d'entreprises ont adopté une architecture Kubernetes pour mener à bien leur transition digitale. K8s est utilisé par des sociétés de toutes tailles, des startups aux multinationales. \n\nLes exemples d'intégrations réalisées avec succès sont nombreux, comme pour la société Haven Technologies. Haven Technologies a migré ses services SaaS vers K8s et mise notamment sur une stratégie Kubernetes avec la plateforme DevSecOps de GitLab afin d’aider ses équipes à améliorer l'efficacité, la sécurité et la vitesse de développement logiciel. Consultez [notre cas client](https://about.gitlab.com/customers/haven-technologies/ \"Cas client Haven Technologies\") pour en savoir plus !   \n\n## Kubernetes, Git et GitLab\n\nKubernetes, Git et GitLab sont des éléments essentiels du paysage [DevOps](https://about.gitlab.com/fr-fr/topics/devops/ \"Que signifie DevOps ? \"). Kubernetes offre une grande flexibilité pour déployer et gérer les différents composants d’une application. De son côté, GitLab construit autour de [Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce que Git ? \") et de son système de contrôle de version natif, permet un suivi rigoureux et précis du code source et des changements, tout en fournissant une suite d'outils complète pour gérer l'ensemble du cycle de vie du développement logiciel. \n\nCette combinaison, associée à une [approche GitOps](https://about.gitlab.com/fr-fr/topics/gitops/ \"Approche GitOps\"), dont l’objectif est d’automatiser le provisionnement des infrastructures cloud modernes, crée un environnement agile de développement et déploiement des applications et permet ainsi de fournir des logiciels puissants, flexibles et évolutifs. Pour aller plus loin, [découvrez toutes les solutions de GitLab pour lancer une application avec Kubernetes](https://about.gitlab.com/fr-fr/solutions/kubernetes/ \"Solutions GitLab pour lancer une application avec Kubernetes\"). \n\n## FAQ sur Kubernetes\n\n### Quelles sont les solutions concurrentes à K8s ?\n\nIl existe plusieurs alternatives à Kubernetes, parmi lesquelles Docker Swarm ou Marathon. Cependant, Kubernetes est considérée comme la solution la plus mature et la plus populaire sur le marché. Sa large base d'utilisateurs, sa documentation abondante et son support actif par la communauté font de Kubernetes un excellent choix pour ceux qui cherchent à adopter un système d'orchestration de conteneurs.\n\n### Qu’est-ce qu’un cluster Kubernetes ?\n\nUn cluster Kubernetes est composé d'un nœud maître et de plusieurs nœuds de travail. Le nœud maître est responsable de la coordination des tâches dans le cluster, tandis que les nœuds de travail exécutent ces tâches d'orchestration et hébergent les conteneurs. Les clusters K8s sont hautement évolutifs - on peut ajouter ou supprimer des nœuds pour adapter les ressources du cluster aux besoins de l'application.\n\n### Quelle est la différence entre Kubernetes et Docker ?\n\nDocker permet de créer, exécuter et gérer des conteneurs individuellement, tandis que Kubernetes orchestre ces conteneurs sur un cluster en automatisant leur déploiement, mise à l’échelle et maintenance. Docker gère l’environnement d’exécution, Kubernetes assure la coordination et la résilience des applications conteneurisées.\n\n### Comment débuter avec Kubernetes ?\n\nPour commencer, il est nécessaire d'installer le logiciel Kubernetes sur un environnement compatible (Linux, macOS ou Windows). Kubernetes peut être installé au sein d'un hébergement classique mais aussi dans un environnement cloud ([Google Kubernetes Engine](https://about.gitlab.com/fr-fr/partners/technology-partners/google-cloud-platform/ \"Google Kubernetes Engine\") ou [Amazon EKS](https://about.gitlab.com/fr-fr/partners/technology-partners/aws/ \"Amazon EKS\") par exemple). Les utilisateurs peuvent télécharger et installer Kubernetes directement depuis leur site officiel, puis procéder à la configuration initiale nécessaire pour connecter les nœuds maître et de travail. Une fois cette étape réalisée, l'utilisateur est prêt à déployer une première application en utilisant Kubernetes.\n\n### Pourquoi choisir Kubernetes ?\n\nKubernetes offre une grande flexibilité et une portabilité totale entre différentes plateformes cloud ou infrastructures sur site. Grâce à l'automatisation des tâches d'orchestration, K8s permet d'optimiser les ressources, de réduire les coûts d'exploitation et de libérer du temps pour les développeurs et les administrateurs systèmes. Enfin, l'écosystème Kubernetes est vaste et continuellement développé par une large communauté open source, ce qui permet d'innover rapidement.\n","open-source",[9,684],"open source",{"slug":686,"featured":6,"template":687},"kubernetes-the-container-orchestration-solution","BlogPost","content:fr-fr:blog:kubernetes-the-container-orchestration-solution.yml","Kubernetes The Container Orchestration Solution","fr-fr/blog/kubernetes-the-container-orchestration-solution.yml","fr-fr/blog/kubernetes-the-container-orchestration-solution",{"_path":693,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":694,"content":700,"config":709,"_id":711,"_type":13,"title":712,"_source":15,"_file":713,"_stem":714,"_extension":18},"/fr-fr/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",{"title":695,"description":696,"ogTitle":695,"ogDescription":696,"noIndex":6,"ogImage":697,"ogUrl":698,"ogSiteName":674,"ogType":675,"canonicalUrls":698,"schema":699},"Comment utiliser les images OCI comme source unique de vérité pour vos déploiements continus","Découvrez les avantages d'intégrer les images OCI (Open Container Initiative) dans vos workflows GitOps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097601/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20Use%20this%20page%20as%20a%20reference%20for%20thumbnail%20sizes_76Tn5jFmEHY5LFj8RdDjNY_1750097600692.png","https://about.gitlab.com/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Comment utiliser les images OCI comme source unique de vérité pour vos déploiements continus\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Daniel Helfand\"}],\n        \"datePublished\": \"2025-02-19\",\n      }",{"title":695,"description":696,"authors":701,"heroImage":697,"date":703,"body":704,"category":682,"tags":705,"updatedDate":708},[702],"Daniel Helfand","2025-02-19","Est-il encore approprié d'employer le terme [GitOps](https://about.gitlab.com/fr-fr/topics/gitops/) si vous ne déployez plus directement depuis un dépôt Git ? Git reste au cœur des workflows GitOps, c'est indéniable. Pourtant, de plus en plus d'équipes de développement choisissent de stocker leurs configurations d'infrastructure sous forme d'artefacts OCI (Open Container Initiative) dans des registres de conteneurs. Cette pratique gagne du terrain en tant que nouvelle source unique de vérité pour les déploiements GitOps. Découvrez dans cet article les raisons qui motivent cette tendance et comment les fonctionnalités de GitLab soutiennent cette amélioration des workflows GitOps. \n\n## Qu'est-ce que la pratique GitOps ?\n\nLe projet [OpenGitOps](https://opengitops.dev/) définit [quatre principes](https://opengitops.dev/#principles) qui encadrent la pratique GitOps :\n- Un [système géré par GitOps](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#software-system) doit [exprimer son état désiré de manière déclarative](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#declarative-description).\n- Cet état désiré doit être stocké dans un système garantissant l'immuabilité et la gestion des versions, et conserver un historique complet des versions.\n- Des agents logiciels doivent pouvoir effectuer automatiquement un pull des déclarations de l'état désiré depuis la source.\n- Ils doivent surveiller [en continu](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#continuous) l'état réel du système et [tenter de le faire converger vers l'état désiré](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#reconciliation).\n\nUn exemple concret de pratique GitOps consiste à stocker les manifestes [Kubernetes](https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/ \"Qu'est-ce que Kubernetes ? \") d'un microservice dans un projet GitLab. Ces ressources Kubernetes sont ensuite continuellement synchronisées par un [contrôleur](https://kubernetes.io/docs/concepts/architecture/controller/) s'exécutant sur le cluster Kubernetes hébergeant le microservice. Ainsi, les équipes de développement sont en mesure de gérer l'infrastructure avec les mêmes workflows que pour du code applicatif : ouverture de merge requests afin d'examiner et de valider les modifications et gestion des versions. La pratique GitOps présente également de nombreux avantages opérationnels. Par exemple, elle permet de [prévenir la dérive de configuration](https://about.gitlab.com/fr-fr/topics/gitops/#cicd) et facilite l'audit des modifications ayant conduit à un certain état du système ou à un incident lors des déploiements. \n\n## Avantages et limites de Git dans les workflows GitOps\n\nGit est sans conteste un composant essentiel des workflows GitOps. Cependant, les dépôts Git n'ont pas été conçus pour être utilisés directement par des contrôleurs GitOps lors des déploiements. Git offre aux équipes de développement la possibilité de collaborer sur les modifications d'infrastructure et d'auditer ces dernières ultérieurement, mais les contrôleurs GitOps n'ont pas besoin de récupérer l'intégralité d'un dépôt Git pour réussir un déploiement. Il leur suffit d'accéder aux définitions d'infrastructure spécifiques à un environnement donné. \n\nDe plus, un autre aspect important du processus de déploiement consiste à [signer et vérifier les déploiements](https://docs.sigstore.dev/about/overview/#why-cryptographic-signing) pour garantir que les modifications en lien avec un déploiement, apportées à un environnement, proviennent d'une source de confiance. Bien que les commit Git puissent effectivement être signés et vérifiés par les contrôleurs GitOps, ils peuvent également inclure des éléments sans lien direct avec le déploiement (par exemple, des modifications de documentation, des mises à jour pour d'autres environnements, ou une restructuration du dépôt Git) ou offrir une image de déploiement incomplète, car un déploiement peut être constitué de plusieurs commits. Là encore, il semble que cette fonctionnalité Git ne soit pas en adéquation avec les exigences spécifiques du déploiement continu.  \n\nLes workflows GitOps basés sur Git peuvent parfois conduire à un excès d'automatisation, ce qui peut être problématique. Par exemple, dès qu'une modification est fusionnée dans une branche surveillée, elle est déployée immédiatement. Il n'y a aucun mécanisme de contrôle dans le processus en dehors de Git. Comment avoir la certitude d'empêcher le déclenchement d'un déploiement un vendredi en fin d'après-midi ? Que se passe-t-il si les équipes responsables du déploiement ne disposent pas des autorisations nécessaires pour fusionner les modifications dans certains projets GitLab ? L'utilisation d'images OCI ajoute une étape intermédiaire au processus : un pipeline intégré au workflow. Celui-ci inclut toutes les fonctionnalités nécessaires au contrôle de la livraison, telles que des [approbations ou le gel des déploiements](https://docs.gitlab.com/ee/ci/environments/protected_environments.html).\n\n## Les images OCI\n\nL'[Open Container Initiative](https://opencontainers.org/) a contribué à définir des normes relatives aux formats de conteneurs. Bien que la plupart des équipes de développement aient l'habitude de créer des images de conteneurs à partir d'un fichier Dockerfiles, beaucoup ne sont peut-être pas aussi familiers avec le stockage des manifestes Kubernetes dans un registre de conteneurs. Étant donné que le [registre de conteneurs de GitLab](https://docs.gitlab.com/ee/user/packages/container_registry/) est conforme à la norme OCI, il permet aux utilisateurs d'effectuer le push des manifestes Kubernetes liés à un environnement particulier directement dans le registre de conteneurs. Au lieu de cloner un dépôt Git complet, les contrôleurs GitOps, tels que [Flux CD](https://about.gitlab.com/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab/), peuvent désormais récupérer uniquement l'artefact OCI contenant les manifestes nécessaires au déploiement. \n\nDans de nombreux workflows GitOps, un même dépôt Git regroupe les configurations d'infrastructure pour tous les environnements cibles dans lesquels un [microservice](https://about.gitlab.com/fr-fr/topics/microservices/ \"Qu'est-ce qu'un microservice ? \") sera déployé. En empaquetant uniquement les manifestes Kubernetes liés à un environnement spécifique dans une image OCI, Flux CD télécharge les fichiers strictement nécessaires au déploiement dans cet environnement spécifique. \n\n### Les atouts sécurité des artefacts OCI\n\nComme mentionné précédemment, signer et vérifier les artefacts à déployer dans un environnement ajoutent une couche de sécurité supplémentaire aux projets de développement logiciel. Une fois que les manifestes Kubernetes font l'objet d'un push dans un registre de conteneurs, un outil comme [Sigstore Cosign](https://docs.sigstore.dev/quickstart/quickstart-cosign/) peut être utilisé pour signer l'image OCI avec une clé privée, stockée en toute sécurité dans un projet GitLab en tant que [variable CI/CD](https://about.gitlab.com/fr-fr/blog/demystifying-ci-cd-variables/ \"Variables CI/CD\"). Flux CD peut ensuite utiliser une clé publique stockée sur un cluster Kubernetes pour vérifier et garantir que le déploiement provient d'une source fiable. \n\n## Push et signature des images OCI avec GitLab \n\nGitLab offre de nombreuses fonctionnalités qui simplifient le processus d'empaquetage, de signature et de déploiement d'images OCI dans des workflows GitOps. Une pratique courante consiste à structurer les projets GitLab en séparant le code des microservices d’un côté, et le dépôt de l’infrastructure de déploiement de l’autre. Ainsi, pour une application composée de `n` microservices, il est fréquent d'avoir `n +1` projets GitLab.\n\nLe projet de code produit généralement un artefact sous forme d'image de conteneur qui sera utilisée pour empaqueter l'application. Le projet d'infrastructure (aussi appelé projet de livraison) contient, quant à lui, les manifestes Kubernetes définissant toutes les ressources nécessaires pour que chaque microservice puisse monter en charge, recevoir et traiter le trafic des utilisateurs. L'artefact découlant de ce projet est généralement une image OCI servant à déployer l'application et d'autres manifestes sur Kubernetes. \n\nDans cette configuration, la séparation des environnements est gérée en définissant des manifestes Kubernetes dans des dossiers distincts représentant les environnements (par exemple, de développement, de préproduction et de production) qui hébergeront l'application. Lorsque des modifications sont apportées au code d'un microservice et qu'une nouvelle image de conteneur fait l'objet d'un push, il suffit alors de mettre à jour la référence de cette image dans le manifeste situé dans le dossier correspondant à l'environnement cible, puis de créer une merge request pour déployer ces modifications via l'intégration de GitLab avec Flux CD. Une fois cette merge request examinée, approuvée et fusionnée, le job CI/CD du projet de livraison déclenche le push d'une nouvelle image OCI que Flux CD récupérera et déploiera dans le nouvel environnement.\n\n![Images OCI - schéma du workflow](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097611/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097611046.png)\n\nPour signer une image OCI, il vous suffit d'intégrer Cosign dans le job CI/CD de votre projet et de générer une nouvelle paire de clés publique/privée avec Cosign en exécutant localement les commandes ci-dessous. Veillez simplement à vous connecter à votre instance GitLab via l'[interface de ligne de commande glab](https://gitlab.com/gitlab-org/cli/#installation) et remplacez la variable [`PROJECT_ID`] dans la commande Cosign par l'[ID de votre projet de livraison](https://docs.gitlab.com/ee/user/project/working_with_projects.html#access-a-project-by-using-the-project-id).   \n\n```\nglab auth login\ncosign generate-key-pair gitlab://[PROJECT_ID]\n```\n\nUne fois la commande Cosign exécutée avec succès, les clés Cosign seront ajoutées à votre projet dans la section des variables CI/CD, sous les noms de clés `COSIGN_PUBLIC_KEY` et `COSIGN_PRIVATE_KEY`.\n\n### Exemple de job CI/CD\n\nVoici à quoi ressemblera un job GitLab CI/CD permettant d'effectuer un push d'une image OCI :\n\n```yaml\nfrontend-deploy:\n  rules:\n  - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n    changes:\n      paths: \n      - manifests/dev/frontend-dev.yaml\n  trigger:\n    include:\n      - component: gitlab.com/components/fluxcd/oci-artifact@0.3.1\n        inputs:\n          version: 0.3.1\n          kubernetes_agent_reference: gitlab-da/projects/tanuki-bank/flux-config:dev\n          registry_image_url: \"oci://$CI_REGISTRY_IMAGE/frontend\"\n          image_tag: dev\n          manifest_path: ./manifests/dev/frontend-dev.yaml\n          flux_oci_repo_name: frontend\n          flux_oci_namespace_name: frontend-dev\n          signing_private_key: \"$COSIGN_PRIVATE_KEY\" \n```\n\nLe [catalogue GitLab CI/CD](https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/) comprend un [composant CI/CD maintenu par GitLab pour travailler avec les artefacts OCI et Flux CD](https://gitlab.com/explore/catalog/components/fluxcd). Ce composant permet aux équipes de développement d'effectuer un push des manifestes Kubernetes sous forme d'images OCI vers le registre de conteneurs de GitLab ou dans un registre de conteneurs externe, de signer ces image OCI à l'aide de Cosign et d'en déclencher immédiatement la synchronisation via Flux CD. \n\nDans l'exemple ci-dessus, le `component` Flux CD est inclus dans un fichier `.gitlab-ci.yml` d'un projet GitLab. À l'aide aux paramètres `inputs` du composant, les utilisateurs peuvent définir le registre de destination pour l'image (`registry_image_url` et `image tag`), le chemin d'accès aux manifestes Kubernetes qui feront l'objet d'un push (`manifest_path`), la clé privée Cosign utilisée pour signer l'image (`signing_private_key`), ainsi que l'espace de nommage Kubernetes et le nom de l'[OCIRepository](https://fluxcd.io/flux/components/source/ocirepositories/) de Flux CD nécessaires pour synchroniser les mises à jour vers l'environnement de déploiement (`flux_oci_namespace_name` et `flux_oci_repo_name`).\n\nLa variable `kubernetes_agent_reference` permet aux jobs GitLab CI/CD d'hériter automatiquement de la variable `kubeconfig` nécessaire pour accéder à un cluster Kubernetes, sans avoir à stocker manuellement une variable CI/CD `kubeconfig` dans chaque projet GitLab. En configurant [GitLab Agent for Kubernetes](https://docs.gitlab.com/ee/user/clusters/agent/), vous pouvez configurer les jobs CI/CD de tous les projets GitLab dans un [groupe GitLab](https://docs.gitlab.com/ee/user/group/) et faire en sorte qu'ils héritent des autorisations nécessaires pour déployer sur le cluster Kubernetes. \n\nVous pouvez configurer le contexte de GitLab Agent for Kubernetes au même endroit que la configuration de GitLab Agent for Kubernetes dans votre groupe GitLab. Il est toutefois recommandé d'effectuer ces modifications dans le projet qui gère Flux CD. Pour en savoir plus sur la configuration de GitLab Agent pour l'accès CI/CD, consultez notre [documentation dédiée au workflow CI/CD](https://docs.gitlab.com/ee/user/clusters/agent/ci_cd_workflow.html).\n\nPar ailleurs, les variables `$COSIGN_PRIVATE_KEY`, `$FLUX_OCI_REPO_NAME`, et `$FRONTEND_DEV_NAMESPACE` sont des variables CI/CD qui contiennent des données sensibles. Elles sont stockées tout en masquant leur contenu dans les logs CI/CD. Enfin, la variable `$CI_REGISTRY_IMAGE` est disponible par défaut dans tous les jobs GitLab et spécifie le registre de conteneurs associé au projet GitLab. \n\n### Déploiement des images OCI\n\nEn intégrant [Flux CD à vos projets GitLab](https://docs.gitlab.com/ee/user/clusters/agent/gitops/flux_tutorial.html), vous pouvez automatiser les déploiements ainsi que la vérification des signatures pour les environnements de vos microservices. Une fois que Flux CD est configuré pour se synchroniser avec un projet GitLab, vous pouvez simplement ajouter les [définitions de ressources personnalisées](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) Kubernetes suivantes à votre projet pour synchroniser votre image OCI dont le push a été effectué. \n\n```yaml\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: frontend-dev\n  labels:\n    name: frontend-dev\n---\napiVersion: bitnami.com/v1alpha1\nkind: SealedSecret\nmetadata:\n  name: cosign-public-key\n  namespace: frontend-dev\nspec:\n  encryptedData:\n    cosign.pub: AgAKgLf4VbVzJOmr6++k81LlFayx88AELaUQFNOaXmBF4G+fBfBYeABl0skNvMAa1UrPVNSfMIHgFoYHoO96g576a+epk6V6glOI+++XvYbfsygof3GGxe0nL5Qh2b3ge0fNpyd0kTPSjTj0YUhRhKtMGMRSRw1jrwhNcGxCHK+Byibs52v8Np49KsIkeZKbzLdgYABkrv+k0j7hQM+jR180NpG+2UiRvaXpPuogxkbj61FEqWGrJHk8IVyfl3eh+YhoXxOHGDqko6SUC+bUZPDBlU6yKegO0/8Zq3hwulrSEsEjzRZNK+RFVMOLWWuC6h+WGpYhAMcsZPwjjJ/y29KLNa/YeqkN/cdk488QyEFc6ehCxzhH67HxIn2PDa+KkEOTv2TuycGF+Q00jKIizXF+IwLx/oRb3pTCF0AoAY8D8N3Ey+KfkOjsBON7gGID8GbQiJqX2IgIZxFMk0JRzxbRKOEqn+guLd5Shj7CD1a1Mkk0DxBdbqrGv2XNYUaFPI7xd3rZXUJZlnv+fsmwswsiGWRuXwim45HScWzQnfgLAe7tv3spVEGeaO5apl6d89uN21PBQnfE/zyugB//7ZW9tSp6+CSMyc5HynxI8diafqiwKPgvzLmVWRnkvxJijoXicRr3sCo5RudZPSlnjfd7CKdhwEVvLl7dRR4e/XBMdxCzk1p52Pl+3/kJR+LJii5+iwOpYrpVltSZdzc/3qRd19yMpc9PWpXYi7HxTb24EOQ25i21eDJY1ceplDN6bRtop2quzkjlwVeE2i4cEsX/YG8QBtQbop/3fjiAjKaED3QH3Ul0PECS9ARTScSkcOL3I00Xpp8DyD+xH0/i9wCBRDmH3yKX18C8VrMq02ALSnlP7WCVVjCPzubqKx2LPZRxK9EG0fylwv/vWQzTUUwfbPQZsd4c75bSTsTvxqp/UcFaXA==\n  template:\n    metadata:\n      name: cosign-public-key\n      namespace: frontend-dev\n---\napiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: OCIRepository\nmetadata:\n    name: frontend\n    namespace: frontend-dev\nspec:\n    interval: 1m\n    url: oci://registry.gitlab.com/gitlab-da/projects/tanuki-bank/tanuki-bank-delivery/frontend\n    ref:\n        tag: dev\n    verify:\n      provider: cosign\n      secretRef:\n        name: cosign-public-key\n---\napiVersion: kustomize.toolkit.fluxcd.io/v1\nkind: Kustomization\nmetadata:\n    name: frontend\n    namespace: frontend-dev\nspec:\n    interval: 1m\n    targetNamespace: frontend-dev\n    path: \".\"\n    sourceRef:\n        kind: OCIRepository\n        name: frontend\n    prune: true\n```   \n\nLa ressource [`Kustomization`](https://fluxcd.io/flux/components/kustomize/kustomizations/) permet de personnaliser davantage les manifestes Kubernetes, tout en spécifiant l'espace de nommage dans lequel déployer les ressources. La ressource `OCIRepository` de Flux CD, quant à elle, permet de spécifier la référence et le tag du dépôt d'images OCI à synchroniser régulièrement. Vous remarquerez également les champs `verify.provider` et `verify.secretRef` : ils permettent de vérifier que l'image OCI déployée sur le cluster a bien été signée avec la clé privée Cosign correspondante, utilisée précédemment dans le job CI/CD. \n\nLa clé publique correspondante doit être stockée dans un [secret Kubernetes](https://kubernetes.io/fr/docs/concepts/configuration/secret/) qui doit être présent dans le même espace de nommage que la ressource `OCIRepository`. Pour que ce secret soit géré par Flux CD et non stocké en texte brut, vous pouvez utiliser [SealedSecrets](https://fluxcd.io/flux/guides/sealed-secrets/) pour chiffrer sa valeur et la faire déchiffrer côté cluster par un contrôleur. \n\nSi vous souhaitez opter pour une approche plus simple sans SealedSecrets, vous pouvez [déployer le secret via un job GitLab CI/CD](https://docs.gitlab.com/ee/user/clusters/agent/getting_started_deployments.html) à l'aide de l'[interface de ligne de commande `kubectl CLI`](https://kubernetes.io/docs/reference/kubectl/). Il vous suffit alors de supprimer le SealedSecret inclus dans la configuration ci-dessus et d'exécuter un job CI/CD pour déployer le secret de clé publique avant de lancer le job qui effectuera un push de la nouvelle image OCI. Cette opération permet de stocker le secret en toute sécurité dans GitLab et d'y accéder sur le cluster par le biais de la ressource OCIRepository. Cependant, bien qu'elle soit moins complexe, cette approche ne permet pas de gérer les secrets en environnement de production. \n\n## Les avantages combinés des artefacts OCI, de GitLab et de GitOps\n\nLes artefacts OCI permettent aux équipes GitOps d'affiner leurs déploiements avec un niveau de sécurité renforcé et une approche plus minimaliste, sans priver les utilisateurs des atouts de Git, notamment une source unique de vérité et une collaboration efficace. Les images OCI introduisent une méthode d'empaquetage optimisée qui améliore le déploiement au sein des workflows GitOps.\n\nGitLab continue de s'améliorer grâce aux retours de ses clients et de la communauté cloud-native dans le but de simplifier les workflows GitOps. Pour tester les fonctionnalités présentées dans cet article, vous pouvez commencer par un [essai gratuit de GitLab Ultimate](https://about.gitlab.com/fr-fr/free-trial/). Nous serions ravis de connaître votre avis suite à l'utilisation de ces outils. Alors, n'hésitez pas à nous faire part de vos retours d'expérience sur le [forum de la communauté GitLab](https://forum.gitlab.com/t/oci-images-as-source-of-truth-for-gitops-with-gitlab/120965).\n",[108,684,9,536,706,707],"git","tutorial","2025-05-09",{"slug":710,"featured":6,"template":687},"how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery","content:fr-fr:blog:how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery.yml","How To Use Oci Images As The Source Of Truth For Continuous Delivery","fr-fr/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery.yml","fr-fr/blog/how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",1,[667],1758326310387]