[{"data":1,"prerenderedAt":972},["ShallowReactive",2],{"/blog/categories/devsecops/page/15":3,"navigation-en-us":21,"banner-en-us":449,"footer-en-us":459,"devsecops-category-page-total-items-en-us":702,"devsecops-category-page-featured-en-us":703,"devsecops-category-page-15-en-us":910},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":11,"description":6,"extension":13,"meta":14,"navigation":15,"path":16,"seo":17,"slug":6,"stem":19,"testContent":6,"type":6,"__hash__":20},"blogCategories/en-us/blog/categories/devsecops.yml","Devsecops",null,{"template":8,"slug":9,"hide":10},"BlogCategory","devsecops",false,{"name":12},"DevSecOps","yml",{},true,"/en-us/blog/categories/devsecops",{"title":12,"description":18},"Browse articles related to DevSecOps on the GitLab Blog","en-us/blog/categories/devsecops","CMEA5RSEzkIxqsAQ42q3nyQxbB-scYg0tjsE5w5w19w",{"logo":22,"freeTrial":27,"sales":32,"login":37,"items":42,"search":369,"minimal":400,"duo":419,"switchNav":428,"pricingDeployment":439},{"config":23},{"href":24,"dataGaName":25,"dataGaLocation":26},"/","gitlab logo","header",{"text":28,"config":29},"Get free trial",{"href":30,"dataGaName":31,"dataGaLocation":26},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":33,"config":34},"Request a demo",{"href":35,"dataGaName":36,"dataGaLocation":26},"/sales/?contact-topic=request-demo","sales",{"text":38,"config":39},"Sign in",{"href":40,"dataGaName":41,"dataGaLocation":26},"https://gitlab.com/users/sign_in/","sign in",[43,72,172,177,291,347],{"text":44,"config":45,"menu":47},"Platform",{"dataNavLevelOne":46},"platform",{"type":48,"columns":49},"cards",[50,56,64],{"title":44,"description":51,"link":52},"The intelligent orchestration platform for DevSecOps",{"text":53,"config":54},"Explore our Platform",{"href":55,"dataGaName":46,"dataGaLocation":26},"/platform/",{"title":57,"description":58,"link":59},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":60,"config":61},"Meet GitLab Duo",{"href":62,"dataGaName":63,"dataGaLocation":26},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":65,"description":66,"link":67},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":68,"config":69},"Learn more",{"href":70,"dataGaName":71,"dataGaLocation":26},"/why-gitlab/","why gitlab",{"text":73,"left":15,"config":74,"menu":76},"Product",{"dataNavLevelOne":75},"solutions",{"type":77,"link":78,"columns":82,"feature":151},"lists",{"text":79,"config":80},"View all Solutions",{"href":81,"dataGaName":75,"dataGaLocation":26},"/solutions/",[83,107,130],{"title":84,"description":85,"link":86,"items":91},"Automation","CI/CD and automation to accelerate deployment",{"config":87},{"icon":88,"href":89,"dataGaName":90,"dataGaLocation":26},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[92,96,99,103],{"text":93,"config":94},"CI/CD",{"href":95,"dataGaLocation":26,"dataGaName":93},"/solutions/continuous-integration/",{"text":57,"config":97},{"href":62,"dataGaLocation":26,"dataGaName":98},"gitlab duo agent platform - product menu",{"text":100,"config":101},"Source Code Management",{"href":102,"dataGaLocation":26,"dataGaName":100},"/solutions/source-code-management/",{"text":104,"config":105},"Automated Software Delivery",{"href":89,"dataGaLocation":26,"dataGaName":106},"Automated software delivery",{"title":108,"description":109,"link":110,"items":115},"Security","Deliver code faster without compromising security",{"config":111},{"href":112,"dataGaName":113,"dataGaLocation":26,"icon":114},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[116,120,125],{"text":117,"config":118},"Application Security Testing",{"href":112,"dataGaName":119,"dataGaLocation":26},"Application security testing",{"text":121,"config":122},"Software Supply Chain Security",{"href":123,"dataGaLocation":26,"dataGaName":124},"/solutions/supply-chain/","Software supply chain security",{"text":126,"config":127},"Software Compliance",{"href":128,"dataGaName":129,"dataGaLocation":26},"/solutions/software-compliance/","software compliance",{"title":131,"link":132,"items":137},"Measurement",{"config":133},{"icon":134,"href":135,"dataGaName":136,"dataGaLocation":26},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[138,142,146],{"text":139,"config":140},"Visibility & Measurement",{"href":135,"dataGaLocation":26,"dataGaName":141},"Visibility and Measurement",{"text":143,"config":144},"Value Stream Management",{"href":145,"dataGaLocation":26,"dataGaName":143},"/solutions/value-stream-management/",{"text":147,"config":148},"Analytics & Insights",{"href":149,"dataGaLocation":26,"dataGaName":150},"/solutions/analytics-and-insights/","Analytics and insights",{"title":152,"type":77,"items":153},"GitLab for",[154,160,166],{"text":155,"config":156},"Enterprise",{"icon":157,"href":158,"dataGaLocation":26,"dataGaName":159},"Building","/enterprise/","enterprise",{"text":161,"config":162},"Small Business",{"icon":163,"href":164,"dataGaLocation":26,"dataGaName":165},"Work","/small-business/","small business",{"text":167,"config":168},"Public Sector",{"icon":169,"href":170,"dataGaLocation":26,"dataGaName":171},"Organization","/solutions/public-sector/","public sector",{"text":173,"config":174},"Pricing",{"href":175,"dataGaName":176,"dataGaLocation":26,"dataNavLevelOne":176},"/pricing/","pricing",{"text":178,"config":179,"menu":181},"Resources",{"dataNavLevelOne":180},"resources",{"type":77,"link":182,"columns":186,"feature":280},{"text":183,"config":184},"View all resources",{"href":185,"dataGaName":180,"dataGaLocation":26},"/resources/",[187,220,247],{"title":188,"items":189},"Getting started",[190,195,200,205,210,215],{"text":191,"config":192},"Install",{"href":193,"dataGaName":194,"dataGaLocation":26},"/install/","install",{"text":196,"config":197},"Quick start guides",{"href":198,"dataGaName":199,"dataGaLocation":26},"/get-started/","quick setup checklists",{"text":201,"config":202},"Learn",{"href":203,"dataGaLocation":26,"dataGaName":204},"https://university.gitlab.com/","learn",{"text":206,"config":207},"Product documentation",{"href":208,"dataGaName":209,"dataGaLocation":26},"https://docs.gitlab.com/","product documentation",{"text":211,"config":212},"Best practice videos",{"href":213,"dataGaName":214,"dataGaLocation":26},"/getting-started-videos/","best practice videos",{"text":216,"config":217},"Integrations",{"href":218,"dataGaName":219,"dataGaLocation":26},"/integrations/","integrations",{"title":221,"items":222},"Discover",[223,228,233,238,242],{"text":224,"config":225},"Customer success stories",{"href":226,"dataGaName":227,"dataGaLocation":26},"/customers/","customer success stories",{"text":229,"config":230},"Blog",{"href":231,"dataGaName":232,"dataGaLocation":26},"/blog/","blog",{"text":234,"config":235},"Demo Hub",{"href":236,"dataGaName":237,"dataGaLocation":26},"/demo-hub/","demo hub",{"text":239,"config":240},"The Source",{"href":241,"dataGaName":232,"dataGaLocation":26},"/the-source/",{"text":243,"config":244},"Remote",{"href":245,"dataGaName":246,"dataGaLocation":26},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":248,"items":249},"Connect",[250,255,260,265,270,275],{"text":251,"config":252},"GitLab Services",{"href":253,"dataGaName":254,"dataGaLocation":26},"/services/","services",{"text":256,"config":257},"Contribute",{"href":258,"dataGaName":259,"dataGaLocation":26},"https://contributors.gitlab.com","contribute",{"text":261,"config":262},"Community",{"href":263,"dataGaName":264,"dataGaLocation":26},"/community/","community",{"text":266,"config":267},"Forum",{"href":268,"dataGaName":269,"dataGaLocation":26},"https://forum.gitlab.com/","forum",{"text":271,"config":272},"Events",{"href":273,"dataGaName":274,"dataGaLocation":26},"/events/","events",{"text":276,"config":277},"Partners",{"href":278,"dataGaName":279,"dataGaLocation":26},"/partners/","partners",{"config":281,"title":284,"text":285,"link":286},{"background":282,"textColor":283},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":287,"config":288},"Read the latest",{"href":289,"dataGaName":290,"dataGaLocation":26},"/whats-new/","whats new",{"text":292,"config":293,"menu":295},"Company",{"dataNavLevelOne":294},"company",{"type":77,"columns":296},[297],{"items":298},[299,304,310,312,317,322,327,332,337,342],{"text":300,"config":301},"About",{"href":302,"dataGaName":303,"dataGaLocation":26},"/company/","about",{"text":305,"config":306,"footerGa":309},"Jobs",{"href":307,"dataGaName":308,"dataGaLocation":26},"/jobs/","jobs",{"dataGaName":308},{"text":271,"config":311},{"href":273,"dataGaName":274,"dataGaLocation":26},{"text":313,"config":314},"Leadership",{"href":315,"dataGaName":316,"dataGaLocation":26},"/company/team/e-group/","leadership",{"text":318,"config":319},"Handbook",{"href":320,"dataGaName":321,"dataGaLocation":26},"https://handbook.gitlab.com/","handbook",{"text":323,"config":324},"Investor relations",{"href":325,"dataGaName":326,"dataGaLocation":26},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":328,"config":329},"Trust Center",{"href":330,"dataGaName":331,"dataGaLocation":26},"/security/","trust center",{"text":333,"config":334},"AI Transparency Center",{"href":335,"dataGaName":336,"dataGaLocation":26},"/ai-transparency-center/","ai transparency center",{"text":338,"config":339},"Newsletter",{"href":340,"dataGaName":341,"dataGaLocation":26},"/company/contact/#contact-forms","newsletter",{"text":343,"config":344},"Press",{"href":345,"dataGaName":346,"dataGaLocation":26},"/press/","press",{"text":348,"config":349,"menu":350},"Contact us",{"dataNavLevelOne":294},{"type":77,"columns":351},[352],{"items":353},[354,359,364],{"text":355,"config":356},"Talk to sales",{"href":357,"dataGaName":358,"dataGaLocation":26},"/sales/","talk to sales",{"text":360,"config":361},"Support portal",{"href":362,"dataGaName":363,"dataGaLocation":26},"https://support.gitlab.com/hc/en-us","support portal",{"text":365,"config":366},"Customer portal",{"href":367,"dataGaName":368,"dataGaLocation":26},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":370,"login":371,"suggestions":378},"Close",{"text":372,"link":373},"To search repositories and projects, login to",{"text":374,"config":375},"gitlab.com",{"href":40,"dataGaName":376,"dataGaLocation":377},"search login","search",{"text":379,"default":380},"Suggestions",[381,383,387,389,393,397],{"text":57,"config":382},{"href":62,"dataGaName":57,"dataGaLocation":377},{"text":384,"config":385},"Code Suggestions (AI)",{"href":386,"dataGaName":384,"dataGaLocation":377},"/solutions/code-suggestions/",{"text":93,"config":388},{"href":95,"dataGaName":93,"dataGaLocation":377},{"text":390,"config":391},"GitLab on AWS",{"href":392,"dataGaName":390,"dataGaLocation":377},"/partners/technology-partners/aws/",{"text":394,"config":395},"GitLab on Google Cloud",{"href":396,"dataGaName":394,"dataGaLocation":377},"/partners/technology-partners/google-cloud-platform/",{"text":398,"config":399},"Why GitLab?",{"href":70,"dataGaName":398,"dataGaLocation":377},{"freeTrial":401,"mobileIcon":406,"desktopIcon":411,"secondaryButton":414},{"text":402,"config":403},"Start free trial",{"href":404,"dataGaName":31,"dataGaLocation":405},"https://gitlab.com/-/trials/new/","nav",{"altText":407,"config":408},"Gitlab Icon",{"src":409,"dataGaName":410,"dataGaLocation":405},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":407,"config":412},{"src":413,"dataGaName":410,"dataGaLocation":405},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":415,"config":416},"Get Started",{"href":417,"dataGaName":418,"dataGaLocation":405},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":420,"mobileIcon":424,"desktopIcon":426},{"text":421,"config":422},"Learn more about GitLab Duo",{"href":62,"dataGaName":423,"dataGaLocation":405},"gitlab duo",{"altText":407,"config":425},{"src":409,"dataGaName":410,"dataGaLocation":405},{"altText":407,"config":427},{"src":413,"dataGaName":410,"dataGaLocation":405},{"button":429,"mobileIcon":434,"desktopIcon":436},{"text":430,"config":431},"/switch",{"href":432,"dataGaName":433,"dataGaLocation":405},"#contact","switch",{"altText":407,"config":435},{"src":409,"dataGaName":410,"dataGaLocation":405},{"altText":407,"config":437},{"src":438,"dataGaName":410,"dataGaLocation":405},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":440,"mobileIcon":445,"desktopIcon":447},{"text":441,"config":442},"Back to pricing",{"href":175,"dataGaName":443,"dataGaLocation":405,"icon":444},"back to pricing","GoBack",{"altText":407,"config":446},{"src":409,"dataGaName":410,"dataGaLocation":405},{"altText":407,"config":448},{"src":413,"dataGaName":410,"dataGaLocation":405},{"title":450,"titleMobile":451,"button":452,"config":457},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":68,"config":453},{"href":454,"dataGaName":455,"dataGaLocation":456},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":458,"disabled":10},"release",{"data":460},{"text":461,"source":462,"edit":468,"contribute":473,"config":478,"items":483,"minimal":691},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":463,"config":464},"View page source",{"href":465,"dataGaName":466,"dataGaLocation":467},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":469,"config":470},"Edit this page",{"href":471,"dataGaName":472,"dataGaLocation":467},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":474,"config":475},"Please contribute",{"href":476,"dataGaName":477,"dataGaLocation":467},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":479,"facebook":480,"youtube":481,"linkedin":482},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[484,531,583,627,659],{"title":173,"links":485,"subMenu":500},[486,490,495],{"text":487,"config":488},"View plans",{"href":175,"dataGaName":489,"dataGaLocation":467},"view plans",{"text":491,"config":492},"Why Premium?",{"href":493,"dataGaName":494,"dataGaLocation":467},"/pricing/premium/","why premium",{"text":496,"config":497},"Why Ultimate?",{"href":498,"dataGaName":499,"dataGaLocation":467},"/pricing/ultimate/","why ultimate",[501],{"title":502,"links":503},"Contact Us",[504,507,509,511,516,521,526],{"text":505,"config":506},"Contact sales",{"href":357,"dataGaName":36,"dataGaLocation":467},{"text":360,"config":508},{"href":362,"dataGaName":363,"dataGaLocation":467},{"text":365,"config":510},{"href":367,"dataGaName":368,"dataGaLocation":467},{"text":512,"config":513},"Status",{"href":514,"dataGaName":515,"dataGaLocation":467},"https://status.gitlab.com/","status",{"text":517,"config":518},"Terms of use",{"href":519,"dataGaName":520,"dataGaLocation":467},"/terms/","terms of use",{"text":522,"config":523},"Privacy statement",{"href":524,"dataGaName":525,"dataGaLocation":467},"/privacy/","privacy statement",{"text":527,"config":528},"Cookie preferences",{"dataGaName":529,"dataGaLocation":467,"id":530,"isOneTrustButton":15},"cookie preferences","ot-sdk-btn",{"title":73,"links":532,"subMenu":541},[533,537],{"text":534,"config":535},"DevSecOps platform",{"href":55,"dataGaName":536,"dataGaLocation":467},"devsecops platform",{"text":538,"config":539},"AI-Assisted Development",{"href":62,"dataGaName":540,"dataGaLocation":467},"ai-assisted development",[542],{"title":543,"links":544},"Topics",[545,550,555,560,565,568,573,578],{"text":546,"config":547},"CICD",{"href":548,"dataGaName":549,"dataGaLocation":467},"/topics/ci-cd/","cicd",{"text":551,"config":552},"GitOps",{"href":553,"dataGaName":554,"dataGaLocation":467},"/topics/gitops/","gitops",{"text":556,"config":557},"DevOps",{"href":558,"dataGaName":559,"dataGaLocation":467},"/topics/devops/","devops",{"text":561,"config":562},"Version Control",{"href":563,"dataGaName":564,"dataGaLocation":467},"/topics/version-control/","version control",{"text":12,"config":566},{"href":567,"dataGaName":9,"dataGaLocation":467},"/topics/devsecops/",{"text":569,"config":570},"Cloud Native",{"href":571,"dataGaName":572,"dataGaLocation":467},"/topics/cloud-native/","cloud native",{"text":574,"config":575},"AI for Coding",{"href":576,"dataGaName":577,"dataGaLocation":467},"/topics/devops/ai-for-coding/","ai for coding",{"text":579,"config":580},"Agentic AI",{"href":581,"dataGaName":582,"dataGaLocation":467},"/topics/agentic-ai/","agentic ai",{"title":584,"links":585},"Solutions",[586,588,590,595,599,602,606,609,611,614,617,622],{"text":117,"config":587},{"href":112,"dataGaName":117,"dataGaLocation":467},{"text":106,"config":589},{"href":89,"dataGaName":90,"dataGaLocation":467},{"text":591,"config":592},"Agile development",{"href":593,"dataGaName":594,"dataGaLocation":467},"/solutions/agile-delivery/","agile delivery",{"text":596,"config":597},"SCM",{"href":102,"dataGaName":598,"dataGaLocation":467},"source code management",{"text":546,"config":600},{"href":95,"dataGaName":601,"dataGaLocation":467},"continuous integration & delivery",{"text":603,"config":604},"Value stream management",{"href":145,"dataGaName":605,"dataGaLocation":467},"value stream management",{"text":551,"config":607},{"href":608,"dataGaName":554,"dataGaLocation":467},"/solutions/gitops/",{"text":155,"config":610},{"href":158,"dataGaName":159,"dataGaLocation":467},{"text":612,"config":613},"Small business",{"href":164,"dataGaName":165,"dataGaLocation":467},{"text":615,"config":616},"Public sector",{"href":170,"dataGaName":171,"dataGaLocation":467},{"text":618,"config":619},"Education",{"href":620,"dataGaName":621,"dataGaLocation":467},"/solutions/education/","education",{"text":623,"config":624},"Financial services",{"href":625,"dataGaName":626,"dataGaLocation":467},"/solutions/finance/","financial services",{"title":178,"links":628},[629,631,633,635,638,640,643,645,647,649,651,653,655,657],{"text":191,"config":630},{"href":193,"dataGaName":194,"dataGaLocation":467},{"text":196,"config":632},{"href":198,"dataGaName":199,"dataGaLocation":467},{"text":201,"config":634},{"href":203,"dataGaName":204,"dataGaLocation":467},{"text":206,"config":636},{"href":208,"dataGaName":637,"dataGaLocation":467},"docs",{"text":229,"config":639},{"href":231,"dataGaName":232,"dataGaLocation":467},{"text":641,"config":642},"What's new",{"href":289,"dataGaName":290,"dataGaLocation":467},{"text":224,"config":644},{"href":226,"dataGaName":227,"dataGaLocation":467},{"text":243,"config":646},{"href":245,"dataGaName":246,"dataGaLocation":467},{"text":251,"config":648},{"href":253,"dataGaName":254,"dataGaLocation":467},{"text":256,"config":650},{"href":258,"dataGaName":259,"dataGaLocation":467},{"text":261,"config":652},{"href":263,"dataGaName":264,"dataGaLocation":467},{"text":266,"config":654},{"href":268,"dataGaName":269,"dataGaLocation":467},{"text":271,"config":656},{"href":273,"dataGaName":274,"dataGaLocation":467},{"text":276,"config":658},{"href":278,"dataGaName":279,"dataGaLocation":467},{"title":292,"links":660},[661,663,665,667,669,671,675,680,682,684,686],{"text":300,"config":662},{"href":302,"dataGaName":294,"dataGaLocation":467},{"text":305,"config":664},{"href":307,"dataGaName":308,"dataGaLocation":467},{"text":313,"config":666},{"href":315,"dataGaName":316,"dataGaLocation":467},{"text":318,"config":668},{"href":320,"dataGaName":321,"dataGaLocation":467},{"text":323,"config":670},{"href":325,"dataGaName":326,"dataGaLocation":467},{"text":672,"config":673},"Sustainability",{"href":674,"dataGaName":672,"dataGaLocation":467},"/sustainability/",{"text":676,"config":677},"Diversity, inclusion and belonging (DIB)",{"href":678,"dataGaName":679,"dataGaLocation":467},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":328,"config":681},{"href":330,"dataGaName":331,"dataGaLocation":467},{"text":338,"config":683},{"href":340,"dataGaName":341,"dataGaLocation":467},{"text":343,"config":685},{"href":345,"dataGaName":346,"dataGaLocation":467},{"text":687,"config":688},"Modern Slavery Transparency Statement",{"href":689,"dataGaName":690,"dataGaLocation":467},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":692},[693,696,699],{"text":694,"config":695},"Terms",{"href":519,"dataGaName":520,"dataGaLocation":467},{"text":697,"config":698},"Cookies",{"dataGaName":529,"dataGaLocation":467,"id":530,"isOneTrustButton":15},{"text":700,"config":701},"Privacy",{"href":524,"dataGaName":525,"dataGaLocation":467},162,{"id":704,"title":705,"authors":706,"body":708,"category":9,"date":893,"description":894,"extension":895,"externalUrl":6,"faq":6,"featured":10,"heroImage":896,"meta":897,"navigation":15,"path":898,"seo":899,"slug":901,"stem":902,"tags":903,"template":908,"updatedDate":6,"__hash__":909},"blogPosts/en-us/blog/gitaly-on-kubernetes-generally-available.md","Consolidate your GitLab stack with Gitaly on Kubernetes",[707],"Olivier Campeau",{"type":709,"value":710,"toc":885},"minimark",[711,722,727,730,739,764,767,776,779,832,835,844,848,851,860,864,878],[712,713,714,715,721],"p",{},"With ",[716,717,720],"a",{"href":718,"rel":719},"https://about.gitlab.com/whats-new/",[],"GitLab 18.11"," came good news for teams running GitLab on Kubernetes: Gitaly on Kubernetes is now generally available. Teams hosting GitLab on Kubernetes previously faced the challenge of maintaining a hybrid setup — running most GitLab components in Kubernetes while keeping Gitaly on virtual machines. This hybrid architecture made day-to-day operations more complex for those teams. Those days are over; Gitaly on Kubernetes is now an officially supported deployment option.",[723,724,726],"h3",{"id":725},"the-road-to-kubernetes","The road to Kubernetes",[712,728,729],{},"Gitaly has some hard requirements that don't translate naturally into a Kubernetes environment.",[712,731,732,733,738],{},"Git operations can be memory-intensive and their usage patterns are difficult to predict. To shield the main Gitaly process from out-of-memory (OOM) events and avoid downtime, Gitaly ",[716,734,737],{"href":735,"rel":736},"https://docs.gitlab.com/administration/gitaly/cgroups/",[],"can be configured to run each Git process inside a dedicated cgroup",". In this setup, the Gitaly process lives in a separate cgroup from those used by Git processes. If a Git process exceeds its cgroup's memory limit and gets terminated, the main Gitaly process remains unaffected.",[712,740,741,742,746,747,752,753,755,756,759,760,763],{},"Making this setup work in a Kubernetes Pod required additional work. Most Kubernetes clusters use ",[743,744,745],"code",{},"containerd"," as their container runtime, and ",[716,748,751],{"href":749,"rel":750},"https://github.com/containerd/containerd/issues/10924",[],"until recently",", ",[743,754,745],{}," only allowed containers to write to ",[743,757,758],{},"cgroupfs"," if they were running in privileged mode. The solution was to mount ",[743,761,762],{},"/sys/fs/cgroup"," via an init container and make the path writable.",[712,765,766],{},"Pod restarts also required additional work. On a virtual machine, Omnibus can upgrade the Gitaly binary in place and reload gracefully by keeping the socket open while swapping out the process. On Kubernetes though, when a StatefulSet pod is replaced — whether due to a Helm upgrade, a node drain, or a configuration change — the Gitaly Pods are stopped and restarted. It's a hard stop, not a graceful reload. For Gitaly sharded for example, which does not offer high-availability, that means downtime which might not be acceptable for some customers.",[712,768,769,770,775],{},"Our solution was to make ",[716,771,774],{"href":772,"rel":773},"https://docs.gitlab.com/administration/settings/gitaly_timeouts/#gitaly-client-retries",[],"client retries configurable",". By configuring Gitaly clients — such as Rails — to retry requests long enough for Gitaly to restart and become available again, users may notice slightly higher latency during that brief window, but requests will ultimately succeed and downtime is avoided.",[712,777,778],{},"To confirm that client retries effectively eliminated downtime during upgrades, we ran a series of benchmarks. We executed common Git operations against two GitLab instances — one with Gitaly on VMs, and another on Kubernetes — then triggered an upgrade mid-test and tracked request success rates. The results:",[780,781,782,798],"table",{},[783,784,785],"thead",{},[786,787,788,792,795],"tr",{},[789,790,791],"th",{},"Operation",[789,793,794],{},"VM Success Rate",[789,796,797],{},"Kubernetes Success Rate",[799,800,801,812,822],"tbody",{},[786,802,803,807,810],{},[804,805,806],"td",{},"git clone",[804,808,809],{},"100%",[804,811,809],{},[786,813,814,817,819],{},[804,815,816],{},"git pull",[804,818,809],{},[804,820,821],{},"99.16%",[786,823,824,827,830],{},[804,825,826],{},"git push",[804,828,829],{},"99.66%",[804,831,809],{},[833,834],"br",{},[712,836,837,838,843],{},"The numbers are nearly identical across both environments. What makes these results especially encouraging is the nature of Kubernetes itself — a Pod restart means an abrupt process termination and immediate socket closure, yet success rates remained this high. Full 100% success across every operation would require our high-availability solution, ",[716,839,842],{"href":840,"rel":841},"https://docs.gitlab.com/administration/gitaly/praefect/",[],"Gitaly Cluster (Praefect)",", which doesn't yet support Kubernetes — though that's actively being worked on, with general availability status on the horizon.",[723,845,847],{"id":846},"what-gitaly-on-kubernetes-means-for-you","What Gitaly on Kubernetes means for you",[712,849,850],{},"If you're running GitLab in hybrid mode — with some components on Kubernetes and Gitaly on VMs — you can now consolidate your infrastructure by moving Gitaly into the cluster. This eliminates the need to maintain and monitor a separate VM fleet alongside your Kubernetes nodes, bringing your entire GitLab stack under a single Kubernetes-managed environment.",[712,852,853,854,859],{},"If you're adopting GitLab for the first time and you already operate software on Kubernetes, you now benefit from a fully Kubernetes-native GitLab deployment provided with our ",[716,855,858],{"href":856,"rel":857},"https://gitlab.com/gitlab-org/charts/gitlab",[],"Helm chart",".",[723,861,863],{"id":862},"installing-gitaly-on-kubernetes","Installing Gitaly on Kubernetes",[712,865,866,867,871,872,877],{},"The recommended way to deploy Gitaly on Kubernetes is through the ",[716,868,870],{"href":856,"rel":869},[],"GitLab Helm chart",". Before getting started, it's worth reading through the ",[716,873,876],{"href":874,"rel":875},"https://docs.gitlab.com/administration/gitaly/kubernetes/",[],"Gitaly on Kubernetes documentation",", which covers key configuration guidance and helps you avoid common pitfalls.",[712,879,880,881,884],{},"Gitaly can be deployed either as part of a full GitLab installation, or as an external component. The ",[716,882,876],{"href":874,"rel":883},[]," covers both scenarios.",{"title":886,"searchDepth":887,"depth":887,"links":888},"",2,[889,891,892],{"id":725,"depth":890,"text":726},3,{"id":846,"depth":890,"text":847},{"id":862,"depth":890,"text":863},"2026-05-07","Discover how to install Gitaly on Kubernetes, which is now generally available.","md","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png",{},"/en-us/blog/gitaly-on-kubernetes-generally-available",{"config":900,"title":705,"description":894},{"noIndex":10},"gitaly-on-kubernetes-generally-available","en-us/blog/gitaly-on-kubernetes-generally-available",[904,905,551,906,907],"kubernetes","git","features","product","BlogPost","l7vAzJZMKt-gTSP40nARjDkmPBiDV_J9MtxErIaTO1A",[911,918,925,932,939,946,953,960,966],{"title":912,"heroImage":913,"category":9,"description":914,"authors":915,"slug":917,"externalUrl":6},"How to begin your DevOps journey","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663736/Blog/Hero%20Images/a-deep-dive-into-the-security-analyst-persona.jpg","So you want a career in DevOps? These easy and affordable opportunities will let you get started today.",[916],"Christina Hupy, Ph.D.","how-to-begin-your-devops-journey",{"title":919,"heroImage":920,"category":9,"description":921,"authors":922,"slug":924,"externalUrl":6},"5 ways to bring DevOps to your campus","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668161/Blog/Hero%20Images/armycyberschool.jpg","Educators can give students a career advantage by collaborating with GitLab to bring DevOps lectures, tools, and community straight to the classroom.",[923],"PJ Metz","5-ways-to-bring-devops-to-your-campus",{"title":926,"heroImage":927,"category":9,"description":928,"authors":929,"slug":931,"externalUrl":6},"How to get the most out of software documentation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668339/Blog/Hero%20Images/a-tale-of-two-editors.jpg","Want to get even more mileage out of your DevOps platform? Better software documentation is the answer. Here are tips to help you get started.",[930],"Sharon Gaudin","16-ways-to-get-the-most-out-of-software-documentation",{"title":933,"heroImage":934,"category":9,"description":935,"authors":936,"slug":938,"externalUrl":6},"The road to smarter code reviewer recommendations","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668426/Blog/Hero%20Images/retrospectivesgitlabpost.jpg","Machine learning is coming to GitLab's code review process. Here's what you need to know, and how you can help!",[937],"Taylor McCaslin","the-road-to-smarter-code-reviewer-recommendations",{"title":940,"heroImage":941,"category":9,"description":942,"authors":943,"slug":945,"externalUrl":6},"Understand how your teams adopt DevOps with DevOps reports","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668473/Blog/Hero%20Images/john-schnobrich-FlPc9_VocJ4-unsplash.jpg","Learn about analytics, DevOps reports, DevOps scores, and more.",[944],"Orit Golowinski","devops-adoption",{"title":947,"heroImage":948,"category":9,"description":949,"authors":950,"slug":952,"externalUrl":6},"Don’t confuse these 12 shortcuts with iteration","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663383/Blog/Hero%20Images/tanuki-bg-full.png","Iteration is a GitLab value. Sid Sijbrandij, GitLab’s co-founder and CEO, discusses 12 shortcuts that are not iterations to help refine what is considered a good iteration.",[951],"Sid Sijbrandij","dont-confuse-these-twelve-shortcuts-with-iteration",{"title":954,"heroImage":955,"category":9,"description":956,"authors":957,"slug":959,"externalUrl":6},"Downtime happens, but GitLab Incident Management can help","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663397/Blog/Hero%20Images/logoforblogpost.jpg","GitLab's DevOps Platform doesn't just make it easy to release safe software faster, it also streamlines the process for problem solving. Here's a deep dive into GitLab Incident Management.",[958],"Itzik Gan Baruch","gitlab-incident-management",{"title":961,"heroImage":948,"category":9,"description":962,"authors":963,"slug":965,"externalUrl":6},"5 DevOps platform benefits that inspire GitLab users to become GitLab advocates","Learn how a single tweet led to insight from our advocates on how they use GitLab to improve their work and their own lives.",[964],"Omar Fernandez","five-devops-platform-benefits-that-inspire-gitlab-users",{"title":967,"heroImage":948,"category":9,"description":968,"authors":969,"slug":971,"externalUrl":6},"You're hired! Two GitLab contributors turn their success into full-time engineering roles","As we continue to celebrate the 10th anniversary of the first commit to GitLab, here's a look at how two highly active community members became enthusiastic team members.",[970],"GitLab","you-are-hired-two-gitlab-contributors-turn-their-success-into-full-time-engineering-roles",1786803780034]