Run an authenticated, OpenAI-compatible LLM endpoint on Kubernetes with GitOps, GPU quota,
inference-aware routing, and tenant budgets.This is an infrastructure reference, not a chatbot application. The model server is one workload in
a platform that is designed to be forked, audited, and moved across GPU-capable clusters.
The hard boundary is the point: OpenTofu owns the cloud substrate; Argo CD owns everything inside
Kubernetes. To change clouds, re-solve the substrate, not the platform.
Self-hosting LLM inference well is not “run vLLM in a pod.” A production endpoint has to solve GPU
scheduling and quota, inference-aware routing, per-tenant keys and budgets, keyless secrets,
scale-to-zero economics, model delivery, and observability. It also has to stay portable instead of
welding itself to one cloud’s managed services. Each of those is a decision, and most reference
setups either skip them or hard-code them to a single provider.
The platform packages the open-source control plane behind one forkable repo: vLLM, KServe, Gateway
API with the Gateway Inference Extension, Kueue, KEDA, LiteLLM, External Secrets, and Argo CD. A
hard line separates two halves:Substrate is the cluster, node pools, identity, and GPU drivers. Infrastructure-as-code owns it,
and it is swapped per cloud.Platform is everything inside Kubernetes. GitOps owns it, and it stays identical across clouds.That separation is the portability story.A platform you can fork and run on any GPU-capable Kubernetes cluster: GKE today, with Hetzner and
bring-your-own cluster paths documented. It scales from a single scale-to-zero L4 to a multi-tenant,
highly available deployment without changing the in-cluster architecture.
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Kubernetes LLM Platform","colors":{"primary":"#326CE5","light":"#315F56","dark":"#9DBBFF"},"logo":{"light":"https://mintcdn.com/wmx-63abac90/YcsbARLrJElWiX9R/assets/brand/kubernetes-inference-light.svg?fit=max\u0026auto=format\u0026n=YcsbARLrJElWiX9R\u0026q=85\u0026s=4b42079b5e74d46d70c3eb7edb5d8fce","dark":"https://mintcdn.com/wmx-63abac90/YcsbARLrJElWiX9R/assets/brand/kubernetes-inference-dark.svg?fit=max\u0026auto=format\u0026n=YcsbARLrJElWiX9R\u0026q=85\u0026s=b7c96cdbafd0dc07a7a156da993efce8","href":"/"},"favicon":"https://mintcdn.com/wmx-63abac90/YcsbARLrJElWiX9R/assets/brand/kubernetes-inference-mark.svg?fit=max\u0026auto=format\u0026n=YcsbARLrJElWiX9R\u0026q=85\u0026s=b28f18e5ddb89eb8c62ba259b9b01dcc","appearance":{"default":"light"},"background":{"color":{"light":"#FAFBF7","dark":"#101417"}},"footer":{"socials":{"github":"https://github.com/ahmedwaleedmalik/k8s-llm-inference-platform"}},"seo":{"metatags":{"canonical":"https://ai.wmx.dev"}},"fonts":{"heading":{"family":"IBM Plex Sans","weight":600},"body":{"family":"IBM Plex Sans","weight":400}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"wmx-63abac90","hasAudioNarration":false,"actualSubdomain":"wmx-63abac90","customDomains":["ai.wmx.dev"],"gitSource":{"type":"github","owner":"ahmedwaleedmalik","repo":"k8s-llm-inference-platform","deployBranch":"main","contentDirectory":"docs/public","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"3d572204-74af-4bc5-ab3a-d86013494027","liveDeploymentHistoryId":"6a42390f1078404d58a9ccf7","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a42390f1078404d58a9ccf7:success","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"Guides","count":23},{"language":"default","tag":"Reference","count":10},{"language":"default","tag":"Architecture","count":7},{"language":"default","tag":"Platform \u0026 ops","count":6},{"language":"default","tag":"Concepts","count":5},{"language":"default","tag":"Serving","count":5},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Routing \u0026 gateway","count":4},{"language":"default","tag":"Experience apps","count":3},{"language":"default","tag":"GPU \u0026 scheduling","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"index","slug":"/","pageMetadata":{"title":"Kubernetes LLM Platform","description":null,"href":"/index"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,OptimizedImage,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Run an authenticated, OpenAI-compatible LLM endpoint on Kubernetes with GitOps, GPU quota,\ninference-aware routing, and tenant budgets.`}),`\n`,_jsx(_components.p,{children:`This is an infrastructure reference, not a chatbot application. The model server is one workload in\na platform that is designed to be forked, audited, and moved across GPU-capable clusters.`}),`\n`,_jsx(Heading,{level:`2`,id:`stack-in-one-picture`,children:`Stack in one picture`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=cf2e45bfae8571366e9c211f6600a7bf`,alt:`Kubernetes LLM platform planes showing GitOps, experience and automation, tenant edge, routing, serving, GPU platform, identity and secrets, observability, and cloud substrate`,\"data-og-width\":`1672`,width:`1672`,\"data-og-height\":`941`,height:`941`,\"data-path\":`assets/diagrams/platform-planes.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?w=280\u0026fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=e81dc47fa2f02e63a130bd15f675eb09 280w, https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?w=560\u0026fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=d4ea3630b3269557b10a1cb43fabbf80 560w, https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?w=840\u0026fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=c3d884a804d5cb120ce4e07d777217b1 840w, https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?w=1100\u0026fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=b3669de1a77e4d50735a8b3b1f38356e 1100w, https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?w=1650\u0026fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=9e46ee81423a3ff6cd4214016ff7f515 1650w, https://mintcdn.com/wmx-63abac90/KpTuPgDOLZVhHALY/assets/diagrams/platform-planes.png?w=2500\u0026fit=max\u0026auto=format\u0026n=KpTuPgDOLZVhHALY\u0026q=85\u0026s=f4631e2ca2fbab93f3128111f4776eeb 2500w`}),`\n`,_jsx(_components.p,{children:`The hard boundary is the point: OpenTofu owns the cloud substrate; Argo CD owns everything inside\nKubernetes. To change clouds, re-solve the substrate, not the platform.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-it-proves`,children:`What it proves`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Proof point`}),_jsx(_components.th,{children:`Where to look`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`vLLM and KServe can serve the same OpenAI-compatible model path.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/architecture/serving-layers`,children:`Serving layers compared`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`LiteLLM owns tenant keys, budgets, spend, and the public `,_jsx(_components.code,{children:`/v1`}),` facade.`]}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/guides/litellm`,children:`LiteLLM guide`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Gateway API plus GIE routes by inference signals instead of plain HTTP load balancing.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/guides/inference-gateway`,children:`Inference gateway guide`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Kueue and KEDA keep GPU admission, quota, and queue-depth autoscaling explicit.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/guides/gpu-debugging`,children:`GPU debugging guide`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Benchmarks tie latency, throughput, GPU use, and KV-cache pressure to the same run.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/benchmarks`,children:`Benchmark results`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`why-it-exists`,children:`Why it exists`}),`\n`,_jsx(_components.p,{children:`Self-hosting LLM inference well is not “run vLLM in a pod.” A production endpoint has to solve GPU\nscheduling and quota, inference-aware routing, per-tenant keys and budgets, keyless secrets,\nscale-to-zero economics, model delivery, and observability. It also has to stay portable instead of\nwelding itself to one cloud’s managed services. Each of those is a decision, and most reference\nsetups either skip them or hard-code them to a single provider.`}),`\n`,_jsx(Heading,{level:`2`,id:`operating-model`,children:`Operating model`}),`\n`,_jsx(_components.p,{children:`The platform packages the open-source control plane behind one forkable repo: vLLM, KServe, Gateway\nAPI with the Gateway Inference Extension, Kueue, KEDA, LiteLLM, External Secrets, and Argo CD. A\nhard line separates two halves:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Substrate`}),` is the cluster, node pools, identity, and GPU drivers. Infrastructure-as-code owns it,\nand it is swapped per cloud.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Platform`}),` is everything inside Kubernetes. GitOps owns it, and it stays identical across clouds.`]}),`\n`,_jsx(_components.p,{children:`That separation is the portability story.`}),`\n`,_jsx(_components.p,{children:`A platform you can fork and run on any GPU-capable Kubernetes cluster: GKE today, with Hetzner and\nbring-your-own cluster paths documented. It scales from a single scale-to-zero L4 to a multi-tenant,\nhighly available deployment without changing the in-cluster architecture.`}),`\n`,_jsx(Heading,{level:`2`,id:`start-by-intent`,children:`Start by intent`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Intent`}),_jsx(_components.th,{children:`Start here`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`See the system boundary and request path.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/architecture`,children:`Architecture`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bring up a fork from zero.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/getting-started`,children:`Get started`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Operate a running stack.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/guides`,children:`Guides`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Check measured serving behavior.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/benchmarks`,children:`Benchmark results`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Look up terms, targets, models, and secrets.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/reference`,children:`Reference`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Understand why the stack is shaped this way.`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/decisions`,children:`Design rationale`})})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Kubernetes LLM Platform","description":null,"href":"/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Stack in one picture","slug":"stack-in-one-picture","depth":2,"children":[]},{"title":"What it proves","slug":"what-it-proves","depth":2,"children":[]},{"title":"Why it exists","slug":"why-it-exists","depth":2,"children":[]},{"title":"Operating model","slug":"operating-model","depth":2,"children":[]},{"title":"Start by intent","slug":"start-by-intent","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"wmx-63abac90","siteName":"Kubernetes LLM Platform","title":"Kubernetes LLM Platform - Kubernetes LLM Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-29T09:21:24.882Z","originalFileLocation":"index.md"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Kubernetes LLM Platform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Kubernetes LLM Platform - Kubernetes LLM Platform\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kubernetes LLM Platform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ai.wmx.dev\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://wmx-63abac90.mintlify.app/_mintlify/api/og/v2?division=Platform\u0026amp;title=Kubernetes+LLM+Platform\u0026amp;theme=f3c29d06e6faac1172f1302e\u0026amp;signature=be49653c91e7968721d5e175c3ab2da75ff32802c3cc94ea18b1ab7a9dc4d46d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Kubernetes LLM Platform - Kubernetes LLM Platform\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://wmx-63abac90.mintlify.app/_mintlify/api/og/v2?division=Platform\u0026amp;title=Kubernetes+LLM+Platform\u0026amp;theme=f3c29d06e6faac1172f1302e\u0026amp;signature=be49653c91e7968721d5e175c3ab2da75ff32802c3cc94ea18b1ab7a9dc4d46d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/wmx-63abac90/v9MJBV3aiJUOhYFI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kubernetes LLM Platform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#326CE5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ai.wmx.dev\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/index.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://ai.wmx.dev/#organization\",\"name\":\"Kubernetes LLM Platform\",\"url\":\"https://ai.wmx.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/wmx-63abac90/YcsbARLrJElWiX9R/assets/brand/kubernetes-inference-light.svg?fit=max\u0026auto=format\u0026n=YcsbARLrJElWiX9R\u0026q=85\u0026s=4b42079b5e74d46d70c3eb7edb5d8fce\"}},{\"@type\":\"WebSite\",\"@id\":\"https://ai.wmx.dev#website\",\"name\":\"Kubernetes LLM Platform\",\"url\":\"https://ai.wmx.dev\",\"publisher\":{\"@id\":\"https://ai.wmx.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://ai.wmx.dev/#webpage\",\"url\":\"https://ai.wmx.dev/\",\"name\":\"Kubernetes LLM Platform\",\"dateModified\":\"2026-06-29T09:21:24.882Z\",\"isPartOf\":{\"@id\":\"https://ai.wmx.dev#website\"},\"breadcrumb\":{\"@id\":\"https://ai.wmx.dev/#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ai.wmx.dev/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Platform\",\"item\":\"https://ai.wmx.dev/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes LLM Platform\",\"item\":\"https://ai.wmx.dev/\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ai.wmx.dev/#article\",\"headline\":\"Kubernetes LLM Platform\",\"name\":\"Kubernetes LLM Platform\",\"url\":\"https://ai.wmx.dev/\",\"mainEntityOfPage\":{\"@id\":\"https://ai.wmx.dev/#webpage\"},\"dateModified\":\"2026-06-29T09:21:24.882Z\",\"publisher\":{\"@id\":\"https://ai.wmx.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://ai.wmx.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kubernetes LLM Platform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kubernetes LLM Platform","nav":{"global":null,"groups":[{"group":"Platform","icon":"layout-dashboard","pages":[{"title":"Kubernetes LLM Platform","href":""},{"title":"Benchmark results","description":null,"href":"/benchmarks"}]},{"group":"Get started","icon":"rocket","pages":[{"title":"Get started","href":"/getting-started/index"},{"title":"1. Configure","href":"/getting-started/configure"},{"title":"2. Provision infrastructure","href":"/getting-started/provision-infra"},{"title":"3. Install the platform","href":"/getting-started/install-platform"}]},{"group":"Architecture","icon":"layers","pages":[{"title":"Architecture","href":"/architecture/index"},{"title":"Serving layers compared","href":"/architecture/serving-layers"},{"group":"Concepts","pages":[{"title":"Concepts","href":"/architecture/lessons/index"},{"title":"GPU signals","href":"/architecture/lessons/gpu-signals-and-autoscaling"},{"title":"Cold start","href":"/architecture/lessons/cold-start"},{"title":"Portability","href":"/architecture/lessons/portability"},{"title":"Operational gotchas","href":"/architecture/lessons/operational-gotchas"}]}]},{"group":"Guides","icon":"terminal","pages":[{"title":"Guides","href":"/guides/index"},{"group":"GPU \u0026 scheduling","icon":"activity","pages":[{"title":"GPU debugging","href":"/guides/gpu-debugging"},{"title":"Pending GPU workloads","href":"/guides/pending-gpu-workloads"},{"title":"KEDA autoscaling","href":"/guides/keda-autoscaling"}]},{"group":"Serving","icon":"cpu","pages":[{"title":"Raw vLLM","href":"/guides/vllm-serving"},{"title":"KServe","href":"/guides/kserve"},{"title":"OCI modelcar","href":"/guides/kserve-modelcar"},{"title":"Change models","href":"/guides/change-or-add-a-model"},{"title":"Switch serving layer","href":"/guides/switch-serving-layer"}]},{"group":"Routing \u0026 gateway","icon":"waypoints","pages":[{"title":"Inference gateway","href":"/guides/inference-gateway"},{"title":"LiteLLM tenant gateway","href":"/guides/litellm"},{"title":"Spend dashboard","href":"/guides/litellm-spend-dashboard"},{"title":"Guardrails","href":"/guides/guardrails"}]},{"group":"Experience apps","icon":"app-window","pages":[{"title":"API key portal","href":"/guides/key-portal"},{"title":"n8n automation","href":"/guides/n8n"},{"title":"Coding assistant","href":"/guides/coder-stack"}]},{"group":"Platform \u0026 ops","icon":"shield-check","pages":[{"title":"Secret contract","href":"/guides/secret-contract"},{"title":"SSO with Dex","href":"/guides/sso-dex"},{"title":"Security enforcement","href":"/guides/security-enforcement"},{"title":"Staged bring-up","href":"/guides/staged-bring-up"},{"title":"Production HA","href":"/guides/prod-ha-validation"},{"title":"Validation and teardown","href":"/guides/teardown"}]},{"group":"Benchmarking","icon":"chart-line","pages":[{"title":"Benchmarking","href":"/guides/benchmarking"}]}]},{"group":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/reference/index"},{"title":"Glossary","href":"/reference/glossary"},{"title":"Repo layout","href":"/reference/repo-layout"},{"title":"Model catalog","href":"/reference/model-catalog"},{"title":"Secrets","href":"/reference/secrets"},{"title":"Security posture","href":"/reference/security"},{"title":"Trust model","href":"/reference/trust-model"},{"title":"agentgateway egress and MCP","href":"/reference/agentgateway"},{"title":"Make targets","href":"/reference/make-targets"},{"title":"Future Roadmap","href":"/reference/roadmap"}]},{"group":"Design rationale","icon":"scale","pages":[{"title":"Design rationale","href":"/decisions/index"}]}]},"title":"Kubernetes LLM Platform - Kubernetes LLM Platform","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CFBqa0On.js","lightbox-handle-r17bVUz3.js"]}