Files
nexus/sreweekly/articles/503/07-it-works-on-my-cluster-a-tale-of-two-troubleshooters.html
2026-09-12 17:23:01 +08:00

1832 lines
128 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html dir="ltr" lang="en" class="initial"> <head><meta charset="utf-8"><title>It Works On My Cluster: A Tale Of Two Troubleshooters | Octopus blog</title><meta name="robots" content="max-image-preview:large, index, follow"><meta name="keywords"><meta name="description" content="Kubernetes is hard to troubleshoot. Learn how two teams worked together to troubleshoot a particularly tricky bug."><link rel="preconnect" href="https://octopus.com" crossorigin><link rel="preload" as="image" href="/blog/i/x/cover/blogimage-kubernetes-generic-1-2023.png" imagesrcset="/blog/i/600/cover/blogimage-kubernetes-generic-1-2023.webp 600w, /blog/i/1000/cover/blogimage-kubernetes-generic-1-2023.webp 1000w, /blog/i/2000/cover/blogimage-kubernetes-generic-1-2023.webp 1500w" imagesizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" fetchpriority="high"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/pu-vars.css"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/navbar-pu-styles.css"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/footer-pu-styles.css" media="print" onload="this.media='all';this.onload=null"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/marketo-pu-styles.css" media="print" onload="this.media='all';this.onload=null"><noscript><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/footer-pu-styles.css"><link rel="stylesheet" href="https://octopus.com/octopus-public/assets/marketo-pu-styles.css"></noscript><link rel="stylesheet" href="/blog/css/vars.css"><link rel="stylesheet" href="/blog/css/main.css"><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#311e3e"><link rel="canonical" href="https://octopus.com/blog/verifying-and-troubleshooting-kubernetes-deployments"><link rel="alternate" type="application/atom+xml" title="Octopus blog" href="/blog/feed.xml"><link rel="alternate" href="/blog/sitemap.xml" type="application/rss+xml"><link rel="shortcut icon" href="/blog/icons/favicon.ico" type="image/x-icon"><link rel="apple-touch-icon" href="/blog/icons/apple-touch-icon.png"><meta property="og:type" content="website"><meta property="og:url" content="https://octopus.com/blog/verifying-and-troubleshooting-kubernetes-deployments"><meta property="og:title" content="It works on my cluster: a tale of two troubleshooters"><meta property="og:description" content="Kubernetes is hard to troubleshoot. Learn how two teams worked together to troubleshoot a particularly tricky bug."><meta property="og:image" content="https://octopus.com/blog/img/cover/blogimage-kubernetes-generic-1-2023.png"><meta property="og:image:alt" content="Kubernetes inside magnifying glass on computer screen with stars surrounding it"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="It works on my cluster: a tale of two troubleshooters"><meta name="twitter:description" content="Kubernetes is hard to troubleshoot. Learn how two teams worked together to troubleshoot a particularly tricky bug."><meta name="twitter:image" content="https://octopus.com/blog/img/cover/blogimage-kubernetes-generic-1-2023.png"><meta name="twitter:image:alt" content="Kubernetes inside magnifying glass on computer screen with stars surrounding it"><meta name="view-transition" content="same-origin"><!-- Icons are decorative and used on ~10% of pages - load off the critical path -->
<link href="/blog/css/fa/css/fontawesome.css" rel="stylesheet" media="print" onload="this.media='all';this.onload=null">
<link href="/blog/css/fa/css/brands.css" rel="stylesheet" media="print" onload="this.media='all';this.onload=null">
<link href="/blog/css/fa/css/solid.css" rel="stylesheet" media="print" onload="this.media='all';this.onload=null">
<noscript>
<link href="/blog/css/fa/css/fontawesome.css" rel="stylesheet">
<link href="/blog/css/fa/css/brands.css" rel="stylesheet">
<link href="/blog/css/fa/css/solid.css" rel="stylesheet">
</noscript>
<meta name="google-site-verification" content="nIbWsTU_ELqMnLNxIexH_s6ch3m-s_MaFnl5u8WoaRM" />
<!-- Inline Script to set the initial theme -->
<script>
(() => {
const theme = localStorage.getItem('theme') || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
document.documentElement.setAttribute('data-theme', theme);
})();
</script>
<script defer>
const whenActivated = new Promise((resolve) => {
if (document.prerendering) {
document.addEventListener('prerenderingchange', resolve);
} else {
resolve();
}
});
async function add_gtm(w,d,s,l,i) {
// Only add analytics if the page is not "pre-rendering"
await whenActivated;
w[l] = w[l]||[];w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer'
? '&l=' + l
: '';
j.defer=true;
j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;
f.parentNode.insertBefore(j, f);
}
if (document.location.hostname === 'octopus.com'
|| document.location.hostname === 'www.octopus.com') {
// Only add analytics to production site
add_gtm(window, document, 'script', 'dataLayer', 'GTM-MQ943TFN');
}
</script><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "It works on my cluster: a tale of two troubleshooters",
"description": "Kubernetes is hard to troubleshoot. Learn how two teams worked together to troubleshoot a particularly tricky bug.",
"author": {
"@type": "Person",
"name": "Liam Mackie"
},
"datePublished": "2025-12-09T00:00:00.000Z",
"dateModified": "2025-12-09T00:00:00.000Z",
"publisher": {
"@type": "Organization",
"name": "Octopus Deploy",
"logo": {
"@type": "ImageObject",
"url": "/blog/img/octopus-glyph.png",
"width": 32,
"height": 32
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://octopus.com/blog/verifying-and-troubleshooting-kubernetes-deployments"
},
"image": {
"@type": "ImageObject",
"url": "https://octopus.com/blog/img/cover/blogimage-kubernetes-generic-1-2023.png",
"width": 1200,
"height": 800
},
"articleSection": "Engineering, Kubernetes"
}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://octopus.com/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://octopus.com/blog"},{"@type":"ListItem","position":3,"name":"It works on my cluster: a tale of two troubleshooters","item":"https://octopus.com/blog/verifying-and-troubleshooting-kubernetes-deployments"}]}</script></head> <body data-theme="dark"> <nav class="skip-links" aria-label="Skip Links" id="site-top"> <a href="#site-nav">Skip to navigation</a> <a href="#site-main">Skip to main content</a> <a href="#site-footer">Skip to footer</a> </nav> <div data-shared-source="live" data-shared-fragment="navbar" data-shared-note="fetched https://octopus.com/fragments/navbar at 2026-09-11T10:55:57.546Z">
<nav class="navbar navbar-pu site-header" aria-label="Main" data-navbar-pu itemscope itemtype="https://schema.org/SiteNavigationElement">
<div class="nav-container">
<div class="navbar-content">
<a class="navbar__logo" href="https://octopus.com/" aria-label="Octopus Deploy homepage" data-navbar-logo itemprop="url">
<svg id="glyph-icon" class="icon icon--octopus" xmlns="http://www.w3.org/2000/svg" width="144.4" height="154.6" version="1.1" viewBox="0 0 144.4 154.6">
<!-- Generator: Adobe Illustrator 29.3.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 151) -->
<defs>
<style>
.logo-color {
fill: #0d80d8;
}
</style>
</defs>
<path id="glyph-icon1" data-name="glyph-icon" class="logo-color" d="M9.5,117.2c11.5-7.6,24.9-20.4,20-35.4-2.8-8.3-6.6-15.2-7.3-24.2-.5-7.6.7-15.2,3.3-22.1C35.8,7.4,66.6-5.9,94.4,2.4c25.6,7.8,43.2,38,32.7,64.1-6.1,15.2-8.9,27.1,4.7,38.7,3.8,3.1,12.7,8.1,12.7,13.8s-14.6-1.7-16-2.8c1.9,3.3,20,22.3,8.5,23.8-10.6,1.2-20-13.8-26.3-20.2-10.8-10.9-8.9,13.1-8.9,18.1,0,7.8-5.6,23.8-15.3,13.3-8-8.6-4.9-22.1-10.6-31.6-6.1-10.5-16.5,10.5-19,14.3-2.8,4.3-17.2,24.7-22.8,13.8-4.7-8.8,2.8-22.8,6.3-30.9-1.4,2.8-10.8,7.1-13.4,8.6-5.9,3.3-12.7,5-19.5,4.5-14.8-1-3.8-8.8,2.1-12.6Z"/>
</svg>
<svg id="wordmark-octopus-deploy" class="icon icon--octopus-deploy-wordmark" xmlns="http://www.w3.org/2000/svg" width="751.5" height="98.9" version="1.1" viewBox="0 0 751.5 98.9">
<!-- Generator: Adobe Illustrator 29.3.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 151) -->
<defs>
<style>
.logo-wordmark-color {
fill: #0a151e;
}
</style>
</defs>
<path id="wordmark-octopus-deploy1" data-name="wordmark-octopus-deploy" class="logo-wordmark-color" d="M70.2,39.2c0,8.2-1.5,15.3-4.6,21.2-3.1,5.8-7.2,10.3-12.5,13.4-5.3,3.1-11.3,4.7-17.9,4.7s-12.7-1.6-18-4.7c-5.3-3.1-9.4-7.6-12.5-13.5C1.5,54.5,0,47.5,0,39.2s1.5-15.3,4.6-21.1c3.1-5.9,7.3-10.4,12.5-13.5C22.4,1.6,28.4,0,35.1,0s12.7,1.6,17.9,4.7c5.3,3.1,9.5,7.6,12.5,13.5,3.1,5.8,4.6,12.9,4.6,21.1ZM56.3,39.2c0-5.8-.9-10.7-2.7-14.7-1.8-4-4.3-7-7.5-9.1-3.2-2.1-6.9-3.1-11-3.1s-7.8,1-11,3.1c-3.2,2-5.7,5.1-7.5,9.1-1.8,4-2.7,8.9-2.7,14.7s.9,10.7,2.7,14.7c1.8,4,4.3,7,7.5,9.1,3.2,2,6.9,3.1,11,3.1s7.8-1,11-3.1c3.2-2.1,5.7-5.1,7.5-9.1,1.8-4,2.7-8.9,2.7-14.7ZM103.6,78.6c-5.7,0-10.6-1.3-14.7-3.8-4.1-2.5-7.2-6-9.4-10.4-2.2-4.5-3.3-9.6-3.3-15.4s1.1-11,3.4-15.4c2.2-4.5,5.4-8,9.5-10.4,4.1-2.5,9-3.8,14.5-3.8s8.8.9,12.3,2.6c3.6,1.7,6.5,4.1,8.6,7.2,2.1,3.1,3.4,6.7,3.7,10.8h-12.9c-.5-2.8-1.8-5.1-3.7-6.9-1.9-1.9-4.5-2.8-7.8-2.8s-5.2.7-7.3,2.2c-2.1,1.5-3.7,3.6-4.9,6.3-1.1,2.8-1.7,6.1-1.7,9.9s.6,7.3,1.7,10.1c1.1,2.8,2.7,4.9,4.8,6.5,2.1,1.5,4.5,2.2,7.4,2.2s3.8-.4,5.3-1.1c1.6-.8,2.9-1.9,4-3.3,1.1-1.4,1.8-3.2,2.2-5.3h12.9c-.3,4.1-1.5,7.6-3.6,10.8-2.1,3.1-4.9,5.5-8.4,7.3-3.6,1.7-7.7,2.6-12.5,2.6ZM163.8,20.1v10.4h-32.9v-10.4h32.9ZM139,6.4h13.5v53.8c0,1.8.3,3.2.8,4.2.6.9,1.3,1.6,2.2,1.9.9.3,1.9.5,3.1.5s1.6,0,2.3-.2c.7-.1,1.3-.2,1.6-.3l2.3,10.6c-.7.2-1.8.5-3.1.8-1.3.3-2.9.5-4.8.5-3.4.1-6.4-.4-9.1-1.5-2.7-1.1-4.9-2.9-6.5-5.3-1.6-2.4-2.3-5.4-2.3-9V6.4ZM195.4,78.6c-5.6,0-10.4-1.2-14.5-3.7-4.1-2.5-7.3-5.9-9.6-10.3-2.2-4.4-3.4-9.6-3.4-15.5s1.1-11.1,3.4-15.6c2.3-4.5,5.4-7.9,9.6-10.4,4.1-2.5,9-3.7,14.5-3.7s10.4,1.2,14.6,3.7c4.1,2.5,7.3,5.9,9.5,10.4,2.3,4.5,3.4,9.6,3.4,15.6s-1.1,11.1-3.4,15.5c-2.2,4.4-5.4,7.9-9.5,10.3-4.1,2.5-9,3.7-14.6,3.7ZM195.5,67.7c3,0,5.6-.8,7.6-2.5,2-1.7,3.6-4,4.6-6.8,1-2.8,1.5-6,1.5-9.5s-.5-6.7-1.5-9.5c-1-2.9-2.5-5.1-4.6-6.8-2-1.7-4.6-2.5-7.6-2.5s-5.7.8-7.8,2.5c-2,1.7-3.6,4-4.6,6.8-1,2.8-1.5,6-1.5,9.5s.5,6.6,1.5,9.5c1,2.8,2.5,5.1,4.6,6.8,2.1,1.7,4.7,2.5,7.8,2.5ZM230.3,98.9V20.1h13.3v9.5h.8c.7-1.4,1.7-2.9,2.9-4.4,1.3-1.6,3-2.9,5.1-4.1,2.2-1.1,4.9-1.7,8.3-1.7s8.4,1.1,12,3.4c3.6,2.2,6.4,5.6,8.5,10,2.1,4.4,3.2,9.7,3.2,16.1s-1,11.6-3.1,16c-2.1,4.4-4.9,7.8-8.4,10.1-3.6,2.3-7.6,3.5-12.1,3.5s-6-.5-8.2-1.6c-2.2-1.1-3.9-2.4-5.2-4-1.3-1.6-2.3-3-3-4.4h-.6v30.5h-13.5ZM243.5,48.8c0,3.7.5,7,1.6,9.7,1.1,2.8,2.6,5,4.6,6.5,2,1.5,4.5,2.3,7.3,2.3s5.5-.8,7.5-2.4c2-1.6,3.5-3.8,4.6-6.6,1-2.8,1.6-6,1.6-9.6s-.5-6.7-1.5-9.5c-1-2.8-2.5-4.9-4.6-6.5-2-1.6-4.5-2.4-7.5-2.4s-5.3.8-7.3,2.3c-2,1.5-3.5,3.6-4.6,6.4-1,2.7-1.5,6-1.5,9.7ZM328.4,53.3V20.1h13.5v57.3h-13.1v-10.2h-.6c-1.3,3.2-3.4,5.8-6.4,7.9-2.9,2-6.6,3.1-10.9,3.1s-7.1-.8-10-2.5c-2.9-1.7-5.1-4.1-6.7-7.3-1.6-3.2-2.4-7.1-2.4-11.7V20.1h13.5v34.4c0,3.6,1,6.5,3,8.7,2,2.1,4.6,3.2,7.8,3.2s3.9-.5,5.8-1.5c1.9-1,3.4-2.4,4.6-4.3,1.2-1.9,1.8-4.4,1.8-7.3ZM397,35.3l-12.3,1.3c-.3-1.2-1-2.4-1.8-3.5-.8-1.1-2-2-3.4-2.6-1.4-.7-3.2-1-5.3-1s-5.2.6-7.1,1.8c-1.9,1.2-2.8,2.8-2.8,4.7,0,1.7.6,3,1.8,4.1,1.3,1,3.4,1.9,6.3,2.6l9.8,2.1c5.4,1.2,9.5,3,12.1,5.6,2.7,2.5,4,5.9,4,10,0,3.6-1.1,6.8-3.2,9.6-2.1,2.7-4.9,4.9-8.6,6.4-3.7,1.5-7.9,2.3-12.7,2.3-7,0-12.7-1.5-16.9-4.4-4.3-3-6.8-7.1-7.6-12.3l13.2-1.3c.6,2.6,1.9,4.5,3.8,5.9,1.9,1.3,4.5,2,7.6,2s5.8-.7,7.7-2c2-1.3,2.9-2.9,2.9-4.9s-.6-3-1.9-4.1c-1.2-1.1-3.2-1.9-5.8-2.5l-9.8-2.1c-5.5-1.1-9.6-3.1-12.2-5.8-2.6-2.7-3.9-6.2-3.9-10.4,0-3.5.9-6.6,2.9-9.2,2-2.6,4.7-4.6,8.2-6,3.5-1.4,7.5-2.2,12.1-2.2,6.7,0,12,1.4,15.9,4.3,3.9,2.9,6.3,6.7,7.2,11.6ZM453.8,77.4h-25.9V1h26.4c7.6,0,14.1,1.5,19.5,4.6,5.5,3,9.7,7.4,12.6,13.1,2.9,5.7,4.4,12.5,4.4,20.4s-1.5,14.8-4.4,20.5c-2.9,5.7-7.2,10.1-12.7,13.2-5.5,3.1-12.2,4.6-19.9,4.6ZM441.7,65.5h11.4c5.3,0,9.8-1,13.3-2.9,3.6-2,6.2-4.9,8-8.8,1.8-3.9,2.7-8.8,2.7-14.6s-.9-10.7-2.7-14.5c-1.8-3.9-4.4-6.8-7.9-8.7-3.5-1.9-7.8-2.9-13-2.9h-11.8v52.5ZM524.7,78.6c-5.7,0-10.7-1.2-14.9-3.6-4.2-2.4-7.3-5.8-9.6-10.2-2.2-4.4-3.4-9.6-3.4-15.6s1.1-11.1,3.4-15.5c2.3-4.5,5.4-8,9.5-10.4,4.1-2.5,8.8-3.8,14.3-3.8s6.9.6,10,1.7c3.2,1.1,5.9,2.9,8.4,5.2,2.4,2.4,4.4,5.4,5.7,9,1.4,3.6,2.1,8,2.1,13v4.1h-47v-9.1h34c0-2.6-.6-4.9-1.7-6.9-1.1-2-2.6-3.6-4.6-4.8-1.9-1.2-4.2-1.8-6.8-1.8s-5.2.7-7.3,2c-2.1,1.3-3.7,3.1-4.9,5.2-1.1,2.1-1.7,4.5-1.8,7.1v7.9c0,3.3.6,6.2,1.8,8.6,1.2,2.4,2.9,4.2,5.1,5.4,2.2,1.2,4.8,1.9,7.7,1.9s3.7-.3,5.3-.8c1.6-.6,3-1.4,4.1-2.5,1.2-1.1,2.1-2.4,2.6-4.1l12.6,1.4c-.8,3.3-2.3,6.2-4.6,8.7-2.2,2.5-5,4.4-8.5,5.7-3.5,1.3-7.4,2-11.9,2ZM557.5,98.9V20.1h13.3v9.5h.8c.7-1.4,1.7-2.9,2.9-4.4,1.3-1.6,3-2.9,5.1-4.1,2.2-1.1,4.9-1.7,8.3-1.7s8.4,1.1,12,3.4c3.6,2.2,6.4,5.6,8.5,10,2.1,4.4,3.2,9.7,3.2,16.1s-1,11.6-3.1,16c-2.1,4.4-4.9,7.8-8.4,10.1-3.6,2.3-7.6,3.5-12.1,3.5s-6-.5-8.2-1.6c-2.2-1.1-3.9-2.4-5.2-4-1.3-1.6-2.3-3-3-4.4h-.6v30.5h-13.5ZM570.8,48.8c0,3.7.5,7,1.6,9.7,1.1,2.8,2.6,5,4.6,6.5,2,1.5,4.5,2.3,7.3,2.3s5.5-.8,7.5-2.4c2-1.6,3.5-3.8,4.6-6.6,1-2.8,1.6-6,1.6-9.6s-.5-6.7-1.5-9.5c-1-2.8-2.5-4.9-4.6-6.5-2-1.6-4.5-2.4-7.5-2.4s-5.3.8-7.3,2.3c-2,1.5-3.5,3.6-4.6,6.4-1,2.7-1.5,6-1.5,9.7ZM632.6,1v76.4h-13.5V1h13.5ZM667.4,78.6c-5.6,0-10.4-1.2-14.5-3.7-4.1-2.5-7.3-5.9-9.5-10.3-2.2-4.4-3.4-9.6-3.4-15.5s1.1-11.1,3.4-15.6c2.3-4.5,5.4-7.9,9.5-10.4s9-3.7,14.5-3.7,10.4,1.2,14.5,3.7c4.1,2.5,7.3,5.9,9.5,10.4,2.3,4.5,3.4,9.6,3.4,15.6s-1.1,11.1-3.4,15.5c-2.2,4.4-5.4,7.9-9.5,10.3-4.1,2.5-9,3.7-14.5,3.7ZM667.5,67.7c3,0,5.6-.8,7.6-2.5,2-1.7,3.6-4,4.6-6.8,1-2.8,1.5-6,1.5-9.5s-.5-6.7-1.5-9.5c-1-2.9-2.5-5.1-4.6-6.8-2-1.7-4.6-2.5-7.6-2.5s-5.7.8-7.8,2.5c-2,1.7-3.6,4-4.6,6.8-1,2.8-1.5,6-1.5,9.5s.5,6.6,1.5,9.5c1,2.8,2.5,5.1,4.6,6.8,2.1,1.7,4.7,2.5,7.8,2.5ZM708.7,98.9c-1.8,0-3.5-.1-5.1-.4-1.5-.3-2.8-.6-3.7-1l3.1-10.5c2,.6,3.7.8,5.3.8s2.9-.5,4.1-1.5c1.2-.9,2.2-2.5,3-4.6l1.2-3.1-20.8-58.5h14.3l13.2,43.3h.6l13.2-43.3h14.4l-22.9,64.2c-1.1,3-2.5,5.6-4.3,7.8-1.8,2.2-3.9,3.9-6.5,5-2.5,1.2-5.6,1.8-9.1,1.8Z"/>
</svg>
<span class="visually-hidden" itemprop="name">Octopus Deploy</span>
</a>
<div id="main-navbar" class="navbar__menu" data-navbar-menu>
<ul class="navbar__sections">
<li class="navbar__section">
<button type="button" class="navbar__button" aria-expanded="false" aria-controls="dropdown-solutions"
data-navbar-section-toggle data-target="dropdown-solutions"
aria-label="Solutions menu">
<span>Solutions</span>
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
</li>
<li class="navbar__section">
<a class="navbar__button" href="https://octopus.com/pricing/overview" itemprop="url">
<span itemprop="name">Pricing</span>
</a>
</li>
<li class="navbar__section">
<a class="navbar__button" href="https://octopus.com/docs" target="_blank" rel="noopener noreferrer" itemprop="url">
<span itemprop="name">Docs</span>
</a>
</li>
<li class="navbar__section">
<button type="button" class="navbar__button" aria-expanded="false" aria-controls="dropdown-resources"
data-navbar-section-toggle data-target="dropdown-resources"
aria-label="Resources menu">
<span>Resources</span>
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
</li>
<li class="navbar__section">
<button type="button" class="navbar__button" aria-expanded="false" aria-controls="dropdown-company"
data-navbar-section-toggle data-target="dropdown-company"
aria-label="Company menu">
<span>Company</span>
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
</li>
</ul>
<ul class="navbar__sections navbar__sections--secondary" data-navbar-secondary>
<li class="navbar__section" data-navbar-signin>
<a class="navbar__button" href="https://octopus.com/signin" rel="nofollow" itemprop="url">
<span itemprop="name">Sign in</span>
</a>
</li>
<li class="navbar__section navbar__section--contact">
<a class="navbar__button navbar__button--contact button button--secondary" href="https://octopus.com/company/contact" itemprop="url">
<span itemprop="name">Contact us</span>
</a>
</li>
<li class="navbar__section" data-navbar-signup>
<a class="navbar__button navbar__button--signup button button--primary" href="https://octopus.com/free-signup?location=nav-bar" rel="nofollow" itemprop="url">
<span itemprop="name">Start for free</span>
</a>
</li>
<li class="navbar__section navbar__section--user" data-navbar-profile hidden>
<div class="navbar__user-menu">
<button type="button" class="navbar__button navbar__user-toggle" data-navbar-profile-link
aria-expanded="false" aria-controls="dropdown-user" data-target="dropdown-user"
aria-label="User profile menu">
<span class="navbar__profile-image" data-navbar-profile-image>
<img src="data:image/gif;base64,R0lGODlhAQABAAAAACw=" alt="" loading="lazy" hidden />
</span>
<span class="personal" data-navbar-profile-name>User</span>
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
</div>
</li>
</ul>
</div>
<button class="navbar__toggler" type="button" aria-label="Open navigation menu" aria-controls="main-navbar" aria-expanded="false" data-navbar-toggler>
<span class="hamburger" aria-hidden="true">
<span class="hamburger__bar"></span>
<span class="hamburger__bar"></span>
<span class="hamburger__bar"></span>
</span>
</button>
</div>
</div>
<div class="navbar__panels" data-navbar-panels>
<nav class="navbar__dropdown" id="dropdown-solutions" data-navbar-dropdown aria-label="Solutions">
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Back</span>
</button>
<div class="navbar__subsection">
<ul class="navbar__subsection-items">
<li class="navbar__item">
<span class="navbar__item-sub-category">Octopus Deploy</span>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/use-case/kubernetes" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/c234e77f86/icon-kubernetes.svg" alt="Kubernetes icon logo steer blue gradient" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Kubernetes deployments</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/use-case/platform-hub" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/cc44e17bdf/icon-platform-hub.svg" alt="Blue boxes stacked on top of each other" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Platform Hub</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/use-case/environment-promotion" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/e2c09018a3/icon-environment-promotion.svg" alt="icon environment promotion gear blue gradient" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Environment promotion</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/ai-tools" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/bd93d826d3/icon-ai.svg" alt="AI icon" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">AI tools</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/use-case/argo-cd-in-octopus" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/d42ce2a726/icon-argo.svg" alt="Argo icon" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Argo CD in Octopus</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/use-case/runbooks" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/d9ab08e6a3/icon-runbooks.svg" alt="runbooks running book with a wrench on it blue gradient" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Automate operations tasks</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/use-case/tenanted-deployments" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/c89e19472b/icon-tenanted-deployments.svg" alt="icon tenanted deployments blue gradient three people" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Tenanted deployments</span>
</a>
</li>
</ul>
</div>
<div class="navbar__subsection">
<ul class="navbar__subsection-items">
<li class="navbar__item">
<span class="navbar__item-sub-category">Explore</span>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/downloads" itemprop="url">
<span class="navbar__item-label" itemprop="name">Install Octopus self-hosted</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/downloads/compare" itemprop="url">
<span class="navbar__item-label" itemprop="name">Compare releases</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/integrations" itemprop="url">
<span class="navbar__item-label" itemprop="name">Integrations</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://roadmap.octopus.com/tabs/2-planned" itemprop="url">
<span class="navbar__item-label" itemprop="name">Octopus Roadmap</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/free" itemprop="url">
<span class="navbar__item-label" itemprop="name">Start for free</span>
</a>
</li>
</ul>
</div>
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
</svg>
</nav>
<nav class="navbar__dropdown" id="dropdown-resources" data-navbar-dropdown aria-label="Resources">
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Back</span>
</button>
<div class="navbar__subsection">
<p class="navbar__subsection-title" id="dropdown-resources-explore">Explore</p>
<ul class="navbar__subsection-items" aria-labelledby="dropdown-resources-explore">
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/company/customers" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/00525c876d/icon-customer-stories.svg" alt="icon customer stories success example graduate" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Customer stories</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/webinars" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/a7c01192c7/icon-webinars.svg" alt="icon camera webinars videos capture" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Webinars</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/1845d0555a/icon-nav-publications.svg" alt="Publications icon" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Publications</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/downloads" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/0008b1a75e/nav-icon-downloads.svg" alt="Downloads icon" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Downloads</span>
</a>
</li>
</ul>
</div>
<div class="navbar__subsection">
<p class="navbar__subsection-title" id="dropdown-resources-support-and-services">Support and services</p>
<ul class="navbar__subsection-items" aria-labelledby="dropdown-resources-support-and-services">
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/docs" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/0724935a2e/icon-devops-handbook.svg" alt="icon book devops DevOps handbook ci cd cycle" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Documentation</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/support" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/ecb140a3aa/icon-partners.svg" alt="icon support partners handshake trust" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Customer support</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://learning.octopus.com/" target="_blank" rel="noopener noreferrer" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/7802cd7dd7/icon-certificates-1.svg" alt="Certification icon" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Certification</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/company/trust" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/d01a1b10a9/icon-trust-security.svg" alt="icon trust and security lock pad" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Trust and security</span>
</a>
</li>
</ul>
</div>
<div class="navbar__subsection">
<p class="navbar__subsection-title" id="dropdown-resources-publications">Publications</p>
<ul class="navbar__subsection-items" aria-labelledby="dropdown-resources-publications">
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications/ai-pulse-report" itemprop="url">
<span class="navbar__item-label" itemprop="name">AI Pulse report</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications/compliance-through-continuous-delivery" itemprop="url">
<span class="navbar__item-label" itemprop="name">Compliance through CD</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications/platform-engineering-pulse" itemprop="url">
<span class="navbar__item-label" itemprop="name">Platform Engineering Pulse report</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications/state-of-gitops-report" itemprop="url">
<span class="navbar__item-label" itemprop="name">State of GitOps report</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications/argo-cd-best-practices" itemprop="url">
<span class="navbar__item-label" itemprop="name">Argo CD best practices</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/whitepapers/kubernetes-delivery-unlocked" itemprop="url">
<span class="navbar__item-label" itemprop="name">Kubernetes delivery unlocked</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/publications" itemprop="url">
<span class="navbar__item-label" itemprop="name">View all publications</span>
</a>
</li>
</ul>
</div>
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
</svg>
</nav>
<nav class="navbar__dropdown" id="dropdown-company" data-navbar-dropdown aria-label="Company">
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Back</span>
</button>
<div class="navbar__subsection">
<p class="navbar__subsection-title" id="dropdown-company-careers">Careers</p>
<ul class="navbar__subsection-items" aria-labelledby="dropdown-company-careers">
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/company/careers" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/91b747265a/icon-careers-join-us.svg" alt="icon person plus career join us" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Join us</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://handbook.octopus.com/" target="_blank" rel="noopener noreferrer" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/45x45/94e4d7a548/icon-company-handbook.svg" alt="icon octopus handbook book" loading="lazy" width="45" height="45" />
</span>
</span>
<span class="navbar__item-label" itemprop="name">Company handbook</span>
</a>
</li>
</ul>
</div>
<div class="navbar__subsection">
<p class="navbar__subsection-title" id="dropdown-company-explore">Explore</p>
<ul class="navbar__subsection-items" aria-labelledby="dropdown-company-explore">
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/company" itemprop="url">
<span class="navbar__item-label" itemprop="name">About us</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/company/contact" itemprop="url">
<span class="navbar__item-label" itemprop="name">Contact us</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/news" itemprop="url">
<span class="navbar__item-label" itemprop="name">News and media</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/events" itemprop="url">
<span class="navbar__item-label" itemprop="name">Events</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/partners" itemprop="url">
<span class="navbar__item-label" itemprop="name">Our partners</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://shop.octopus.com/" target="_blank" rel="noopener noreferrer" itemprop="url">
<span class="navbar__item-label" itemprop="name">Swag</span>
</a>
</li>
</ul>
</div>
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
</svg>
</nav>
<nav class="navbar__dropdown" id="dropdown-user" data-navbar-profile-dropdown aria-label="User profile">
<button type="button" class="navbar__back-btn" data-navbar-back aria-label="Back to menu">
<svg class="icon icon--chevron-navbar" width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.98755 1.5L6.98755 6.5L11.9875 1.5" stroke="#303E49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Back</span>
</button>
<p class="navbar__panel-title" data-navbar-user-title>User</p>
<div class="navbar__subsection">
<ul class="navbar__subsection-items">
<li class="navbar__item">
<a class="navbar__item-link" href="https://billing.octopus.com" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45"><rect width="45" height="45" rx="8.9" fill="#f4f6f8"/><path d="M29.4 20.7l-.3.5c-.1.2-.3.3-.5.2-.4-.2-.8-.4-1.2-.7-.2-.1-.2-.4-.1-.6l.3-.5-.6-1h-.6c-.2 0-.4-.2-.4-.4v-1.3c0-.2.2-.4.4-.4h.6c.1-.4.3-.7.6-1l-.3-.5c-.1-.2 0-.4.1-.6.3-.3.7-.5 1.2-.7.2 0 .4 0 .5.2l.3.5h1.1l.3-.5c.1-.2.3-.3.5-.2.4.2.8.4 1.2.7.2.1.2.4.1.6l-.3.5.6 1h.6c.2 0 .4.2.4.4v1.3c0 .2-.2.4-.4.4h-.6c-.1.4-.3.7-.6 1l.3.5c.1.2 0 .4-.1.6-.3.3-.7.5-1.2.7-.2 0-.4 0-.5-.2l-.3-.5h-1.1zm-.4-2.1c1.4 1 3-.5 1.9-1.9-1.4-1-3 .5-1.9 1.9zm-4.1 5.5l1.2.6c.4.2.5.6.4 1-.3.9-.9 1.6-1.5 2.3-.3.3-.7.4-1.1.2l-1-.6c-.6.5-1.2.9-2 1.1v1.2c0 .4-.3.8-.7.8-.9.1-1.8.2-2.7 0-.4 0-.7-.4-.7-.8v-1.2c-.7-.3-1.4-.6-2-1.1l-1 .6c-.4.2-.8.1-1.1-.2-.6-.7-1.2-1.5-1.5-2.3-.1-.4 0-.8.4-1l1.2-.6c-.1-.7-.1-1.5 0-2.2l-1.2-.6c-.4-.2-.5-.6-.4-1 .3-.9.9-1.6 1.5-2.3.3-.3.7-.4 1.1-.2l1 .6c.6-.5 1.2-.9 2-1.1v-1.2c0-.4.3-.8.7-.8.9-.1 1.8-.2 2.7 0 .4 0 .7.4.7.8v1.2c.7.3 1.4.6 2 1.1l1-.6c.4-.2.8-.1 1.1.2.6.7 1.2 1.5 1.5 2.3.1.4 0 .8-.4 1l-1.2.6c.1.7.1 1.5 0 2.2zm-4.2.7c2.1-2.7-1-5.8-3.8-3.7-2.1 2.7 1 5.8 3.8 3.7zm8.7 6.4l-.3.5c-.1.2-.3.3-.5.2-.4-.2-.8-.4-1.2-.7-.2-.1-.2-.4-.1-.6l.3-.5-.6-1h-.6c-.2 0-.4-.2-.4-.4v-1.3c0-.2.2-.4.4-.4h.6c.1-.4.3-.7.6-1l-.3-.5c-.1-.2 0-.4.1-.6.3-.3.7-.5 1.2-.7.2 0 .4 0 .5.2l.3.5h1.1l.3-.5c.1-.2.3-.3.5-.2.4.2.8.4 1.2.7.2.1.2.4.1.6l-.3.5.6 1h.6c.2 0 .4.2.4.4v1.3c0 .2-.2.4-.4.4h-.6c-.1.4-.3.7-.6 1l.3.5c.1.2 0 .4-.1.6-.3.3-.7.5-1.2.7-.2 0-.4 0-.5-.2l-.3-.5h-1.1zm-.4-2c1.4 1 3-.5 1.9-1.9-1.4-1-3 .5-1.9 1.9z" fill="#282f38"/></svg>
</span>
</span>
<span class="navbar__item-label" itemprop="name">Control Center</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/profile" itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45"><rect width="45" height="45" rx="8.9" fill="#f4f6f8"/><path d="M22.5 9C15 9 9 15 9 22.5S15 36 22.5 36 36 30 36 22.5 30 9 22.5 9zm0 5.2c2.6 0 4.8 2.1 4.8 4.8s-2.1 4.8-4.8 4.8-4.8-2.1-4.8-4.8 2.1-4.8 4.8-4.8zm0 18.8c-3.2 0-6.1-1.4-8-3.7 1-1.9 3-3.3 5.4-3.3h.4c.7.2 1.4.4 2.2.4s1.5-.1 2.2-.4h.4c2.3 0 4.3 1.3 5.4 3.3-1.9 2.3-4.8 3.7-8 3.7z" fill="#282f38"/></svg>
</span>
</span>
<span class="navbar__item-label" itemprop="name">Profile</span>
</a>
</li>
<li class="navbar__item">
<a class="navbar__item-link" href="https://octopus.com/signout" data-navbar-signout itemprop="url">
<span class="navbar__item-icon" aria-hidden="true">
<span class="image-wrapper">
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45"><rect width="45" height="45" rx="8.9" fill="#f4f6f8"/><path d="M33.5,23.1l-7.7,7.4c-.7.7-1.9.2-1.9-.8v-4.2h-6.2c-.6,0-1.1-.5-1.1-1.1v-4.2c0-.6.5-1.1,1.1-1.1h6.2v-4.2c0-.9,1.2-1.4,1.9-.8l7.7,7.4c.4.4.4,1.1,0,1.5ZM19.6,30.3v-1.8c0-.3-.2-.5-.5-.5h-3.8c-.8,0-1.5-.6-1.5-1.4v-8.5c0-.8.7-1.4,1.5-1.4h3.8c.3,0,.5-.2.5-.5v-1.8c0-.3-.2-.5-.5-.5h-3.8c-2.4,0-4.4,1.9-4.4,4.2v8.5c0,2.3,2,4.2,4.4,4.2h3.8c.3,0,.5-.2.5-.5Z" fill="#282f38"/></svg>
</span>
</span>
<span class="navbar__item-label" itemprop="name">Sign out</span>
</a>
</li>
</ul>
</div>
<svg class="icon icon--marker-navbar" xmlns="http://www.w3.org/2000/svg" width="32" height="15" viewBox="0 0 32 15" fill="none">
<path d="M13.8787 1.12132L0 15H32L18.1213 1.12132C16.9497 -0.0502526 15.0503 -0.050255 13.8787 1.12132Z" fill="white"/>
</svg>
</nav>
</div>
</nav>
</div> <div class="content-group anim-show-parent"> <main id="site-main"> <nav class="site-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/blog" aria-current="false"> <span>Blog</span> </a> </li> <li> <a href="/blog/verifying-and-troubleshooting-kubernetes-deployments" aria-current="page"> <span>It works on my cluster: a tale of two troubleshooters</span> </a> </li> </ol> </nav> <article itemscope itemtype="https://schema.org/Article"> <header class="header__wrapper"> <figure class="image" data-image> <img src="/blog/i/x/cover/blogimage-kubernetes-generic-1-2023.png" srcset="/blog/i/600/cover/blogimage-kubernetes-generic-1-2023.webp 600w, /blog/i/1000/cover/blogimage-kubernetes-generic-1-2023.webp 1000w, /blog/i/2000/cover/blogimage-kubernetes-generic-1-2023.webp 1500w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" alt="Kubernetes inside magnifying glass on computer screen with stars surrounding it" class="image__img" width="1500" height="800" loading="eager" fetchpriority="high" decoding="sync"> </figure> <div class="header"> <h1 class="header__title">It works on my cluster: a tale of two troubleshooters</h1> </div> </header> <div class="page-content anim-show-parent" itemprop="articleBody"> <div class="author"> <a href="/blog/authors/liam-mackie/1/" class="author__image-link"> <img class="author__image" srcset="/blog/i/600/authors/liam-mackie.webp 512w" sizes="170px" src="/blog/i/x/authors/liam-mackie.png" alt="Liam Mackie" width="512" height="512"> </a> <div class="author__info"> <span class="author__name"> <a href="/blog/authors/liam-mackie/1/"> <span> Liam Mackie </span> </a> </span> <time class="author__time" datetime="Tue Dec 09 2025 00:00:00 GMT+0000 (Coordinated Universal Time)"> December 9, 2025 </time> </div> </div> <p>Kubernetes has a gift for making simple problems look complicated, and complicated problems look simple. When something breaks, you often see symptoms completely unrelated to the real cause of the problem. This leads to a problem I like to call “blaming the network team”, where problems end up being diagnosed by the wrong engineers for a given issue.</p>
<p>This is a real problem in the industry - not only for large enterprises, but also for smaller organizations that are transitioning from “<a href="https://youtu.be/E1kJhrTMHIY?si=8HpxwHmrVQWKVESW">Steve-based deployments</a>”, where teams are learning to work separately yet still together.</p>
<p>I’ve personally experienced this dichotomy during my time as an engineer, working on both software and infrastructure, so I’m going to tell a story from two perspectives: the infrastructure engineer who initially looked at an issue, and the software engineer who was able to help solve the problem. It’s based on a real-world issue I experienced at a previous company I worked at, though I had much less fun solving it in real-time than writing this blog post.</p>
<p>I’ll discuss the tools used, the rabbit holes I dove into, and how I (eventually) learnt from our mistakes. Ultimately, discussing this will help others learn from my mistakes and enable teams to work together more effectively.</p>
<h2 id="the-backstory">The backstory</h2>
<p>The application that started it all is a GraphQL “gateway”. Written in Node.js, its job is to receive requests from clients, then connect to various backend services to retrieve data, stitch it together, and send it back. To say it’s in the critical path is an understatement - if it’s unhappy, so are customers.</p>
<p>One Thursday morning, it became <em>very</em> unhappy.</p>
<p>We started to receive reports from customers about timeouts and error messages. Our support team had a look at the issues they were seeing and immediately escalated to the infrastructure team - they were seeing strange errors:</p>
<pre class="astro-code light-plus" style="background-color:#FFFFFF;color:#000000; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>Error: getaddrinfo EAI_AGAIN accounts.production.svc.cluster.local</span></span></code></pre>
<p>The support team saw <code>getaddrinfo</code>, googled the problem, and quickly decided it was a DNS problem - time to page the infrastructure engineer!</p>
<h2 id="part-1-the-infrastructure-investigation">Part 1: The Infrastructure Investigation</h2>
<p>When you’re the infrastructure engineer and DNS errors appear, you need to move quickly. DNS is fundamental, especially in Kubernetes, where it’s often used in lieu of service discovery.</p>
<h3 id="starting-with-what-you-know">Starting With What You Know</h3>
<p>First things first: are the CoreDNS pods actually running?</p>
<pre class="astro-code light-plus" style="background-color:#FFFFFF;color:#000000; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#795E26">❯</span><span style="color:#A31515"> kubectl</span><span style="color:#A31515"> get</span><span style="color:#A31515"> pods</span><span style="color:#0000FF"> -n</span><span style="color:#A31515"> kube-system</span><span style="color:#0000FF"> -l</span><span style="color:#A31515"> k8s-app=kube-dns</span></span>
<span class="line"></span>
<span class="line"><span style="color:#795E26">NAME</span><span style="color:#A31515"> READY</span><span style="color:#A31515"> STATUS</span><span style="color:#A31515"> RESTARTS</span><span style="color:#A31515"> AGE</span></span>
<span class="line"><span style="color:#795E26">coredns-7c65d6cfc9-grq72</span><span style="color:#A31515"> 1/1</span><span style="color:#A31515"> Running</span><span style="color:#098658"> 0</span><span style="color:#A31515"> 2d20h</span></span>
<span class="line"><span style="color:#795E26">coredns-7c65d6cfc9-z5svs</span><span style="color:#A31515"> 1/1</span><span style="color:#A31515"> Running</span><span style="color:#098658"> 0</span><span style="color:#A31515"> 2d20h</span></span></code></pre>
<p>All pods are running, with no restarts or changes since the issue started. Sweet - let’s check the logs.</p>
<pre class="astro-code light-plus" style="background-color:#FFFFFF;color:#000000; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#795E26">❯</span><span style="color:#A31515"> kubectl</span><span style="color:#A31515"> logs</span><span style="color:#0000FF"> -n</span><span style="color:#A31515"> kube-system</span><span style="color:#0000FF"> -l</span><span style="color:#A31515"> k8s-app=kube-dns</span><span style="color:#0000FF"> --tail=100</span></span>
<span class="line"></span>
<span class="line"><span style="color:#795E26">.</span><span style="color:#A31515">:53</span></span>
<span class="line"><span style="color:#000000">[INFO] plugin/reload: Running configuration SHA512 = 591cf328cccc12bc490481273e738df59329c62c0b729d94e8b61db9961c2fa5f046dd37f1cf888b953814040d180f52594972691cd6ff41be96639138a43908</span></span>
<span class="line"><span style="color:#795E26">CoreDNS-1.11.3</span></span>
<span class="line"><span style="color:#795E26">linux/arm64,</span><span style="color:#A31515"> go1.21.11,</span><span style="color:#A31515"> a6338e9</span></span>
<span class="line"><span style="color:#795E26">.</span><span style="color:#A31515">:53</span></span>
<span class="line"><span style="color:#000000">[INFO] plugin/reload: Running configuration SHA512 = 591cf328cccc12bc490481273e738df59329c62c0b729d94e8b61db9961c2fa5f046dd37f1cf888b953814040d180f52594972691cd6ff41be96639138a43908</span></span>
<span class="line"><span style="color:#795E26">CoreDNS-1.11.3</span></span>
<span class="line"><span style="color:#795E26">linux/arm64,</span><span style="color:#A31515"> go1.21.11,</span><span style="color:#A31515"> a6338e9</span></span></code></pre>
<p>The logs are empty, but at least there’s no errors!</p>
<h3 id="expanding-the-search">Expanding the Search</h3>
<p>If CoreDNS is healthy, it could be a general networking issue. We should quickly test from a fresh pod:</p>
<pre class="astro-code light-plus" style="background-color:#FFFFFF;color:#000000; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#795E26">❯</span><span style="color:#A31515"> kubectl</span><span style="color:#A31515"> run</span><span style="color:#A31515"> debug-dns</span><span style="color:#0000FF"> --rm</span><span style="color:#0000FF"> -it</span><span style="color:#0000FF"> --image=busybox</span><span style="color:#0000FF"> --restart=Never</span><span style="color:#0000FF"> --</span><span style="color:#A31515"> nslookup</span><span style="color:#A31515"> accounts.production.svc.cluster.local</span></span>
<span class="line"></span>
<span class="line"><span style="color:#795E26">Server:</span><span style="color:#098658"> 10.96.0.10</span></span>
<span class="line"><span style="color:#795E26">Address:</span><span style="color:#A31515"> 10.96.0.10:53</span></span>
<span class="line"></span>
<span class="line"><span style="color:#795E26">Name:</span><span style="color:#A31515"> accounts.production.svc.cluster.local</span></span>
<span class="line"><span style="color:#795E26">Address:</span><span style="color:#098658"> 10.96.80.99</span></span>
<span class="line"></span>
<span class="line"><span style="color:#795E26">pod</span><span style="color:#A31515"> "debug-dns"</span><span style="color:#A31515"> deleted</span><span style="color:#A31515"> from</span><span style="color:#A31515"> production</span><span style="color:#A31515"> namespace</span></span></code></pre>
<p>It works! DNS resolution is working, at least from a debug pod, but the error we’re seeing is definitely pointing to DNS timeouts.</p>
<h3 id="checking-the-metrics">Checking the Metrics</h3>
<p>Perhaps it’s a capacity issue that only becomes apparent under load. Let’s look at the CoreDNS metrics:</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/grafana.png" alt="Image of grafana, showing CoreDNS metrics that are normal" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/grafana.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/grafana.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/grafana.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="3670" height="1580"></p>
<p>Everything seems normal, but just in case, let’s try scaling the coreDNS deployment:</p>
<pre class="astro-code light-plus" style="background-color:#FFFFFF;color:#000000; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#795E26">❯</span><span style="color:#A31515"> kubectl</span><span style="color:#0000FF"> -n</span><span style="color:#A31515"> kube-system</span><span style="color:#A31515"> scale</span><span style="color:#A31515"> deployment</span><span style="color:#A31515"> coredns</span><span style="color:#0000FF"> --replicas</span><span style="color:#098658"> 3</span></span>
<span class="line"></span>
<span class="line"><span style="color:#795E26">deployment.apps/coredns</span><span style="color:#A31515"> scaled</span></span>
<span class="line"></span></code></pre>
<p>After a few minutes, nothing has changed!</p>
<h3 id="lets-try-with-load">Let’s try with load</h3>
<p>Everything indicates that DNS working fine, but the gateway is still failing. It could be due to the load on the DNS servers. To test the hypothesis, we load test the DNS servers:</p>
<pre class="astro-code light-plus" style="background-color:#FFFFFF;color:#000000; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#795E26">kubectl</span><span style="color:#A31515"> run</span><span style="color:#A31515"> debug-dns</span><span style="color:#0000FF"> --rm</span><span style="color:#0000FF"> -it</span><span style="color:#0000FF"> --image=busybox</span><span style="color:#0000FF"> --restart=Never</span><span style="color:#0000FF"> --</span><span style="color:#A31515"> sh</span><span style="color:#0000FF"> -c</span><span style="color:#A31515"> 'while true; do nslookup accounts.production.svc.cluster.local > /dev/null || (echo "failed" &#x26;&#x26; break); done'</span></span></code></pre>
<p>This pod simply ran <code>nslookup</code> until DNS failed, except it didn’t fail.</p>
<h3 id="the-dead-end">The Dead End</h3>
<p>At this point, we’ve spent the entire morning verifying that the DNS infrastructure is completely healthy. CoreDNS was working, the network was working, and other pods were resolving DNS without any issues. However, the gateway continued to throw <code>EAI_AGAIN</code> errors.</p>
<p>The error message said DNS was broken. Every check said DNS was fine. At this point, we’re certain that something has changed in the software itself; it’s time to throw this issue over the wall to the software team responsible for the gateway.</p>
<h2 id="part-2-the-developer-investigation">Part 2: The Developer Investigation</h2>
<p>Getting a visit from the infrastructure guy is rarely good news. “DNS is broken for your app, but I’ve investigated DNS, and it’s working fine!” is <em>particularly</em> bad news, though.</p>
<h3 id="checking-the-deployment-history">Checking the deployment history</h3>
<p>Since DNS is working fine for everything else in the cluster, something must have changed to trigger this issue - perhaps there was a recent deployment? We’ll check in Octopus Deploy to see whether there’s been any changes:</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.png" alt="A screenshot of Octopus Deploy, showing the deployment history" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="3168" height="848"></p>
<p>It looks like yesterday, your recent change made it through to production:</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/deployment-timeline.png" alt="A screenshot of Octopus Deploy, showing the deployment timeline for production" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/deployment-timeline.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/deployment-timeline.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/deployment-timeline.webp 1440w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="1440" height="728"></p>
<p>You’re familiar with this change - it’s a small performance optimization that adds a local cache. Instead of fetching and parsing schemas from backend services on every request, the gateway cached it to disk to look up when a request comes through. This shouldn’t impact DNS at all! Let’s verify the manifest that was deployed:</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/kos-diff.png" alt="Diff view, showing only changes to the image for the deployment" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/kos-diff.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/kos-diff.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/kos-diff.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="2690" height="1782"></p>
<p>It’s only an image change - is it in sync in the cluster?</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/live-status-overview.png" alt="Live status view, showing in-sync resources" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/live-status-overview.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/live-status-overview.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/live-status-overview.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="2686" height="1230"></p>
<p>The resources all seem to be in sync, so they’re definitely unchanged.</p>
<h3 id="looking-for-patterns">Looking for patterns</h3>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/live-status-logs.png" alt="Live status, showing logs from the problematic pod" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/live-status-logs.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/live-status-logs.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/live-status-logs.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="2416" height="2356">.</p>
<p>You can see the error logs with DNS issues in production, but when you examine your dev and test environments, none of them are showing the issue. In addition, you only see the DNS errors when there are lots of requests coming in at once. Maybe <em>that’s</em> why the issue isn’t showing up in the test environment!</p>
<h3 id="replication">Replication</h3>
<p>To try and replicate the load of the production environment in the test environment, you boot up <a href="https://github.com/grafana/k6">k6</a> and start generating GraphQL requests. As the load goes up, you wait to see DNS errors, but … nothing! All that happens is that the service slows down slightly, even at over 10 times the load that production is experiencing.</p>
<p>You’ve spent most of the afternoon trying to replicate the issue in the test environment, and still, nothing - it’s looking like we might need to start the complicated rollback process before the end of the day.</p>
<h2 id="part-3-bridging-the-gap">Part 3: Bridging the Gap</h2>
<p>Before finishing up for the day, everyone catches up and discusses next steps. They go over the facts first:</p>
<ul>
<li>The errors received are definitely related to DNS</li>
<li>No other pods are receiving DNS failures</li>
<li>There doesn’t seem to be networking issues</li>
<li>The DNS servers don’t seem to be having issues</li>
<li>The DNS failures seem to start when there’s lots of load</li>
<li>The same build of the software in test doesn’t have the problem, even when load tested</li>
<li>The only change made was to add caching</li>
</ul>
<p>This leads the infrastructure engineer down the path of the differences between environments:</p>
<ul>
<li>In test, there’s only 1 replica</li>
<li>In production, there’s 3 replicas</li>
<li>In test, the single replica uses an SSD volume</li>
<li>In production, the replicas use a shared disk</li>
</ul>
<p>Maybe this is somehow related to the shared disk?</p>
<h3 id="following-the-thread">Following the Thread</h3>
<p>A search for <code>DNS errors Node.js Kubernetes file locks</code> turned up a <a href="https://medium.com/@amirilovic/how-to-fix-node-dns-issues-5d4ec2e12e95">Medium article</a>, along with a suggestion to bump the <code>UV_THREADPOOL_SIZE</code> to help fix DNS resolution problems. After more research, it turns out that when a file is locked and you attempt to read it (even asynchronously), one of 4 threads (by default) will be taken up, waiting for the file call to be returned. One other job of these threads is <em>DNS resolution</em>!</p>
<p>The developer quickly made a change to move the cache to memory and re-hydrate on launch. The infrastructure engineer made a change to the <code>UV_THREADPOOL_SIZE</code> environment variable to help resolve the issue while the fix rolled out, and the problem began to ease immediately.</p>
<h3 id="the-post-mortem">The post-mortem</h3>
<p>During the incident post-mortem, we ended up writing up what went wrong:</p>
<ol>
<li>Schema cache writes files to a shared volume on one pod</li>
<li>Schema is attempted to be read/written by another pod</li>
<li>Under high traffic, these operations deadlock</li>
<li>The cache operations saturate the threadpool while waiting on locks</li>
<li><code>dns.lookup()</code> calls queue up waiting for a free thread</li>
<li>Queued DNS lookups eventually timeout</li>
<li>Application logs: <code>EAI_AGAIN</code></li>
</ol>
<p>In the end, even though the error was related to DNS, the actual problem was filesystem contention that <em>only</em> occurred when running in environments with multiple replicas.</p>
<h2 id="part-4-looking-to-the-future">Part 4: Looking to the future</h2>
<p>Though finding this bug was painful for me at the time, it helped me to bring a new approach to troubleshooting failures, especially around distributed systems like Kubernetes with multiple layers of abstraction.</p>
<h3 id="involve-developers-early">Involve developers early</h3>
<p>Developers have the most context around what’s going on in their app - if something is going on, they’ll know the changes and usage patterns much more intimately than infrastructure teams. Ensure that developers have the necessary access to independently investigate.</p>
<h3 id="make-sure-deployment-history-is-visible">Make sure deployment history is visible</h3>
<p>When something breaks, “What changed?” should be the first question. Making it easy for both infrastructure and software teams to see the deployment history to environments is one of the best things you can do.</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.png" alt="A list of deployments to separate environments" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/deployment-environments.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="3168" height="848"></p>
<h3 id="document-dependencies">Document dependencies</h3>
<p>Software tends to have the most problems in the seam between software and hardware - IO. When using networking, storage, or other IO, it’s worth documenting why and how you’re doing so. It helps infrastructure teams understand requirements, especially in distributed systems.</p>
<h3 id="automate-rollbacks">Automate rollbacks</h3>
<p>A significant reason this bug affected people longer than we had hoped was due to the complicated and involved rollback process. One of the first things we did afterwards was create a runbook to automate the process of rolling back, so that we could mitigate the problem faster and buy time to investigate issues.</p>
<p><img src="/blog/i/x/verifying-and-troubleshooting-kubernetes-deployments/rollback-runbook.png" alt="A runbook for automating the runbook procedure" loading="lazy" srcset="/blog/i/600/verifying-and-troubleshooting-kubernetes-deployments/rollback-runbook.webp 600w, /blog/i/1000/verifying-and-troubleshooting-kubernetes-deployments/rollback-runbook.webp 1000w, /blog/i/2000/verifying-and-troubleshooting-kubernetes-deployments/rollback-runbook.webp 2000w" sizes="(min-width: 1680px) 1000px, (min-width: 940px) calc(71.81vw - 192px), calc(100vw - 32px)" class="resp-img" width="3162" height="1854"></p>
<h2 id="conclusion">Conclusion</h2>
<p>When you’re troubleshooting in Kubernetes, you’re troubleshooting a system that spans multiple layers of abstraction, multiple teams, and multiple mental models. No matter what tools or processes you use, when you’re trying to solve a problem, allowing as many people as possible to contribute their understanding of the systems involved is the most important thing to do.</p>
<p>The next time you’re debugging an incident and discover DNS caused it, I hope you’ll remember this story about one of the rare instances when it wasn’t. Remember the lessons we learnt, so if the next issue isn’t DNS, you’ll be able to dig deeper and solve the problem with way less stress than we did.</p> <!-- <Feedback
frontmatter={frontmatter}
headings={headings}
lang={lang}
/> --> <div class="post-taxonomy"> <div class="post-tag"> <h2>Tags: </h2> <ul itemprop="keywords"> <li> <a href="/blog/tag/engineering/1/">Engineering</a> </li><li> <a href="/blog/tag/kubernetes/1/">Kubernetes</a> </li> </ul> </div> </div> <div class="author"> <a href="/blog/authors/liam-mackie/1/" class="author__image-link"> <img class="author__image" srcset="/blog/i/600/authors/liam-mackie.webp 512w" sizes="170px" src="/blog/i/x/authors/liam-mackie.png" alt="Liam Mackie" width="512" height="512"> </a> <div class="author__info"> <span class="author__name" itemprop="author" itemscope itemtype="https://schema.org/Person"> <a href="/blog/authors/liam-mackie/1/" itemprop="url"> <span itemprop="name"> Liam Mackie </span> </a> </span> <time class="author__time" datetime="Tue Dec 09 2025 00:00:00 GMT+0000 (Coordinated Universal Time)" itemprop="datePublished"> Published: December 9, 2025 </time> </div> </div> </div> <h3>Related posts</h3> <div class="simple-grid-3"> <article class="card card--padded"> <a href="/blog/slack-integration" class="card__link" role="link" aria-label="Open Act faster with our new Slack integration"> <div class="card__image-wrapper"> <img srcset="/blog/i/600/cover/slack-integration.webp 600w, /blog/i/1000/cover/slack-integration.webp 1000w, /blog/i/2000/cover/slack-integration.webp 2000w" sizes="254px" src="/blog/i/x/cover/slack-integration.png" width="3000" height="1600" alt="Slack and Octopus logos with a connection between them" class="card__image" onerror="this.src='https://i.octopus.com/library/step-templates/other.png';" loading="lazy"> </div> <div class="card__copy"> <p class="card__title">Act faster with our new Slack integration</p> <p class="card__description">Octopus now posts to Slack. Send scoped event notifications to the channels your teams already watch, or fire a message from any point in a deployment process.</p> <div class="card__meta"> <div class="card__authors"> <div class="author"> <img class="author__image" srcset="/blog/i/600/authors/michelle-obrien.webp 140w" sizes="170px" src="/blog/i/x/authors/michelle-obrien.png" alt="Michelle O'Brien" width="140" height="140"> <div class="author__info"> <span class="author__name"> <span> Michelle O&#39;Brien </span> </span> <time class="author__time" datetime="2026-08-13"> August 13, 2026 </time> </div> </div> </div> </div> </div> </a> </article><article class="card card--padded"> <a href="/blog/octopus-cloud-connection-agent" class="card__link" role="link" aria-label="Open Connecting Octopus Cloud to your internal systems — without opening a single port"> <div class="card__image-wrapper"> <img srcset="/blog/i/600/cover/img-blog-connector-agent-2026-1500x800.webp 600w, /blog/i/1000/cover/img-blog-connector-agent-2026-1500x800.webp 1000w, /blog/i/2000/cover/img-blog-connector-agent-2026-1500x800.webp 1500w" sizes="254px" src="/blog/i/x/cover/img-blog-connector-agent-2026-1500x800.png" width="1500" height="800" alt="Connecting Octopus Cloud to your internal systems" class="card__image" onerror="this.src='https://i.octopus.com/library/step-templates/other.png';" loading="lazy"> </div> <div class="card__copy"> <p class="card__title">Connecting Octopus Cloud to your internal systems — without opening a single port</p> <p class="card__description">The Octopus Connection Agent lets enterprises reach their on-premises tooling from Octopus Cloud securely, with no inbound firewall rules and no VPN.</p> <div class="card__meta"> <div class="card__authors"> <div class="author"> <img class="author__image" srcset="/blog/i/600/authors/mark-lamprecht.webp 200w" sizes="170px" src="/blog/i/x/authors/mark-lamprecht.png" alt="Mark Lamprecht" width="200" height="210"> <div class="author__info"> <span class="author__name"> <span> Mark Lamprecht </span> </span> <time class="author__time" datetime="2026-08-03"> August 3, 2026 </time> </div> </div> </div> </div> </div> </a> </article><article class="card card--padded"> <a href="/blog/tag-sets-new-functionality" class="card__link" role="link" aria-label="Open Target tags are now managed with tag sets"> <div class="card__image-wrapper"> <img srcset="/blog/i/600/tag-sets-new-functionality/blog-deploy-to-targets-by-tag.webp 600w, /blog/i/1000/tag-sets-new-functionality/blog-deploy-to-targets-by-tag.webp 1000w, /blog/i/2000/tag-sets-new-functionality/blog-deploy-to-targets-by-tag.webp 1500w" sizes="254px" src="/blog/i/x/tag-sets-new-functionality/blog-deploy-to-targets-by-tag.png" width="1500" height="800" alt="Cartoon instance of Octopus Deploy showing how to deploy to target tags." class="card__image" onerror="this.src='https://i.octopus.com/library/step-templates/other.png';" loading="lazy"> </div> <div class="card__copy"> <p class="card__title">Target tags are now managed with tag sets</p> <p class="card__description">More control over your target tags and how you can use them at deployment time.</p> <div class="card__meta"> <div class="card__authors"> <div class="author"> <img class="author__image" srcset="/blog/i/600/authors/michelle-obrien.webp 140w" sizes="170px" src="/blog/i/x/authors/michelle-obrien.png" alt="Michelle O'Brien" width="140" height="140"> <div class="author__info"> <span class="author__name"> <span> Michelle O&#39;Brien </span> </span> <time class="author__time" datetime="2026-07-07"> July 7, 2026 </time> </div> </div> </div> </div> </div> </a> </article> </div> <div class="newsletter"> <h2>Newsletter</h2> <p>
Join ~80,000 DevOps professionals and sign up for the latest Octopus news,
events, and opinions. No spam. Unsubscribe at any time.
</p> <form id="mktoForm_1062" class="newsletter__form"></form> <script>(function(){const formId = 1062;
const dreamdataTrackingId = undefined;
(() => {
const formEl = document.getElementById(`mktoForm_${formId}`);
if (!formEl) {
return;
}
// Load the 134 KB Marketo library once per page, shared across every form
const loadMarketo = () => {
if (!window.__marketoLoader) {
window.__marketoLoader = new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = 'https://get.octopus.com/js/forms2/js/forms2.min.js';
script.onload = resolve;
script.onerror = () => reject(new Error('Failed to load MktoForms2'));
document.head.appendChild(script);
});
}
return window.__marketoLoader;
};
const initForm = async () => {
try {
await loadMarketo();
} catch (error) {
console.error(error);
// Drop the cached rejected promise so a later form instance can retry
window.__marketoLoader = undefined;
// Collapse any space reserved for this form so a blocked or failed
// load does not leave an empty box (no-op when there is no wrapper)
formEl.closest('.newsletter')?.style.setProperty('display', 'none');
return;
}
// @ts-ignore - no global type for MktoForms2
if (typeof MktoForms2 === 'undefined' || !MktoForms2.loadForm) {
console.error('MktoForms2 is not available after loading.');
return;
}
// @ts-ignore
MktoForms2.loadForm(
'//get.octopus.com',
'271-BEX-827',
formId,
(form) => {
const formElem = form.getFormElem()[0];
if (!(formElem instanceof HTMLElement)) {
console.error(
'Expected a DOM element but got something else',
formElem
);
return;
}
formElem.querySelectorAll('style').forEach((style) => style.remove());
const baseStyle = document.getElementById('mktoForms2BaseStyle');
if (baseStyle) {
baseStyle.remove();
}
formElem.removeAttribute('style');
formElem
.querySelectorAll('.mktoTextField')
.forEach((el) => el.classList.add('form-control'));
formElem
.querySelectorAll('.mktoEmailField')
.forEach((el) => el.classList.add('form-control'));
formElem
.querySelectorAll('.mktoButton')
.forEach((el) => el.classList.add('button', 'button--primary'));
formElem
.querySelectorAll('.mktoAsterix')
.forEach((el) => el.remove());
formElem.querySelectorAll('.mktoOffset').forEach((el) => el.remove());
formElem
.querySelectorAll('.mktoFormCol, .mktoField, .mktoLabel')
.forEach((el) => el.removeAttribute('style'));
// Add Dreamdata tracking if configured
if (dreamdataTrackingId) {
form.onSuccess(function (values, followUpUrl) {
const email = values.Email || values.email;
if (typeof dreamdata !== 'undefined') {
try {
dreamdata.track(dreamdataTrackingId);
if (email) {
dreamdata.identify(null, { email: email });
}
} catch (error) {
console.warn('Dreamdata tracking failed:', error);
}
} else {
console.warn(
'Dreamdata not available for tracking:',
dreamdataTrackingId
);
}
if (followUpUrl) {
location.href = followUpUrl;
}
return followUpUrl ? false : true;
});
}
}
);
};
// The form is below the fold, so defer the library until the reader
// scrolls near it - keeps 134 KB off the critical path on every page.
// 600px of rootMargin starts the download early enough that the form is
// usually ready when it enters the viewport.
if ('IntersectionObserver' in window) {
const observer = new IntersectionObserver(
(entries) => {
if (entries.some((entry) => entry.isIntersecting)) {
observer.disconnect();
initForm();
}
},
{ rootMargin: '600px' }
);
observer.observe(formEl);
} else {
initForm();
}
})();
})();</script> </div> <meta itemprop="image" content="/blog/i/x/cover/blogimage-kubernetes-generic-1-2023.png"> </article> </main> <nav class="site-nav" id="site-nav" aria-label="Site"> <div class="theme-switcher" data-theme-toggle> <input id="theme-switcher" type="checkbox" aria-checked="false" role="switch" aria-label="Toggle theme between light and dark mode" tabindex="-1" data-theme-toggle-checkbox> <label for="theme-switcher" class="theme-switcher__label" tabindex="0"> <span class="theme-switcher__icon theme-switcher__icon--light" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M12 2.40002C11.475 2.40002 11.1 2.81252 11.1 3.30002V5.70002C11.1 6.22502 11.475 6.60002 12 6.60002C12.4875 6.60002 12.9 6.22502 12.9 5.70002V3.30002C12.9 2.81252 12.4875 2.40002 12 2.40002ZM12 17.4C11.475 17.4 11.1 17.8125 11.1 18.3V20.7C11.1 21.225 11.475 21.6 12 21.6C12.4875 21.6 12.9 21.225 12.9 20.7V18.3C12.9 17.8125 12.4875 17.4 12 17.4ZM20.7 12.9C21.1875 12.9 21.6 12.525 21.6 12C21.6 11.5125 21.1875 11.1 20.7 11.1H18.3C17.775 11.1 17.4 11.5125 17.4 12C17.4 12.525 17.775 12.9 18.3 12.9H20.7ZM6.60002 12C6.60002 11.5125 6.18752 11.1 5.70002 11.1H3.30002C2.77502 11.1 2.40002 11.5125 2.40002 12C2.40002 12.525 2.77502 12.9 3.30002 12.9H5.70002C6.18752 12.9 6.60002 12.525 6.60002 12ZM18.7875 6.48752C19.125 6.15002 19.125 5.58752 18.7875 5.21252C18.4125 4.87502 17.85 4.87502 17.5125 5.21252L15.7875 6.93752C15.45 7.27502 15.45 7.83752 15.7875 8.21252C16.1625 8.55002 16.725 8.55002 17.0625 8.21252L18.7875 6.48752ZM8.17502 15.825C7.80002 15.4875 7.23752 15.4875 6.90002 15.825L5.21252 17.55C4.83752 17.8875 4.83752 18.45 5.21252 18.7875C5.55002 19.1625 6.11252 19.1625 6.45002 18.7875L8.17502 17.1C8.51252 16.7625 8.51252 16.2 8.17502 15.825ZM17.5125 18.7875C17.85 19.1625 18.4125 19.1625 18.7875 18.7875C19.125 18.45 19.125 17.8875 18.7875 17.55L17.0625 15.825C16.725 15.4875 16.1625 15.4875 15.7875 15.825C15.45 16.2 15.45 16.7625 15.7875 17.1L17.5125 18.7875ZM8.17502 8.21252C8.51252 7.83752 8.51252 7.27502 8.17502 6.93752L6.45002 5.21252C6.11252 4.87502 5.55002 4.87502 5.21252 5.21252C4.83752 5.58752 4.83752 6.15002 5.21252 6.48752L6.90002 8.21252C7.23752 8.55002 7.80002 8.55002 8.17502 8.21252ZM12 16.2C14.2875 16.2 16.2 14.325 16.2 12C16.2 9.71252 14.2875 7.80002 12 7.80002C9.67502 7.80002 7.80002 9.71252 7.80002 12C7.80002 14.325 9.67502 16.2 12 16.2Z" fill="white"></path> </svg>
Light
</span> <span class="switch-slider"></span> <span class="theme-switcher__icon theme-switcher__icon--dark" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path d="M13.1625 3.59998C8.55005 3.59998 4.80005 7.38748 4.80005 12C4.80005 16.65 8.55005 20.4 13.1625 20.4C15.45 20.4 17.5125 19.5 19.0125 18.0375C19.2 17.85 19.2375 17.5875 19.125 17.325C19.0125 17.1 18.75 16.9875 18.4875 17.025C18.1125 17.1 17.7375 17.1 17.3625 17.1C13.725 17.1 10.7625 14.175 10.7625 10.5C10.7625 8.06248 12.1125 5.88748 14.1375 4.76248C14.3625 4.64998 14.475 4.38748 14.4 4.12498C14.3625 3.86248 14.1375 3.67498 13.875 3.63748C13.65 3.63748 13.3875 3.63748 13.1625 3.63748V3.59998Z" fill="white"></path> </svg>
Dark
</span> </label> </div> <h2 class="site-nav-title">Navigation</h2> <ul class="site-nav__list"> <li class="site-nav__list-item"> <a href="/blog" aria-current="false"> Blog home </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/product/1" aria-current="false"> Product </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/engineering/1" aria-current="false"> Engineering </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/devops/1" aria-current="false"> DevOps </a> </li> <li class="site-nav__list-item"> <a href="/blog/tag/company/1" aria-current="false"> Company </a> </li> <li class="site-nav__list-item"> <a href="/blog/search" aria-current="false"> Search </a> </li> </ul> </nav> <script type="module">
import { ThemeSwitcher } from '/blog/js/modules/theme-switcher.js';
document.addEventListener('DOMContentLoaded', function () {
const themeSwitchers = document.querySelectorAll('[data-theme-toggle]');
themeSwitchers.forEach((switcher) => new ThemeSwitcher(switcher));
});
</script> <div class="side-nav"> <nav class="article-nav" data-article-nav aria-label="Table of contents"> <details class="article-nav__details" open> <summary class="article-nav__title"> On this page </summary> <hr class="separator"> <ol class="article-nav__list"> <li class="article-nav__item article-nav__item--level-2"> <a href="#the-backstory" class="article-nav__link" data-article-link> The backstory </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#part-1-the-infrastructure-investigation" class="article-nav__link" data-article-link> Part 1: The Infrastructure Investigation </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#starting-with-what-you-know" class="article-nav__link" data-article-link> Starting With What You Know </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#expanding-the-search" class="article-nav__link" data-article-link> Expanding the Search </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#checking-the-metrics" class="article-nav__link" data-article-link> Checking the Metrics </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#lets-try-with-load" class="article-nav__link" data-article-link> Let’s try with load </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#the-dead-end" class="article-nav__link" data-article-link> The Dead End </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#part-2-the-developer-investigation" class="article-nav__link" data-article-link> Part 2: The Developer Investigation </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#checking-the-deployment-history" class="article-nav__link" data-article-link> Checking the deployment history </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#looking-for-patterns" class="article-nav__link" data-article-link> Looking for patterns </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#replication" class="article-nav__link" data-article-link> Replication </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#part-3-bridging-the-gap" class="article-nav__link" data-article-link> Part 3: Bridging the Gap </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#following-the-thread" class="article-nav__link" data-article-link> Following the Thread </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#the-post-mortem" class="article-nav__link" data-article-link> The post-mortem </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#part-4-looking-to-the-future" class="article-nav__link" data-article-link> Part 4: Looking to the future </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#involve-developers-early" class="article-nav__link" data-article-link> Involve developers early </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#make-sure-deployment-history-is-visible" class="article-nav__link" data-article-link> Make sure deployment history is visible </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#document-dependencies" class="article-nav__link" data-article-link> Document dependencies </a> </li><li class="article-nav__item article-nav__item--level-3"> <a href="#automate-rollbacks" class="article-nav__link" data-article-link> Automate rollbacks </a> </li><li class="article-nav__item article-nav__item--level-2"> <a href="#conclusion" class="article-nav__link" data-article-link> Conclusion </a> </li> </ol> </details> </nav> <script type="module">document.addEventListener(`DOMContentLoaded`,function(){let e=document.querySelector(`.article-nav__details`),t=()=>{e&&(window.innerWidth>=1130?e.setAttribute(`open`,``):e.removeAttribute(`open`))};t(),window.addEventListener(`resize`,t)});</script> </div> </div> <div data-shared-source="live" data-shared-fragment="footer" data-shared-note="fetched https://octopus.com/fragments/footer at 2026-09-11T10:55:57.544Z">
<footer class="footer footer-pu" itemscope itemtype="https://schema.org/WPFooter">
<div class="footer__content container">
<section class="footer__row footer__row--first" aria-label="Product and resource links">
<div class="footer__column">
<h3 class="footer__column-title" id="footer-first-platform" itemprop="name">Platform</h3>
<ul class="footer__items" aria-labelledby="footer-first-platform">
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/"
aria-label="Continuous Delivery platform"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Continuous Delivery platform
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/use-case/platform-hub"
aria-label="Platform Hub"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Platform Hub
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/ai-tools"
aria-label="AI tools"
itemprop="url">
<span class="footer__item-label" itemprop="name">
AI tools
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/use-case/tenanted-deployments"
target="_blank"
rel="noopener noreferrer"
aria-label="Tenanted deployments (opens in new tab)"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Tenanted deployments
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
</ul>
</div>
<div class="footer__column">
<h3 class="footer__column-title" id="footer-first-resources" itemprop="name">Resources</h3>
<ul class="footer__items" aria-labelledby="footer-first-resources">
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/docs"
aria-label="Documentation"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Documentation
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/downloads"
aria-label="Download Octopus"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Download Octopus
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/publications"
aria-label="Publications"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Publications
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/blog"
aria-label="Blog"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Blog
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
</ul>
</div>
<div class="footer__column">
<h3 class="footer__column-title" id="footer-first-our-company" itemprop="name">Our company</h3>
<ul class="footer__items" aria-labelledby="footer-first-our-company">
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/company"
aria-label="About us"
itemprop="url">
<span class="footer__item-label" itemprop="name">
About us
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/company/careers"
aria-label="Careers"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Careers
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://roadmap.octopus.com/tabs/1-under-consideration"
rel="noopener noreferrer"
aria-label="Roadmap (opens in new tab)"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Roadmap
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://ir.octopus.com/"
rel="noopener noreferrer"
aria-label="Investor relations (opens in new tab)"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Investor relations
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/company/brand"
aria-label="Brand guidelines"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Brand guidelines
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
</ul>
</div>
<div class="footer__column">
<h3 class="footer__column-title" id="footer-first-help-and-support" itemprop="name">Help and support</h3>
<ul class="footer__items" aria-labelledby="footer-first-help-and-support">
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/company/contact"
aria-label="Contact Sales"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Contact Sales
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/support"
aria-label="Support"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Support
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/upgrade"
aria-label="Upgrade"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Upgrade
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/company/trust"
aria-label="Security and legal"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Security and legal
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://oc.to/CommunitySlack"
rel="noopener noreferrer"
aria-label="Community Slack (opens in new tab)"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Community Slack
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
</ul>
</div>
</section>
<section class="footer__row footer__row--second" aria-label="Community and partners">
<div class="footer__column">
<h3 class="footer__column-title" id="footer-second-our-awards" itemprop="name">Our awards</h3>
<ul class="footer__items" aria-labelledby="footer-second-our-awards">
<li class="footer__item">
<a class="footer__item-link"
href="https://www.g2.com/products/octopus-deploy/reviews"
target="_blank"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Award badge for &quot;Best Meets Requirements&quot; from G2, Summer 2026." loading="lazy" width="868" height="1000" srcset="https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/868x1000/ff9d5240db/continuousintegration_bestmeetsrequirements_meetsrequirements.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://www.gartner.com/reviews/market/devops-platforms/vendor/octopus-deploy-125263461/product/octopus-deploy"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Gartner badge - Users love us" loading="lazy" width="86" height="101" srcset="https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/86x101/dd0724c752/gartner-users-love-us-badge.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://www.g2.com/products/octopus-deploy/reviews"
target="_blank"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Badge displaying &quot;High Performer Enterprise&quot; for Summer 2026 with G2 logo." loading="lazy" width="868" height="1000" srcset="https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/868x1000/f647e2f3bc/configurationmanagement_highperformer_enterprise_highperformer.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
</ul>
</div>
<div class="footer__column">
<h3 class="footer__column-title" id="footer-second-sign-up-to-our-newsletter" itemprop="name">Sign up to our newsletter</h3>
<ul class="footer__items" aria-labelledby="footer-second-sign-up-to-our-newsletter">
<li class="footer__item footer__item--component">
<div class="mktoFormWrapper"> <form id="mktoForm_2139" class="newsletter__form"></form> <script>(function(){const formId = 2139;
const dreamdataTrackingId = "Newsletter Signup (Footer)";
(() => {
const formEl = document.getElementById(`mktoForm_${formId}`);
if (!formEl) {
return;
}
// Load the 134 KB Marketo library once per page, shared across every form
const loadMarketo = () => {
if (!window.__marketoLoader) {
window.__marketoLoader = new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = 'https://get.octopus.com/js/forms2/js/forms2.min.js';
script.onload = resolve;
script.onerror = () => reject(new Error('Failed to load MktoForms2'));
document.head.appendChild(script);
});
}
return window.__marketoLoader;
};
const initForm = async () => {
try {
await loadMarketo();
} catch (error) {
console.error(error);
// Drop the cached rejected promise so a later form instance can retry
window.__marketoLoader = undefined;
// Collapse any space reserved for this form so a blocked or failed
// load does not leave an empty box (no-op when there is no wrapper)
formEl.closest('.newsletter')?.style.setProperty('display', 'none');
return;
}
// @ts-ignore - no global type for MktoForms2
if (typeof MktoForms2 === 'undefined' || !MktoForms2.loadForm) {
console.error('MktoForms2 is not available after loading.');
return;
}
// @ts-ignore
MktoForms2.loadForm(
'//get.octopus.com',
'271-BEX-827',
formId,
(form) => {
const formElem = form.getFormElem()[0];
if (!(formElem instanceof HTMLElement)) {
console.error(
'Expected a DOM element but got something else',
formElem
);
return;
}
formElem.querySelectorAll('style').forEach((style) => style.remove());
const baseStyle = document.getElementById('mktoForms2BaseStyle');
if (baseStyle) {
baseStyle.remove();
}
formElem.removeAttribute('style');
formElem
.querySelectorAll('.mktoTextField')
.forEach((el) => el.classList.add('form-control'));
formElem
.querySelectorAll('.mktoEmailField')
.forEach((el) => el.classList.add('form-control'));
formElem
.querySelectorAll('.mktoButton')
.forEach((el) => el.classList.add('button', 'button--primary'));
formElem
.querySelectorAll('.mktoAsterix')
.forEach((el) => el.remove());
formElem.querySelectorAll('.mktoOffset').forEach((el) => el.remove());
formElem
.querySelectorAll('.mktoFormCol, .mktoField, .mktoLabel')
.forEach((el) => el.removeAttribute('style'));
// Add Dreamdata tracking if configured
if (dreamdataTrackingId) {
form.onSuccess(function (values, followUpUrl) {
const email = values.Email || values.email;
if (typeof dreamdata !== 'undefined') {
try {
dreamdata.track(dreamdataTrackingId);
if (email) {
dreamdata.identify(null, { email: email });
}
} catch (error) {
console.warn('Dreamdata tracking failed:', error);
}
} else {
console.warn(
'Dreamdata not available for tracking:',
dreamdataTrackingId
);
}
if (followUpUrl) {
location.href = followUpUrl;
}
return followUpUrl ? false : true;
});
}
}
);
};
// The form is below the fold, so defer the library until the reader
// scrolls near it - keeps 134 KB off the critical path on every page.
// 600px of rootMargin starts the download early enough that the form is
// usually ready when it enters the viewport.
if ('IntersectionObserver' in window) {
const observer = new IntersectionObserver(
(entries) => {
if (entries.some((entry) => entry.isIntersecting)) {
observer.disconnect();
initForm();
}
},
{ rootMargin: '600px' }
);
observer.observe(formEl);
} else {
initForm();
}
})();
})();</script> </div>
</li>
</ul>
</div>
<div class="footer__column">
<h3 class="footer__column-title" id="footer-second-marketplaces" itemprop="name">Marketplaces</h3>
<ul class="footer__items" aria-labelledby="footer-second-marketplaces">
<li class="footer__item">
<a class="footer__item-link"
href="https://marketplace.microsoft.com/en-us/product/saas/octopusdeployptyltd1664464418055.octopus_cloud_saas_offer?tab=overview"
target="_blank"
rel="noopener noreferrer"
aria-label="Azure marketplace (opens in new tab)"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Azure marketplace logo" loading="lazy" width="43" height="43" srcset="https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/43x43/01bd95458d/azure-marketplace-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
<span class="footer__item-label" itemprop="name">
Azure marketplace
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://aws.amazon.com/marketplace/pp/prodview-rsv6rann3nbsu?sr=0-2&amp;ref_=beagle&amp;applicationId=AWSMPContessa"
target="_blank"
rel="noopener noreferrer"
aria-label="AWS marketplace (opens in new tab)"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="AWS logo with bold white letters &quot;aws&quot; and an orange curved arrow below on a black background." loading="lazy" width="1500" height="1200" srcset="https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/1500x1200/8959e687b4/aws-white.webp/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
<span class="footer__item-label" itemprop="name">
AWS marketplace
</span>
</a>
</li>
</ul>
</div>
</section>
<section class="footer__row footer__row--third" aria-label="Legal and social media">
<div class="footer__column">
<ul class="footer__items"
aria-labelledby="footer-third-">
<li class="footer__item">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/150x150/61efa58c5f/octopus-blue-logo.svg" alt="Octopus blue logo" loading="lazy" width="150" height="150" />
</span>
</span>
<span class="footer__item-label">&#xA9; 2026 Octopus Deploy</span>
</li>
</ul>
</div>
<div class="footer__column">
<ul class="footer__items"
aria-labelledby="footer-third-">
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/legal/privacy"
aria-label="Privacy Policy"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Privacy Policy
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/legal/gdpr"
aria-label="GDPR"
itemprop="url">
<span class="footer__item-label" itemprop="name">
GDPR
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/legal/customer-agreement"
aria-label="Terms"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Terms
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://status.octopus.com/"
rel="noopener noreferrer"
aria-label="Status (opens in new tab)"
itemprop="url">
<span class="footer__item-label" itemprop="name">
Status
<svg class="icon icon--button-link-arrow" xmlns='http://www.w3.org/2000/svg' width='14' height='15' viewBox='0 0 14 15' fill='none'><path d='M6.01228 1.80213L6.66634 1.13321C6.94328 0.849968 7.39111 0.849968 7.6651 1.13321L13.3925 6.98777C13.6695 7.27101 13.6695 7.72901 13.3925 8.00923L7.6651 13.8668C7.38816 14.15 6.94033 14.15 6.66634 13.8668L6.01228 13.1979C5.73239 12.9116 5.73828 12.4446 6.02406 12.1644L9.57424 8.70527L1.10685 8.70527C0.715007 8.70527 0.399764 8.38286 0.399764 7.98211L0.399764 7.0179C0.399764 6.61715 0.715008 6.29474 1.10685 6.29474L9.57424 6.29474L6.02407 2.83564C5.73534 2.55542 5.72945 2.08838 6.01228 1.80213Z' fill='#0D80D8'/></svg>
</span>
</a>
</li>
</ul>
</div>
<div class="footer__column">
<ul class="footer__items"
aria-labelledby="footer-third-">
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/company/trust"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="SOC 2 Type II compliance" loading="lazy" width="121" height="28" srcset="https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/121x28/f5e12a77a5/soc2-1.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://octopus.com/support/enterprise-argo-support"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="Argo logo" loading="lazy" width="81" height="46" srcset="https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/81x46/95d9bb1ded/property-1-argo-logo-color.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
</ul>
</div>
<div class="footer__column">
<ul class="footer__items"
aria-labelledby="footer-third-">
<li class="footer__item">
<a class="footer__item-link"
href="https://x.com/OctopusDeploy"
target="_blank"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="X logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/6f5c80f250/x-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://www.linkedin.com/company/octopus-deploy"
target="_blank"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="LinkedIn logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/d628eb60c7/linkedin-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://github.com/OctopusDeploy"
target="_blank"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="GitHub logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/6d993f391c/github-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
<li class="footer__item">
<a class="footer__item-link"
href="https://www.youtube.com/c/Octopusdeploy"
rel="noopener noreferrer"
aria-label="Image link"
itemprop="url">
<span class="footer__item-image" aria-hidden="true">
<span class="image-wrapper">
<img src="https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp)" alt="YouTube logo" loading="lazy" width="35" height="35" srcset="https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/400x0/filters:quality(85):format(webp) 400w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/600x0/filters:quality(85):format(webp) 600w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/800x0/filters:quality(85):format(webp) 800w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/1200x0/filters:quality(85):format(webp) 1200w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/1600x0/filters:quality(85):format(webp) 1600w, https://a.storyblok.com/f/185929/35x35/944072d610/youtube-logo.png/m/fit-in/2000x0/filters:quality(85):format(webp) 2000w" sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 70vw" />
</span>
</span>
</a>
</li>
</ul>
</div>
</section>
</div>
</footer>
</div> <script>(function(){const site_url = "https://octopus.com";
const site_features = {"stickyNav":{"top":75.2},"codeBlocks":["copy"],"figures":["enlarge"],"youTubeLinks":["embed"],"headers":["link"],"details":["tabs"],"search":["dialog"]};
window.site_url = site_url;
window.site_features = site_features;
})();</script><script src="/blog/js/main.js" type="module" async></script><script>
document.addEventListener('searched', (e) => {
if (typeof plausible != 'undefined') {
plausible('Search', { props: e.detail });
}
});
</script> <script defer src="https://octopus.com/octopus-public/assets/navbarPU.js"></script> <script defer src="https://octopus.com/octopus-public/assets/buttonHoverEffect.js"></script> </body> </html>