Files
awesome-kubernetes/kubernetes-operators-controllers.html
2026-05-15 15:14:21 +00:00

8387 lines
166 KiB
HTML
Raw 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 lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="A curated list of awesome IT projects and resources. Inspired by the awesome list.">
<meta name="author" content="nubenetes@gmail.com">
<link rel="canonical" href="https://nubenetes.com/kubernetes-operators-controllers.html">
<link rel="prev" href="kubernetes-autoscaling.html">
<link rel="next" href="kubernetes-based-devel.html">
<link rel="icon" href="images/favicon-car.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
<title>Kubernetes Operators and Controllers - Nubenetes</title>
<link rel="stylesheet" href="assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="static/extra.css">
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config",""),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
<script>if("undefined"!=typeof __md_analytics){var consent=__md_get("__consent");consent&&consent.analytics&&__md_analytics()}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="red">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#kubernetes-operators-and-controllers" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="index.html" title="Nubenetes" class="md-header__button md-logo" aria-label="Nubenetes" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 89 89">
<path d="M3.136,17.387l0,42.932l42.932,21.467l-42.932,-64.399Z" />
<path d="M21.91,8l42.933,64.398l-18.775,9.388l-42.932,-64.399l18.774,-9.387Z" style="fill-opacity: 0.5" />
<path d="M67.535,17.387l-27.262,18.156l21.878,32.818l5.384,2.691l0,-53.665Z" />
<path d="M67.535,17.387l0,53.666l18.774,-9.388l0,-53.665l-18.774,9.387Z" style="fill-opacity: 0.25" />
</svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Nubenetes
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Kubernetes Operators and Controllers
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="red" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="light-blue" data-md-color-accent="yellow" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/nubenetes/awesome-kubernetes" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
nubenetes/awesome-kubernetes
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="https://nubenetes.com/v2/" class="md-tabs__link">
🚀 Try Nubenetes V2 (Elite)
</a>
</li>
<li class="md-tabs__item">
<a href="index.html" class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="introduction.html" class="md-tabs__link">
Intro
</a>
</li>
<li class="md-tabs__item">
<a href="sre.html" class="md-tabs__link">
SRE
</a>
</li>
<li class="md-tabs__item">
<a href="devops.html" class="md-tabs__link">
DevOps
</a>
</li>
<li class="md-tabs__item">
<a href="devsecops.html" class="md-tabs__link">
DevSecOps
</a>
</li>
<li class="md-tabs__item">
<a href="noops.html" class="md-tabs__link">
NoOps
</a>
</li>
<li class="md-tabs__item">
<a href="docker.html" class="md-tabs__link">
Docker
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="kubernetes.html" class="md-tabs__link">
K8s
</a>
</li>
<li class="md-tabs__item">
<a href="openshift.html" class="md-tabs__link">
OpenShift
</a>
</li>
<li class="md-tabs__item">
<a href="rancher.html" class="md-tabs__link">
Rancher
</a>
</li>
<li class="md-tabs__item">
<a href="cicd.html" class="md-tabs__link">
CI/CD
</a>
</li>
<li class="md-tabs__item">
<a href="monitoring.html" class="md-tabs__link">
Montrg
</a>
</li>
<li class="md-tabs__item">
<a href="iac.html" class="md-tabs__link">
Infra Prov
</a>
</li>
<li class="md-tabs__item">
<a href="ansible.html" class="md-tabs__link">
Config Mgmt
</a>
</li>
<li class="md-tabs__item">
<a href="databases.html" class="md-tabs__link">
DB
</a>
</li>
<li class="md-tabs__item">
<a href="message-queue.html" class="md-tabs__link">
Data Pipeline
</a>
</li>
<li class="md-tabs__item">
<a href="servicemesh.html" class="md-tabs__link">
Service Mesh
</a>
</li>
<li class="md-tabs__item">
<a href="demos.html" class="md-tabs__link">
Demos
</a>
</li>
<li class="md-tabs__item">
<a href="public-cloud-solutions.html" class="md-tabs__link">
Cloud
</a>
</li>
<li class="md-tabs__item">
<a href="api.html" class="md-tabs__link">
APIs
</a>
</li>
<li class="md-tabs__item">
<a href="devel-sites.html" class="md-tabs__link">
Dev
</a>
</li>
<li class="md-tabs__item">
<a href="qa.html" class="md-tabs__link">
QA
</a>
</li>
<li class="md-tabs__item">
<a href="ai.html" class="md-tabs__link">
AI
</a>
</li>
<li class="md-tabs__item">
<a href="project-management-methodology.html" class="md-tabs__link">
Project Mgmt
</a>
</li>
<li class="md-tabs__item">
<a href="other-awesome-lists.html" class="md-tabs__link">
Refs+
</a>
</li>
<li class="md-tabs__item">
<a href="recruitment.html" class="md-tabs__link">
Hiring
</a>
</li>
<li class="md-tabs__item">
<a href="customer.html" class="md-tabs__link">
Clients
</a>
</li>
<li class="md-tabs__item">
<a href="about.html" class="md-tabs__link">
About
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="index.html" title="Nubenetes" class="md-nav__button md-logo" aria-label="Nubenetes" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 89 89">
<path d="M3.136,17.387l0,42.932l42.932,21.467l-42.932,-64.399Z" />
<path d="M21.91,8l42.933,64.398l-18.775,9.388l-42.932,-64.399l18.774,-9.387Z" style="fill-opacity: 0.5" />
<path d="M67.535,17.387l-27.262,18.156l21.878,32.818l5.384,2.691l0,-53.665Z" />
<path d="M67.535,17.387l0,53.666l18.774,-9.388l0,-53.665l-18.774,9.387Z" style="fill-opacity: 0.25" />
</svg>
</a>
Nubenetes
</label>
<div class="md-nav__source">
<a href="https://github.com/nubenetes/awesome-kubernetes" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
nubenetes/awesome-kubernetes
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="https://nubenetes.com/v2/" class="md-nav__link">
<span class="md-ellipsis">
🚀 Try Nubenetes V2 (Elite)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="index.html" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Intro
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Intro
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="introduction.html" class="md-nav__link">
<span class="md-ellipsis">
Microservice Architecture. From Java EE To Cloud Native. Openshift VS Kubernetes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="faq.html" class="md-nav__link">
<span class="md-ellipsis">
Microservices FAQ & Kubernetes Native
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
SRE
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SRE
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="sre.html" class="md-nav__link">
<span class="md-ellipsis">
SRE Site Reliability Engineering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="networking.html" class="md-nav__link">
<span class="md-ellipsis">
Networking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="finops.html" class="md-nav__link">
<span class="md-ellipsis">
FinOps. Cloud Financial Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="chaos-engineering.html" class="md-nav__link">
<span class="md-ellipsis">
Chaos Engineering
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
DevOps
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
DevOps
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="devops.html" class="md-nav__link">
<span class="md-ellipsis">
DevOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="gitops.html" class="md-nav__link">
<span class="md-ellipsis">
GitOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="mlops.html" class="md-nav__link">
<span class="md-ellipsis">
MLOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="cheatsheets.html" class="md-nav__link">
<span class="md-ellipsis">
Cheat Sheets
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
DevSecOps
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
DevSecOps
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="devsecops.html" class="md-nav__link">
<span class="md-ellipsis">
DevSecOps. Container Security
</span>
</a>
</li>
<li class="md-nav__item">
<a href="securityascode.html" class="md-nav__link">
<span class="md-ellipsis">
Security Policy as Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="oauth.html" class="md-nav__link">
<span class="md-ellipsis">
OAuth2
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
NoOps
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
NoOps
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="noops.html" class="md-nav__link">
<span class="md-ellipsis">
NoOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="serverless.html" class="md-nav__link">
<span class="md-ellipsis">
Serverless Architectures & Frameworks. OpenFaaS, Knative & Kubeless
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="docker.html" class="md-nav__link">
<span class="md-ellipsis">
Docker
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" checked>
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="">
<span class="md-ellipsis">
K8s
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
K8s
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="kubernetes.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-tutorials.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Tutorials
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-tools.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Plugins, Tools, Extensions and Projects
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubectl-commands.html" class="md-nav__link">
<span class="md-ellipsis">
kubectl Commands
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-networking.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Networking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-monitoring.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Monitoring and Logging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-security.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Security
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-storage.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Storage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-backup-migrations.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Backup and Migrations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-autoscaling.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Autoscaling
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Kubernetes Operators and Controllers
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="kubernetes-operators-controllers.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Kubernetes Operators and Controllers
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#introduction" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#opentelemetry-operator" class="md-nav__link">
<span class="md-ellipsis">
OpenTelemetry Operator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-kubernetes-operator-using-kubebuilder" class="md-nav__link">
<span class="md-ellipsis">
Creating Kubernetes operator using Kubebuilder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operatorhubio" class="md-nav__link">
<span class="md-ellipsis">
operatorhub.io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#red-hat-container-community-of-practice-operators" class="md-nav__link">
<span class="md-ellipsis">
Red Hat Container Community of Practice Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operator-capability-levels" class="md-nav__link">
<span class="md-ellipsis">
Operator Capability Levels
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cluster-addons" class="md-nav__link">
<span class="md-ellipsis">
Cluster Addons
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#k8spin-operator-kubernetes-multi-tenant-operator" class="md-nav__link">
<span class="md-ellipsis">
K8Spin Operator. Kubernetes multi-tenant operator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#k8s-kpis-with-kuberhealthy-operator" class="md-nav__link">
<span class="md-ellipsis">
K8s KPIs with Kuberhealthy Operator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#writing-kubernetes-operators-and-controllers" class="md-nav__link">
<span class="md-ellipsis">
Writing Kubernetes Operators and Controllers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tweets" class="md-nav__link">
<span class="md-ellipsis">
Tweets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#videos" class="md-nav__link">
<span class="md-ellipsis">
Videos
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="kubernetes-based-devel.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Based Development
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-on-premise.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes On Premise
</span>
</a>
</li>
<li class="md-nav__item">
<a href="managed-kubernetes-in-public-cloud.html" class="md-nav__link">
<span class="md-ellipsis">
Managed kubernetes in public clouds
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-troubleshooting.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Troubleshooting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-releases.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Releases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-newsletters.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Newsletters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="matrix-table.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Distributions & Installers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-bigdata.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes Big Data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-alternatives.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes alternatives
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" >
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
<span class="md-ellipsis">
OpenShift
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
OpenShift
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="openshift.html" class="md-nav__link">
<span class="md-ellipsis">
OpenShift docs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="ocp3.html" class="md-nav__link">
<span class="md-ellipsis">
OCP 3
</span>
</a>
</li>
<li class="md-nav__item">
<a href="ocp4.html" class="md-nav__link">
<span class="md-ellipsis">
OCP 4
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_11" >
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
<span class="md-ellipsis">
Rancher
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
Rancher
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="rancher.html" class="md-nav__link">
<span class="md-ellipsis">
Rancher - Enterprise management for Kubernetes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12" >
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
<span class="md-ellipsis">
CI/CD
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
CI/CD
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="cicd.html" class="md-nav__link">
<span class="md-ellipsis">
CI/CD - Continuous Integration & Continuous Delivery
</span>
</a>
</li>
<li class="md-nav__item">
<a href="git.html" class="md-nav__link">
<span class="md-ellipsis">
Git & Git Patterns. Trunk Devel, Git Flow & Feature Flags. Merge BOTs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="jenkins.html" class="md-nav__link">
<span class="md-ellipsis">
Jenkins & Cloudbees
</span>
</a>
</li>
<li class="md-nav__item">
<a href="performance-testing-with-jenkins-and-jmeter.html" class="md-nav__link">
<span class="md-ellipsis">
Performance testing with Jenkins, JMeter, Gatling, Azure Load Testing, etc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="openshift-pipelines.html" class="md-nav__link">
<span class="md-ellipsis">
OpenShift Pipelines with Jenkins, Tekton and more...
</span>
</a>
</li>
<li class="md-nav__item">
<a href="performance-testing-with-jenkins-and-jmeter.html" class="md-nav__link">
<span class="md-ellipsis">
Performance testing with Jenkins, JMeter, Gatling, Azure Load Testing, etc
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12_7" >
<label class="md-nav__link" for="__nav_12_7" id="__nav_12_7_label" tabindex="0">
<span class="md-ellipsis">
DevOps Tools aka Toolchain. Jenkins Alternatives. Cloud Native CI/CD Tools
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_12_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12_7">
<span class="md-nav__icon md-icon"></span>
DevOps Tools aka Toolchain. Jenkins Alternatives. Cloud Native CI/CD Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="devops-tools.html" class="md-nav__link">
<span class="md-ellipsis">
DevOps Tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="jenkins-alternatives.html" class="md-nav__link">
<span class="md-ellipsis">
Jenkins Alternatives for Continuous Integration & Deployment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="argo.html" class="md-nav__link">
<span class="md-ellipsis">
Argo - Declarative GitOps for Kubernetes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="flux.html" class="md-nav__link">
<span class="md-ellipsis">
Flux CD - The GitOps Operator for Kubernetes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="tekton.html" class="md-nav__link">
<span class="md-ellipsis">
Tekton - Cloud Native CI/CD
</span>
</a>
</li>
<li class="md-nav__item">
<a href="keptn.html" class="md-nav__link">
<span class="md-ellipsis">
Keptn
</span>
</a>
</li>
<li class="md-nav__item">
<a href="container-managers.html" class="md-nav__link">
<span class="md-ellipsis">
Container Runtimes/Managers & Base Images. Podman, Buildah & Skopeo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="maven-gradle.html" class="md-nav__link">
<span class="md-ellipsis">
Maven, Gradle & SDKMAN
</span>
</a>
</li>
<li class="md-nav__item">
<a href="sonarqube.html" class="md-nav__link">
<span class="md-ellipsis">
SonarQube
</span>
</a>
</li>
<li class="md-nav__item">
<a href="registries.html" class="md-nav__link">
<span class="md-ellipsis">
Docker Registries. Quay, Nexus, JFrog Artifactory, Harbor and more
</span>
</a>
</li>
<li class="md-nav__item">
<a href="linux.html" class="md-nav__link">
<span class="md-ellipsis">
Linux & SSH
</span>
</a>
</li>
<li class="md-nav__item">
<a href="mkdocs.html" class="md-nav__link">
<span class="md-ellipsis">
MkDocs & GitHub Pages
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12_8" >
<label class="md-nav__link" for="__nav_12_8" id="__nav_12_8_label" tabindex="0">
<span class="md-ellipsis">
Web Servers, Reverse Proxies, Java Runtimes & Caching Solutions
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_12_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12_8">
<span class="md-nav__icon md-icon"></span>
Web Servers, Reverse Proxies, Java Runtimes & Caching Solutions
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="web-servers.html" class="md-nav__link">
<span class="md-ellipsis">
Web Servers & Reverse Proxies - Apache, Nginx, HAProxy, Traefik and more
</span>
</a>
</li>
<li class="md-nav__item">
<a href="java_app_servers.html" class="md-nav__link">
<span class="md-ellipsis">
Java EE/Jakarta EE and MicroProfile Runtimes - Payara, JBoss EAP, WebSphere Liberty, WildFly and more
</span>
</a>
</li>
<li class="md-nav__item">
<a href="embedded-servlet-containers.html" class="md-nav__link">
<span class="md-ellipsis">
Embedded Servlet Containers in SpringBoot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="caching.html" class="md-nav__link">
<span class="md-ellipsis">
Caching Solutions
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" >
<label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0">
<span class="md-ellipsis">
Montrg
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_13">
<span class="md-nav__icon md-icon"></span>
Montrg
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="monitoring.html" class="md-nav__link">
<span class="md-ellipsis">
Monitoring and Performance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="prometheus.html" class="md-nav__link">
<span class="md-ellipsis">
Prometheus
</span>
</a>
</li>
<li class="md-nav__item">
<a href="grafana.html" class="md-nav__link">
<span class="md-ellipsis">
Grafana
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_14" >
<label class="md-nav__link" for="__nav_14" id="__nav_14_label" tabindex="0">
<span class="md-ellipsis">
Infra Prov
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_14">
<span class="md-nav__icon md-icon"></span>
Infra Prov
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="iac.html" class="md-nav__link">
<span class="md-ellipsis">
IaC Infrastructure as Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="terraform.html" class="md-nav__link">
<span class="md-ellipsis">
Terraform & Packer.Kubernetes Boilerplates
</span>
</a>
</li>
<li class="md-nav__item">
<a href="pulumi.html" class="md-nav__link">
<span class="md-ellipsis">
Pulumi
</span>
</a>
</li>
<li class="md-nav__item">
<a href="crossplane.html" class="md-nav__link">
<span class="md-ellipsis">
Crossplane
</span>
</a>
</li>
<li class="md-nav__item">
<a href="cloud-arch-diagrams.html" class="md-nav__link">
<span class="md-ellipsis">
Cloud Architecture Diagram Tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="cloud-asset-inventory.html" class="md-nav__link">
<span class="md-ellipsis">
Cloud Asset Inventory
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_15" >
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
<span class="md-ellipsis">
Config Mgmt
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_15">
<span class="md-nav__icon md-icon"></span>
Config Mgmt
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="ansible.html" class="md-nav__link">
<span class="md-ellipsis">
Ansible
</span>
</a>
</li>
<li class="md-nav__item">
<a href="helm.html" class="md-nav__link">
<span class="md-ellipsis">
Helm Kubernetes Tool
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kustomize.html" class="md-nav__link">
<span class="md-ellipsis">
Kustomize - Template-Free Kubernetes Configuration Customization
</span>
</a>
</li>
<li class="md-nav__item">
<a href="stackstorm.html" class="md-nav__link">
<span class="md-ellipsis">
StackStorm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="chef.html" class="md-nav__link">
<span class="md-ellipsis">
Chef
</span>
</a>
</li>
<li class="md-nav__item">
<a href="cicd-kubernetes-plugins.html" class="md-nav__link">
<span class="md-ellipsis">
CI/CD Kubernetes Plugins
</span>
</a>
</li>
<li class="md-nav__item">
<a href="kubernetes-client-libraries.html" class="md-nav__link">
<span class="md-ellipsis">
Client Libraries for Kubernetes - Go client, Python, Fabric8, JKube & Java Operator SDK
</span>
</a>
</li>
<li class="md-nav__item">
<a href="liquibase.html" class="md-nav__link">
<span class="md-ellipsis">
Database Version Control. Liquibase, Flyway and PlanetScale
</span>
</a>
</li>
<li class="md-nav__item">
<a href="yaml.html" class="md-nav__link">
<span class="md-ellipsis">
YAML and JSON
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_16" >
<label class="md-nav__link" for="__nav_16" id="__nav_16_label" tabindex="0">
<span class="md-ellipsis">
DB
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_16">
<span class="md-nav__icon md-icon"></span>
DB
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="databases.html" class="md-nav__link">
<span class="md-ellipsis">
Relational Databases and Database DevOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="crunchydata.html" class="md-nav__link">
<span class="md-ellipsis">
Crunchy Data PostgreSQL Operator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="nosql.html" class="md-nav__link">
<span class="md-ellipsis">
NoSQL Databases
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="message-queue.html" class="md-nav__link">
<span class="md-ellipsis">
Data Pipeline
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_18" >
<label class="md-nav__link" for="__nav_18" id="__nav_18_label" tabindex="0">
<span class="md-ellipsis">
Service Mesh
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_18_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_18">
<span class="md-nav__icon md-icon"></span>
Service Mesh
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="servicemesh.html" class="md-nav__link">
<span class="md-ellipsis">
Service Mesh
</span>
</a>
</li>
<li class="md-nav__item">
<a href="istio.html" class="md-nav__link">
<span class="md-ellipsis">
Istio
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_19" >
<label class="md-nav__link" for="__nav_19" id="__nav_19_label" tabindex="0">
<span class="md-ellipsis">
Demos
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_19_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_19">
<span class="md-nav__icon md-icon"></span>
Demos
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="demos.html" class="md-nav__link">
<span class="md-ellipsis">
Demos, Boilerplates & Screencasts
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_20" >
<label class="md-nav__link" for="__nav_20" id="__nav_20_label" tabindex="0">
<span class="md-ellipsis">
Cloud
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_20_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_20">
<span class="md-nav__icon md-icon"></span>
Cloud
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="public-cloud-solutions.html" class="md-nav__link">
<span class="md-ellipsis">
Public Cloud Solutions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="private-cloud-solutions.html" class="md-nav__link">
<span class="md-ellipsis">
Private Cloud Solutions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="edge-computing.html" class="md-nav__link">
<span class="md-ellipsis">
Edge Computing
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_20_4" >
<label class="md-nav__link" for="__nav_20_4" id="__nav_20_4_label" tabindex="0">
<span class="md-ellipsis">
AWS Cloud
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_20_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_20_4">
<span class="md-nav__icon md-icon"></span>
AWS Cloud
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="aws.html" class="md-nav__link">
<span class="md-ellipsis">
AWS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-miscellaneous.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Miscellaneous
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-architecture.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Architecture and Best Practices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-networking.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Networking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-databases.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Databases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-storage.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Storage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-security.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Security
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-monitoring.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Monitoring
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-iac.html" class="md-nav__link">
<span class="md-ellipsis">
AWS IaC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-tools-scripts.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Tools Scripts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-messaging.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Messaging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-data.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-devops.html" class="md-nav__link">
<span class="md-ellipsis">
AWS DevOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-serverless.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Serverless
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-pricing.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Pricing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-containers.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Containers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-backup.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Backup and Migrations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-training.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Training and Certification
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-newfeatures.html" class="md-nav__link">
<span class="md-ellipsis">
AWS New Features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="aws-spain.html" class="md-nav__link">
<span class="md-ellipsis">
AWS Spain
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="azure.html" class="md-nav__link">
<span class="md-ellipsis">
Microsoft Azure
</span>
</a>
</li>
<li class="md-nav__item">
<a href="GoogleCloudPlatform.html" class="md-nav__link">
<span class="md-ellipsis">
Google Cloud Platform
</span>
</a>
</li>
<li class="md-nav__item">
<a href="ibm_cloud.html" class="md-nav__link">
<span class="md-ellipsis">
IBM & IBM Cloud
</span>
</a>
</li>
<li class="md-nav__item">
<a href="oraclecloud.html" class="md-nav__link">
<span class="md-ellipsis">
Oracle Cloud
</span>
</a>
</li>
<li class="md-nav__item">
<a href="digitalocean.html" class="md-nav__link">
<span class="md-ellipsis">
Digital Ocean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="cloudflare.html" class="md-nav__link">
<span class="md-ellipsis">
Cloudflare
</span>
</a>
</li>
<li class="md-nav__item">
<a href="scaleway.html" class="md-nav__link">
<span class="md-ellipsis">
Scaleway
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_21" >
<label class="md-nav__link" for="__nav_21" id="__nav_21_label" tabindex="0">
<span class="md-ellipsis">
APIs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_21_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_21">
<span class="md-nav__icon md-icon"></span>
APIs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="api.html" class="md-nav__link">
<span class="md-ellipsis">
APIs with SOAP, REST and gRPC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="swagger-code-generator-for-rest-apis.html" class="md-nav__link">
<span class="md-ellipsis">
Swagger code generator for REST APIs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="postman.html" class="md-nav__link">
<span class="md-ellipsis">
API Test Automation with Postman and REST Assured
</span>
</a>
</li>
<li class="md-nav__item">
<a href="developerportals.html" class="md-nav__link">
<span class="md-ellipsis">
API Marketplaces. API Management with API Gateways & Developer Portals
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_22" >
<label class="md-nav__link" for="__nav_22" id="__nav_22_label" tabindex="0">
<span class="md-ellipsis">
Dev
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_22_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_22">
<span class="md-nav__icon md-icon"></span>
Dev
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="devel-sites.html" class="md-nav__link">
<span class="md-ellipsis">
Websites for web developers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="angular.html" class="md-nav__link">
<span class="md-ellipsis">
Angular
</span>
</a>
</li>
<li class="md-nav__item">
<a href="dom.html" class="md-nav__link">
<span class="md-ellipsis">
Document Object Model (DOM)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="golang.html" class="md-nav__link">
<span class="md-ellipsis">
Golang
</span>
</a>
</li>
<li class="md-nav__item">
<a href="javascript.html" class="md-nav__link">
<span class="md-ellipsis">
JavaScript - node.js & npm
</span>
</a>
</li>
<li class="md-nav__item">
<a href="python.html" class="md-nav__link">
<span class="md-ellipsis">
Python - Django & Flask
</span>
</a>
</li>
<li class="md-nav__item">
<a href="react.html" class="md-nav__link">
<span class="md-ellipsis">
React
</span>
</a>
</li>
<li class="md-nav__item">
<a href="lowcode-nocode.html" class="md-nav__link">
<span class="md-ellipsis">
Low Code and No Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="web3.html" class="md-nav__link">
<span class="md-ellipsis">
Web 3
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_22_10" >
<label class="md-nav__link" for="__nav_22_10" id="__nav_22_10_label" tabindex="0">
<span class="md-ellipsis">
Microsoft
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_22_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_22_10">
<span class="md-nav__icon md-icon"></span>
Microsoft
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="dotnet.html" class="md-nav__link">
<span class="md-ellipsis">
Microsoft .NET
</span>
</a>
</li>
<li class="md-nav__item">
<a href="xamarin.html" class="md-nav__link">
<span class="md-ellipsis">
Microsoft Xamarin
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_22_11" >
<label class="md-nav__link" for="__nav_22_11" id="__nav_22_11_label" tabindex="0">
<span class="md-ellipsis">
Java
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_22_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_22_11">
<span class="md-nav__icon md-icon"></span>
Java
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="java_frameworks.html" class="md-nav__link">
<span class="md-ellipsis">
Java & Open Source Microservices Frameworks. SpringBoot, MicroProfile, Quarkus and more
</span>
</a>
</li>
<li class="md-nav__item">
<a href="java-and-java-performance-optimization.html" class="md-nav__link">
<span class="md-ellipsis">
Java Memory Management & Java Performance Optimization
</span>
</a>
</li>
<li class="md-nav__item">
<a href="jvm-parameters-matrix-table.html" class="md-nav__link">
<span class="md-ellipsis">
Java Parameters Matrix Table
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_22_12" >
<label class="md-nav__link" for="__nav_22_12" id="__nav_22_12_label" tabindex="0">
<span class="md-ellipsis">
Dev Environment
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_22_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_22_12">
<span class="md-nav__icon md-icon"></span>
Dev Environment
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="visual-studio.html" class="md-nav__link">
<span class="md-ellipsis">
Visual Studio Code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="linux-dev-env.html" class="md-nav__link">
<span class="md-ellipsis">
WSL - Linux Dev Environment on Windows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="scaffolding.html" class="md-nav__link">
<span class="md-ellipsis">
Scaffolding Tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="ChromeDevTools.html" class="md-nav__link">
<span class="md-ellipsis">
Chrome & Firefox DevTools. HTTP Protocols & WebSockets
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_23" >
<label class="md-nav__link" for="__nav_23" id="__nav_23_label" tabindex="0">
<span class="md-ellipsis">
QA
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_23_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_23">
<span class="md-nav__icon md-icon"></span>
QA
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="qa.html" class="md-nav__link">
<span class="md-ellipsis">
QA
</span>
</a>
</li>
<li class="md-nav__item">
<a href="testops.html" class="md-nav__link">
<span class="md-ellipsis">
TestOps and Continuous Testing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="test-automation-frameworks.html" class="md-nav__link">
<span class="md-ellipsis">
Test Automation Frameworks and BDD
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_24" >
<label class="md-nav__link" for="__nav_24" id="__nav_24_label" tabindex="0">
<span class="md-ellipsis">
AI
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_24_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_24">
<span class="md-nav__icon md-icon"></span>
AI
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="ai.html" class="md-nav__link">
<span class="md-ellipsis">
AI
</span>
</a>
</li>
<li class="md-nav__item">
<a href="ai-agents-mcp.html" class="md-nav__link">
<span class="md-ellipsis">
Model Context Protocol (MCP) & AI Agents
</span>
</a>
</li>
<li class="md-nav__item">
<a href="mlops.html" class="md-nav__link">
<span class="md-ellipsis">
MLOps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="chatgpt.html" class="md-nav__link">
<span class="md-ellipsis">
ChatGPT
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_25" >
<label class="md-nav__link" for="__nav_25" id="__nav_25_label" tabindex="0">
<span class="md-ellipsis">
Project Mgmt
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_25_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_25">
<span class="md-nav__icon md-icon"></span>
Project Mgmt
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="project-management-methodology.html" class="md-nav__link">
<span class="md-ellipsis">
Project Management Methodology
</span>
</a>
</li>
<li class="md-nav__item">
<a href="project-management-tools.html" class="md-nav__link">
<span class="md-ellipsis">
Project Management Tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="appointment-scheduling.html" class="md-nav__link">
<span class="md-ellipsis">
Appointment Scheduling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="workfromhome.html" class="md-nav__link">
<span class="md-ellipsis">
Work From Home
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_26" >
<label class="md-nav__link" for="__nav_26" id="__nav_26_label" tabindex="0">
<span class="md-ellipsis">
Refs+
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_26_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_26">
<span class="md-nav__icon md-icon"></span>
Refs+
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="other-awesome-lists.html" class="md-nav__link">
<span class="md-ellipsis">
Other Awesome Lists
</span>
</a>
</li>
<li class="md-nav__item">
<a href="interview-questions.html" class="md-nav__link">
<span class="md-ellipsis">
Interview Questions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="newsfeeds.html" class="md-nav__link">
<span class="md-ellipsis">
Subreddits
</span>
</a>
</li>
<li class="md-nav__item">
<a href="elearning.html" class="md-nav__link">
<span class="md-ellipsis">
E-Learning
</span>
</a>
</li>
<li class="md-nav__item">
<a href="digital-money.html" class="md-nav__link">
<span class="md-ellipsis">
Digital Money
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_27" >
<label class="md-nav__link" for="__nav_27" id="__nav_27_label" tabindex="0">
<span class="md-ellipsis">
Hiring
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_27_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_27">
<span class="md-nav__icon md-icon"></span>
Hiring
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="recruitment.html" class="md-nav__link">
<span class="md-ellipsis">
Recruitment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="hr.html" class="md-nav__link">
<span class="md-ellipsis">
Human Resources
</span>
</a>
</li>
<li class="md-nav__item">
<a href="freelancing.html" class="md-nav__link">
<span class="md-ellipsis">
Freelancing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="remote-tech-jobs.html" class="md-nav__link">
<span class="md-ellipsis">
Remote Tech Jobs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="customer.html" class="md-nav__link">
<span class="md-ellipsis">
Clients
</span>
</a>
</li>
<li class="md-nav__item">
<a href="about.html" class="md-nav__link">
<span class="md-ellipsis">
About
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="kubernetes-operators-and-controllers">Kubernetes Operators and Controllers</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#opentelemetry-operator">OpenTelemetry Operator</a></li>
<li><a href="#creating-kubernetes-operator-using-kubebuilder">Creating Kubernetes operator using Kubebuilder</a></li>
<li><a href="#operatorhubio">operatorhub.io</a></li>
<li><a href="#red-hat-container-community-of-practice-operators">Red Hat Container Community of Practice Operators</a></li>
<li><a href="#operator-capability-levels">Operator Capability Levels</a></li>
<li><a href="#cluster-addons">Cluster Addons</a></li>
<li><a href="#k8spin-operator-kubernetes-multi-tenant-operator">K8Spin Operator. Kubernetes multi-tenant operator</a></li>
<li><a href="#k8s-kpis-with-kuberhealthy-operator">K8s KPIs with Kuberhealthy Operator</a></li>
<li><a href="#writing-kubernetes-operators-and-controllers">Writing Kubernetes Operators and Controllers</a></li>
<li><a href="#tweets">Tweets</a></li>
<li><a href="#videos">Videos</a></li>
</ol>
<h2 id="introduction">Introduction</h2>
<ul>
<li><a href="https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/ai_workloads/red-hat-build-of-kueue#about-kueue">Red Hat Build of Kueue</a> 🌟 - This documentation introduces Red Hat Build of Kueue, a Kubernetes-native batch job orchestrator. It explains how Kueue manages and schedules batch workloads by providing features like fair-sharing, preemption, and resource aggregation, making it suitable for AI and high-performance computing (HPC) workloads.</li>
<li>
<p><a href="https://www.thestack.technology/how-kubernetes-operators-fit-into-to-platform-building-and-when-traditional-iac-isnt-enough/">How Kubernetes Operators Fit into Platform Building and When Traditional IaC Isn&rsquo;t Enough</a> 🌟 - This article explores the role of Kubernetes Operators in modern platform engineering, highlighting their advantages over traditional Infrastructure as Code (IaC) for managing complex applications and infrastructure within the Kubernetes control plane. It discusses how operators encapsulate expertise for tasks like backups, upgrades, and scaling, integrating seamlessly with tools like Argo and Flux for enhanced drift detection and reconciliation.</p>
</li>
<li>
<p><a href="https://kruschecompany.com/kubernetes-operator/">kruschecompany.com: What is a Kubernetes Operator and Where it Can be Used?</a></p>
</li>
<li><a href="https://kruschecompany.com/kubernetes-prometheus-operator/">kruschecompany.com: Prometheus Operator Installing Prometheus Monitoring Within The Kubernetes Environment</a></li>
<li><a href="https://www.hashicorp.com/blog/creating-workspaces-with-the-hashicorp-terraform-operator-for-kubernetes/">hashicorp.com: Creating Workspaces with the HashiCorp Terraform Operator for Kubernetes</a></li>
<li><a href="https://banzaicloud.com/blog/kafka-rolling-upgrade/">banzaicloud.com: Kafka rolling upgrade made easy with Supertubes</a></li>
<li><a href="https://devops.com/day-2-for-the-operator-ecosystem/">devops.com: Day 2 for the Operator Ecosystem 🌟</a><ul>
<li><a href="https://kudo.dev/">KUDO: The Kubernetes Universal Declarative Operator 🌟</a> KUDO is a toolkit that makes it easy to build Kubernetes Operators, in most cases just using YAML.</li>
</ul>
</li>
<li><a href="https://itnext.io/wth-is-a-operator-lifecycle-manager-873cf1661b04">itnext.io: <strong>Operator Lifecycle Manager (OLM)</strong> 🌟</a></li>
<li><a href="https://github.com/vmware/kube-fluentd-operator">kube-fluentd-operator 🌟</a> is a sane, no-brainer Kubernetes+Helm distribution of Fluentd with batteries included, config validation, no needs to restart, with sensible defaults and best practices built-in. You can use Kubernetes labels to filter/route logs!</li>
<li><a href="https://github.com/shurshun/domain-harvester">Domain-harvester</a> is an operator that collects domains from all Ingress resources in a Kubernetes cluster and provides its expiry information</li>
<li><a href="https://github.com/datastax/cass-operator">Cass Operator</a> The DataStax Kubernetes Operator for Apache Cassandra®</li>
<li><a href="https://github.com/kotalco/kotal">Kotal operator</a> is cloud agnostic blockchain deployer that make it easy to deploy highly available, self-managing, self-healing blockchain infrastructure (networks, nodes, storage clusters &hellip;) on any cloud.</li>
<li><a href="https://github.com/OT-CONTAINER-KIT/redis-operator">Speculator: Redis Operator</a> A Golang based redis operator that will make/oversee Redis standalone/cluster mode setup on top of the Kubernetes. It can create a redis cluster setup with best practices on Cloud as well as the Bare metal environment. Also, it provides an in-built monitoring capability using redis-exporter.</li>
<li><a href="https://github.com/carlosedp/lbconfig-operator">github.com/carlosedp/lbconfig-operator: External Load Balancer Operator 🌟</a> a Kubernetes/openshift Operator to dynamically configure external load-balancers distributing the traffic to the cluster nodes. It&rsquo;s not 100% (will it ever be?) but already configures the F5 BigIP. The idea is to have multiple LB backends soon.</li>
<li><a href="https://github.com/jace-ys/sentry-operator">Sentry Operator</a> A Kubernetes operator for automating the provisioning and management of Sentry resources via Kubernetes CRDs.</li>
<li><a href="https://thenewstack.io/kubernetes-when-to-use-and-when-to-avoid-the-operator-pattern/">thenewstack.io: When to Use, and When to Avoid, the Operator Pattern 🌟</a></li>
<li><a href="https://www.infoq.com/articles/kubernetes-operators-in-depth/">infoq.com: Kubernetes Operators in Depth</a></li>
<li><a href="https://github.com/kloeckner-i/db-operator">DB Operator 🌟</a> is a Kubernetes Operator for the management of cloud databases, primarily Google Cloud SQL(GCSQL). It is designed to support the on demand creation of test environments in CI/CD pipelines.</li>
<li><a href="https://www.cncf.io/blog/2020/10/02/kubernetes-operators-101/">cncf.io: Kubernetes Operators 101</a></li>
<li><a href="https://blog.container-solutions.com/kubernetes-operators-explained">container-solutions.com: Kubernetes Operators Explained</a></li>
<li><a href="https://github.com/Efrat19/kubeload">kubeload - load testing</a> is a Kubernetes operator that lets you configure your load-test initial load, max load, interval and hatch-rate. You can use CRD to define all the parameters and repeat your load testing experiments.</li>
<li><a href="https://www.contentful.com/blog/2020/10/20/open-source-kube-secret-syncer/">contentful.com: Open-sourcing kube-secret-syncer: A Kubernetes operator to sync secrets from AWS Secrets Manager</a><ul>
<li><a href="https://github.com/contentful-labs/kube-secret-syncer">contentful-labs/kube-secret-syncer 🌟</a></li>
</ul>
</li>
<li><a href="https://github.com/alexellis/registry-creds">registry-creds</a> is a Kubernetes operator that can be used to propagate a single ImagePullSecret to all namespaces within your cluster. The primary reason for creating this operator is to make it easier to consume images from Docker Hub.</li>
<li><a href="https://github.com/FairwindsOps/gemini">gemini</a> is a Kubernetes CRD and operator for managing VolumeSnapshots. This allows you to back up your PersistentVolumes on a regular schedule, retire old backups, and restore backups with minimal downtime.</li>
<li><a href="https://kdo.dev/">Kdo: deployless development on Kubernetes 🌟</a> Kdo is a command line tool that enables developers to run, develop and test code changes in a realistic deployed setting without having to deal with the complexity of Kubernetes deployment and configuration.</li>
<li><a href="https://github.com/rmb938/hostport-allocator">HostPort Operator</a> is a Kubernetes Operator to allocate host ports</li>
<li><a href="https://iximiuz.com/en/posts/kubernetes-operator-pattern/">iximiuz.com: Exploring Kubernetes Operator Pattern 🌟</a></li>
<li><a href="https://github.com/isaaguilar/terraform-operator">isaaguilar/terraform-operator: Terraform Operator</a> A Kubernetes CRD and Controller to handle Terraform operations by generating k8s jobs catered to perform Terraform workflows</li>
<li><a href="https://github.com/didil/autobucket-operator">didil/autobucket-operator</a> The autobucket operator is a Kubernetes operator that automatically creates and manages Cloud Buckets (Object Storage) for k8s Deployments.</li>
<li><a href="https://www.openshift.com/blog/is-your-operator-air-gap-friendly">openshift.com: Is your Operator Air-Gap Friendly?</a></li>
<li><a href="https://github.com/Comcast/kuberhealthy">kuberhealthy 🌟</a> An operator for synthetic monitoring on Kubernetes. Write your own tests in your own container and Kuberhealthy will manage everything else. Automatically creates and sends metrics to Prometheus and InfluxDB. Included simple JSON status page. Supplements other solutions like Prometheus very nicely!</li>
<li><a href="https://github.com/metal3-io/baremetal-operator">Bare Metal Operator</a> The Bare Metal Operator implements a Kubernetes API for managing bare metal hosts. It maintains an inventory of available hosts as Custom Resource Definitions.</li>
<li><a href="https://github.com/borchero/meerkat">Meerkat</a> Meerkat is a Kubernetes Operator that facilitates the deployment of OpenVPN in a Kubernetes cluster. By leveraging Hashicorp Vault, Meerkat securely manages the underlying PKI.</li>
<li><a href="https://github.com/OT-CONTAINER-KIT/logging-operator">Logging Operator</a> A golang based CRD operator to setup and manage logging stack (Elasticsearch, Fluentd, and Kibana) in the Kubernetes cluster. It helps to setup each component of the EFK stack separately.</li>
<li><a href="https://github.com/tinyzimmer/gst-pipeline-operator">gst-pipeline-operator: A Kubernetes operator for running audio/video processing pipelines</a></li>
<li><a href="https://github.com/brennerm/uptimerobot-operator">uptimerobot-operator</a> A Kubernetes operator that creates UptimeRobot monitors for your ingresses</li>
<li><a href="https://www.velotio.com/engineering-blog/getting-started-with-kubernetes-operators-helm-based-part-1">medium.com: Getting Started With Kubernetes Operators (Helm Based) - Part 1</a><ul>
<li><a href="https://medium.com/velotio-perspectives/getting-started-with-kubernetes-operators-ansible-based-part-2-472eb0d453b7">medium.com: Getting Started With Kubernetes Operators (Ansible Based) — Part 2</a></li>
<li><a href="https://www.velotio.com/engineering-blog/getting-started-with-kubernetes-operators-golang-based-part-3">velotio.com: Getting Started With Kubernetes Operators (Golang Based) - Part 3</a></li>
</ul>
</li>
<li><a href="https://github.com/stakater/IngressMonitorController">IngressMonitorController (Deprecated)</a> A Kubernetes controller to watch ingresses and create liveness alerts for your apps/microservices in UptimeRobot, StatusCake, Pingdom, etc.</li>
<li><a href="https://github.com/FairwindsOps/rbac-manager"><mark>FairwindsOps/rbac-manager: RBAC Manager</mark> 🌟</a> A Kubernetes operator that simplifies the management of Role Bindings and Service Accounts. RBAC Manager is designed to simplify authorization in Kubernetes. This is an operator that supports declarative configuration for RBAC with new custom resources. Instead of managing role bindings or service accounts directly, you can specify a desired state and RBAC Manager will make the necessary changes to achieve that state.</li>
<li><a href="https://github.com/cloud-ark/kubeplus">KubePlus - Kubernetes Operator to deliver Helm charts as-a-service 🌟</a></li>
<li><a href="https://kubernetes.io/blog/2021/06/21/writing-a-controller-for-pod-labels/">kubernetes.io: Writing a Controller for Pod Labels</a></li>
<li><a href="https://www.kubermatic.com/blog/why-implementing-kubernetes-operators-is-a-good-idea/">kubermatic.com: Why Implementing Kubernetes Operators Is a Good Idea! 🌟</a></li>
<li><a href="https://thenewstack.io/we-pushed-helm-to-the-limit-then-built-a-kubernetes-operator/">thenewstack.io: We Pushed Helm to the Limit, then Built a Kubernetes Operator 🌟</a></li>
<li><a href="https://www.cncf.io/wp-content/uploads/2021/07/CNCF_Operator_WhitePaper.pdf">cncf.io: CNCF Operator White Paper (PDF) 🌟</a> This white paper defines Operators in a wider context than Kubernetes. It describes their characteristics and components, gives an overview of common patterns currently in use and explains how they differ from Kubernetes controllers.</li>
<li><a href="https://itnext.io/kubexpose-a-kubernetes-operator-for-fun-and-profit-f528586eee07">itnext.io: Kubexpose: A Kubernetes Operator, for fun and profit!</a> Access your Kubernetes Deployment over the Internet - <a href="https://github.com/abhirockzz/kubexpose-operator">abhirockzz/kubexpose-operator</a> Access your Kubernetes Deployment over the Internet</li>
<li><a href="https://itnext.io/kubernetes-operators-cruise-control-for-managing-cloud-native-apps-db328ef8e345">itnext.io: Kubernetes Operators: Cruise Control for Managing Cloud-Native Apps</a></li>
<li><a href="https://github.com/digitalis-io/vals-operator">digitalis-io/vals-operator</a> Kubernetes Operator to sync secrets between different secret backends and Kubernetes</li>
<li><a href="https://github.com/banzaicloud/thanos-operator">banzaicloud/thanos-operator 🌟</a> Thanos Operator is a Kubernetes operator to manage Thanos stack deployment on Kubernetes.</li>
<li><a href="https://github.com/cloud-bulldozer/benchmark-operator">cloud-bulldozer/benchmark-operator: The Chuck Norris of cloud benchmarks</a> The intent of this Operator is to deploy common workloads to establish a performance baseline of Kubernetes cluster on your provider.</li>
<li><a href="https://github.com/pravega/pravega-operator">pravega/pravega-operator</a> Pravega Kubernetes Operator. Pravega is an open source distributed storage service implementing Streams. It offers Stream as the main primitive for the foundation of reliable storage systems: a high-performance, durable, elastic, and unlimited append-only byte stream with strict ordering and consistency. The Pravega Operator manages Pravega clusters deployed to Kubernetes and automates tasks related to operating a Pravega cluster.The operator itself is built with the Operator framework.</li>
<li><a href="https://github.com/Quentin-M/etcd-cloud-operator">Quentin-M/etcd-cloud-operator</a> Deploying and managing production-grade etcd clusters on cloud providers: failure recovery, disaster recovery, backups and resizing.</li>
<li><a href="https://spring.io/blog/2021/11/19/get-to-know-a-kubernetes-operator"><mark>spring.io: Get to Know a Kubernetes Operator!</mark></a></li>
<li><a href="https://levelup.gitconnected.com/operators-extending-kubernetes-capabilities-184df001b7e"><mark>levelup.gitconnected.com: Operators : Extending Kubernetes Capabilities</mark></a> Operators are software extensions to Kubernetes that make use of custom resources to manage applications and their components. So what it means is that there are some applications whose deployment and management might require manual intervention and operators is the solution to automate it. <strong>Lets say you need to deploy a database cluster for which each pod needs to be brought in sync after deployment, or say you need to perform a security scan whenever a new component is deployed, or maybe some configuration needs to be populated based on some event. Such a functionalities are not available in Kubernetes out of the box but can be implemented using operators.</strong></li>
<li><a href="https://github.com/VictoriaMetrics/operator">VictoriaMetrics/operator</a> Kubernetes operator for Victoria Metrics</li>
<li><a href="https://blog.px.dev/k8s-operator">blog.px.dev/k8s-operator: 3 Reasons to Use Kubernetes Operators (and 2 Reasons Not To)</a></li>
<li><a href="https://practicalkubernetes.blogspot.com/2022/01/making-case-for-kubernetes-operators.html">practicalkubernetes.blogspot.com: Making the case for Kubernetes Operators</a></li>
<li><a href="https://github.com/reactive-tech/kubegres">reactive-tech/kubegres</a> Kubegres is a Kubernetes operator allowing to deploy one or many <strong>clusters of PostgreSql instances and manage databases replication, failover and backup.</strong></li>
<li><a href="https://github.com/clastix/capsule"><mark>Capsule Operator</mark></a> is a Kubernetes multi-tenant Operator. It aggregates multiple namespaces in a Tenant. Within each tenant, users are free to create their namespaces and share all the assigned resources between the namespaces of the tenant.</li>
<li><a href="https://github.com/redhat-cop/keepalived-operator"><mark>redhat-cop/keepalived-operator: Keepalived operator</mark></a> An operator to manage VIPs backed by keepalived. The objective of the keepalived operator is to allow for a way to create self-hosted load balancers in an automated way. From a user experience point of view the behavior is the same as of when creating LoadBalancer services with a cloud provider able to manage them.</li>
<li><a href="https://medium.com/@samng1991216/building-kubernetes-operator-application-from-scratch-part-1-211b6b2467df">medium.com/@samng1991216: Building Kubernetes Operator Application from Scratch (Part 1)</a></li>
<li><a href="https://github.com/redhat-cop/dynamic-rbac-operator">redhat-cop/dynamic-rbac-operator: Dynamic RBAC Operator</a> Flexible definitions of Kubernetes RBAC rules. Writing Kubernetes RBAC definitions by hand can be a pain. This operator allows you to define &ldquo;Dynamic&rdquo; RBAC rules that change based on the state of your cluster, so you can spend your time writing the RBAC patterns that you&rsquo;d like to deploy, rather than traditional, fully enumerated RBAC rules.</li>
<li><a href="https://github.com/spotify/flink-on-k8s-operator">spotify/flink-on-k8s-operator: Kubernetes Operator for Apache Flink</a> Kubernetes operator for that acts as control plane to manage the complete deployment lifecycle of Apache Flink applications. This is an open source fork of GoogleCloudPlatform/flink-on-k8s-operator with several new features and bug fixes.</li>
<li><a href="https://kube-green.dev">kube-green</a> An operator to reduce CO2 footprint of your clusters.<ul>
<li>Sleep your pods: Suspend your pods when no-one&rsquo;s using them, scale down your cluster and save energy</li>
<li>Reduce CO2 emissions: See how much you save in the Green Dashboard (coming soon)</li>
</ul>
</li>
<li><a href="https://github.com/krestomatio/keydb-operator">krestomatio/keydb-operator</a> A KeyDB (Drop-In Alternative to Redis) Operator for Kubernetes</li>
<li><a href="https://github.com/keel-hq/keel"><mark>Keel</mark> 🌟</a> <strong>Kubernetes Operator to automate Helm, DaemonSet, StatefulSet &amp; Deployment updates:</strong><ul>
<li>You can use policies to define when to update an application</li>
<li>Users can specify how many approvals do they need before a resource is updated.</li>
<li><a href="https://keel.sh">https://keel.sh</a></li>
</ul>
</li>
<li><a href="https://medium.com/@mjkool/kubernetes-operator-simplified-96b8c8f7e627">medium.com/@mjkool: Kubernetes Operator — Simplified!</a></li>
<li><a href="https://medium.com/@timebertt/kubernetes-controllers-at-scale-clients-caches-conflicts-patches-explained-aa0f7a8b4332">medium.com/@timebertt: Kubernetes Controllers at Scale: Clients, Caches, Conflicts, Patches Explained</a> A developer guideline to Kubernetes clients in go. As most development in the Kubernetes space is done in Go, available client libraries for interacting with the Kubernetes API have evolved over time to make controllers more scalable.</li>
<li><a href="https://github.com/openshift/machine-api-operator">openshift/machine-api-operator</a> The Machine API Operator manages the lifecycle of specific purpose CRDs, controllers and RBAC objects that extend the Kubernetes API. This allows to convey desired state of machines in a cluster in a declarative fashion</li>
<li><a href="https://github.com/rancher/system-upgrade-controller">rancher/system-upgrade-controller: System Upgrade Controller</a> This project aims to provide a general-purpose, Kubernetes-native upgrade controller (for nodes). It introduces a new CRD, the Plan, for defining any and all of your upgrade policies/requirements. A Plan is an outstanding intent to mutate nodes in your cluster.</li>
<li><a href="https://alenkacz.medium.com/kubernetes-operator-best-practices-implementing-observedgeneration-250728868792">alenkacz.medium.com: Kubernetes operator best practices: Implementing observedGeneration</a> There&rsquo;s a lot of hidden knowledge in core controllers and api conventions doc that is not followed by many controllers in the wild. One of these patterns is observedGeneration. In this article, you will learn what problems it can help solve.</li>
<li><a href="https://github.com/ckotzbauer/vulnerability-operator">ckotzbauer/vulnerability-operator</a> Scans SBOMs for vulnerabilities. This operator scans all SBOMs from a git-repository for vulnerabilities using Grype. The result-list can be emitted as JSON-file served via an endpoint and/or as Prometheus metrics. There may be more targets in the future. The scans are done periodically.</li>
<li><a href="https://github.com/Michaelpalacce/SimpleSecrets">Michaelpalacce/SimpleSecrets</a> K8S Secrets Manager Operator. SimpleSecrets is a secure operator that allows you to create secrets on demand. You can commit the SimpleSecrets, which are references to a database secret, and the operator will create Kubernetes Secrets automatically for you.</li>
<li><a href="https://www.learnsteps.com/advanced-kubernetes-what-exactly-are-kubernetes-operators/">learnsteps.com: Advance Kubernetes: What exactly are Kubernetes Operators?</a> Kubernetes has gained a lot of traction recently and is one of the standards followed across organizations when it comes to running and managing their containerized workloads. In this article, we are going to talk about Kubernetes operators.</li>
<li><a href="https://betterprogramming.pub/build-a-kubernetes-operator-in-10-minutes-11eec1492d30">betterprogramming.pub: Build a Kubernetes Operator in 10 Minutes 🌟</a></li>
<li><a href="https://alain-airom.medium.com/kubernetes-operators-patterns-and-best-practices-b7fbaa4cbd1">alain-airom.medium.com: Kubernetes Operators Patterns and Best Practices 🌟</a> Using operators to manage the lifecycle of multi-cloud, Kubernetes-based applications.</li>
<li><a href="https://github.com/OT-CONTAINER-KIT/mongodb-operator">OT-CONTAINER-KIT/mongodb-operator: MongoDB Operator</a> MongoDB Operator is an operator created in Golang to create, update, and manage MongoDB standalone, replicated, and arbiter replicated setup on Kubernetes and Openshift clusters.</li>
<li><a href="https://github.com/prosimcorp/reforma">prosimcorp/reforma</a> Reforma is a Kubernetes operator to patch resources with information from other resources. It is intended to use with GitOps and lets you do things such as creating annotation on a Service Account from metadata stored in a ConfigMap.</li>
<li><a href="https://github.com/weaveworks/tf-controller">weaveworks/tf-controller: Weave GitOps Terraform Controller</a> A GitOps Terraform controller for Kubernetes. Weave TF-controller is a controller for Flux to reconcile Terraform resources in the GitOps way.</li>
<li><a href="https://awstip.com/manage-aws-services-directly-from-kubernetes-%EF%B8%8F-6c94e376febb">awstip.com: Manage AWS services directly from Kubernetes - AWS Controllers for Kubernetes (ACK)</a> The AWS team released the ACK project, which allows users to create AWS services from within a Kubernetes cluster. In this tutorial, you will learn how to create an S3 bucket with a &ldquo;Bucket&rdquo; CRD.</li>
<li><a href="https://github.com/vitobotta/velero-notifications">vitobotta/velero-notifications</a> Velero-notifications is a simple Kubernetes controller written in Ruby that sends email/Slack/webhook notifications when backups or restores are performed by Velero in a Kubernetes cluster.</li>
<li><a href="https://github.com/NVIDIA/gpu-operator">NVIDIA/gpu-operator</a> NVIDIA GPU Operator creates/configures/manages GPUs atop Kubernetes. The NVIDIA GPU is a Kubernetes operator that automates the management of all NVIDIA software components needed to provision GPUs. These components include drivers, the Kubernetes device plugin, the NVIDIA Container Runtime, etc.<ul>
<li><a href="https://github.com/NVIDIA/k8s-device-plugin">NVIDIA/k8s-device-plugin: NVIDIA device plugin for Kubernetes</a> The NVIDIA device plugin for Kubernetes is a Daemonset that allows you to automatically:<ul>
<li>Expose the number of GPUs on each node of your cluster</li>
<li>Keep track of the health of your GPUs</li>
<li>Run GPU enabled containers in your Kubernetes cluster</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://medium.com/@marom.itamar/kubernetes-controllers-custom-resources-and-operators-explained-8e92f46829f6">medium.com/@marom.itamar: Kubernetes Controllers, Custom Resources, and Operators Explained</a></li>
<li><a href="https://github.com/glebiller/dynamic-configuration-operator">glebiller/dynamic-configuration-operator: Dynamic Configuration Operator</a> Dynamic Configuration Operator is an operator that updates a deployment when a ConfigMap or Secret is updated. Useful for apps that:<ul>
<li>Don&rsquo;t have a live-reload feature</li>
<li>Use <code>subPath</code> while mounting a ConfigMap or Secret</li>
<li>Use Projected Volumes</li>
</ul>
</li>
<li><a href="https://faun.pub/a-definitive-guide-to-kubernetes-operator-the-crawl-7647b278c28b"><mark>faun.pub: A Definitive guide to Kubernetes Operator — The crawl!</mark></a></li>
<li><a href="https://github.com/furiko-io/furiko">github.com/furiko-io/furiko</a> Cloud-native, enterprise-level cron job platform for Kubernetes. Furiko is a Kubernetes-native operator for managing, scheduling and executing scheduled and ad-hoc jobs and workflows. It aims to be a general-purpose job platform that supports various use cases, including cron jobs, batch processing, etc.</li>
<li><a href="https://paul-the-kelly.medium.com/extending-the-kubernetes-api-using-operators-9ffc8364ae5c">paul-the-kelly.medium.com: Extending the Kubernetes API using Operators</a> This article is aimed at developers already familiar with Kubernetes, and who are interested in extending the capabilities of a Kubernetes cluster. The extensible Kubernetes API enables administrators to add new facilities to a cluster, simplifying the deployment and management of complex applications. This article will give you a starting point to explore building your own operators.</li>
<li><a href="https://github.com/DevOps-Nirvana/Kubernetes-Volume-Autoscaler">github.com/DevOps-Nirvana: Kubernetes Volume / Disk Autoscaler (via Prometheus)</a><ul>
<li>This repository contains a Kubernetes controller that automatically increases the size of a Persistent Volume Claim in Kubernetes when it is nearing full. Initially engineered based on AWS EKS, this should support any Kubernetes cluster or cloud provider which supports dynamically hot-resizing storage volumes in Kubernetes.</li>
<li>Keeping your volumes at a minimal size can help reduce cost, but having to manually scale them up can be painful and a waste of time for an DevOps / Systems Administrator. This is often used on storage volumes against things in Kubernetes such as Prometheus, MySQL, Redis, RabbitMQ, or any other stateful service.</li>
</ul>
</li>
<li><a href="https://github.com/borchero/switchboard">borchero/switchboard: Switchboard</a> Kubernetes Operator for Automatically Issuing DNS Records and TLS Certificates for Traefik Ingress Routes.</li>
<li><a href="https://github.com/scylladb/scylla-operator">scylladb/scylla-operator</a> Scylla Operator is a Kubernetes Operator for managing and automating tasks related to managing Scylla clusters</li>
<li><a href="https://faun.pub/kubernetes-controllers-custom-resources-and-operators-explained-8e92f46829f6"><mark>faun.pub: Kubernetes Controllers, Custom Resources, and Operators Explained</mark></a><ul>
<li>This article will dive deep into one of Kubernetes core concepts — Controllers, Kubernetes API, CRDs, and Operators.</li>
<li>This 4-part series covers:<ul>
<li>Kubernetes controllers, Custom Resources, and operators</li>
<li>Building Kubernetes operators</li>
<li>Testing Kubebuilder operators</li>
<li>Deploying Kubebuilder operators to Kubernetes</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/coderanger/migrations-operator">coderanger/migrations-operator: Migrations-Operator</a> A Kubernetes operator to manage database migrations or similar application setup tasks.</li>
<li><a href="https://omerxx.com/k8s-controllers/">omerxx.com: 10 Things I wish Id known before building a Kubernetes CRD controller</a> Controllers, operators, informers and other K8s mysteries. This article discusses a few of the gotchas of developing Kubernetes controllers:<ul>
<li>CRDs don&rsquo;t create metadata by default</li>
<li>Interacting with CRDs outside the controller&rsquo;s context is not straightforward</li>
<li>&ldquo;The DefaultUnstructuredConverter&rdquo;</li>
</ul>
</li>
<li><a href="https://github.com/mittwald/kubernetes-secret-generator">github.com/mittwald/kubernetes-secret-generator 🌟</a> Kubernetes controller for automatically generating and updating secrets. This repository contains a custom Kubernetes controller that can automatically create random secret values. This may be used for auto-generating random credentials for applications running on Kubernetes</li>
<li><a href="https://github.com/ContainerSolutions/delayed-jobs-operator">github.com/ContainerSolutions/delayed-jobs-operator</a> The Delayed Job Operator lets delay the start of a Kubernetes job until after a UNIX timestamp</li>
<li><a href="https://github.com/actions/actions-runner-controller">github.com/actions/actions-runner-controller 🌟</a> Actions Runner Controller (ARC) is a Kubernetes controller for GitHub Actions self-hosted runners. With ARC, you can:<ul>
<li>Deploy self-hosted runners on Kubernetes clusters with a simple set of commands</li>
<li>Auto scale runners based on demand</li>
</ul>
</li>
<li><a href="https://medium.com/sda-se/kubernetes-operator-to-the-rescue-how-our-own-mongodb-operator-improved-our-deployments-6d5ba3324abc">medium.com/sda-se: Kubernetes Operator to the rescue. How our own MongoDB Operator improved our deployments</a> In this article you will learn about the challenges that the team at SDA SE faced when using a GitOps deployment and why they implemented their own Kubernetes Operator for MongoDB to speed up our deployments and reduce mistakes.</li>
<li><a href="https://blog.frankel.ch/kubernetes-extensibility/"><mark>blog.frankel.ch: Introduction to Kubernetes extensibility</mark> 🌟</a> In this article, you&rsquo;ll learn several extension points in Kubernetes: the data model, admission controllers, and client-side.<ul>
<li>At its most basic level, Kubernetes is just a platform able to run container images. It stores its configuration in a distributed storage engine, etcd. The most significant part of this configuration is dedicated to the desired state for objects. For example, you only update this state when you schedule a pod using the kubectl command line.</li>
<li>Other components, called controllers, watch configuration changes and read the desired state. Then, they try to reconcile the desired state with the actual state. Its nothing revolutionary: Puppet is based on the same control-loop approach, and AFAIK, Chef. Generally, a controller manages a single type of object, e.g., the DeploymentController manages deployments.</li>
</ul>
</li>
<li><a href="https://superorbital.io/blog/testing-production-controllers/">superorbital.io: Testing Production Kubernetes Controllers</a> In this article, you will learn how to test Kubernetes controllers using a mix of unit tests, local integration tests, and more fully featured runtime integration tests.</li>
<li><a href="https://github.com/lukaszraczylo/jobs-manager-operator">github.com/lukaszraczylo/jobs-manager-operator 🌟</a><ul>
<li><a href="https://itnext.io/kubernetes-operator-to-manage-jobs-7ee96744c74a">itnext.io: Simplify Advanced Workflows in Kubernetes with Jobs Manager Operator</a> A problem and idea led to the latest invention, which saved me hours of confusion and frustration and finally untangled the web of dependencies.</li>
</ul>
</li>
<li><a href="https://github.com/ricoberger/vault-secrets-operator">github.com/ricoberger/vault-secrets-operator</a> Create Kubernetes secrets from Vault for a secure GitOps based workflow.</li>
<li><a href="https://github.com/ElementTech/kube-reqsizer">github.com/ElementTech/kube-reqsizer</a> kube-reqsizer is a kubernetes controller that measures the usage of pods over time and optimizes their requests based on the average usage. The controller calculates the requirements based on all the samples taken in the same deployment controller.</li>
<li><a href="https://kube-green.dev"><mark>kube-green.dev</mark></a> An operator to reduce CO2 footprint of your clusters. Suspend your pods when no-one&rsquo;s using them, scale down your cluster and save energy</li>
<li><a href="https://betterprogramming.pub/how-to-use-server-side-apply-in-k8s-operators-5cbff023183c">betterprogramming.pub: How To Use Server-Side Apply in K8S Operators</a> Explore the benefits of SSA vs. CSA. Server-side apply (SSA) is an excellent mechanism to improve Kubernetes operators&rsquo; performance and is becoming the default way to apply resources in a cluster.</li>
<li><a href="https://github.com/sieve-project/sieve">github.com/sieve-project/sieve</a> Automated Reliability Testing for Kubernetes Controllers/Operators. Sieve is a tool to help developers test their Kubernetes controllers by deterministically injecting faults and detecting dormant bugs at development time.</li>
<li><a href="https://betterprogramming.pub/goldilocks-vs-krr-c986dfd7484d">betterprogramming.pub: Goldilocks vs. KRR</a> The resources recommendation showdown!. Goldilocks is a Kubernetes operator written in Go, and it watches over a few custom resources to give out its Updates or Recommendations.</li>
<li><a href="https://medium.com/lonto-digital-services-integrator/why-we-developed-own-kubernetes-controller-to-copy-secrets-e46368ae6db9">medium.com/lonto-digital-services-integrator: Why We Developed Own Kubernetes Controller to Copy Secrets</a> In this article, you will learn the thought process, design decision and code that led to writing a custom controller to copy secrets from Hashicorp Vault to Kubernetes</li>
<li><a href="https://thenewstack.io/hashicorp-vault-operator-manages-kubernetes-secrets/">thenewstack.io: HashiCorp Vault Operator Manages Kubernetes Secrets</a> HashiCorp&rsquo;s new open source project, released alongside Vault 1.13 and now available in beta, makes it easier to use Vault with Kubernetes Secrets, automating tasks that were previously manual.</li>
<li><a href="https://medium.com/@senjutide2000/designing-a-controller-for-custom-resources-from-scratch-for-absolute-beginners-9cb84b7f906f">medium.com/@senjutide2000: Designing a Controller for Custom Resources from scratch for absolute beginners</a> In this tutorial (and related repository and follow-up article), you will learn how to create your first Custom Resource Definition, Custom Resource and get a basic idea of the workflow of a controller</li>
<li><a href="https://github.com/2-alchemists/krossboard-kubernetes-operator">github.com/2-alchemists/krossboard-kubernetes-operator</a> Kubernetes Operator to handle cross-site, cross-distribution &amp; multi-Kubernetes usage tracking, analytics and accounting (vanilla Kubernetes, OpenShift, EKS, AKS, GKE and other distros).<ul>
<li>Krossboard is a multi-cluster and cross-distribution Kubernetes usage accounting and analytics software</li>
<li>Each instance of Krossboard enables tracking the usage of a set of Kubernetes clusters listed in a kubeconfig secret</li>
</ul>
</li>
<li><a href="https://medium.com/@mikakrief/using-azure-service-operator-v2-4a1fa1f5e3b8">medium.com/@mikakrief: Using Azure Service Operator v2</a> Azure Service Operator v2 is a Kubernetes operator that enables you to manage Azure resources directly through Kubernetes tooling. Its designed to simplify the deployment and management of Azure services, allowing developers to use familiar Kubernetes commands (like kubectl apply) to handle Azure resources.</li>
<li><a href="https://github.com/gianlucam76/k8s-cleaner">github.com/gianlucam76/k8s-cleaner 🌟</a> <strong>K8s cleaner is a controller that identifies, removes, or updates stale/orphaned or unhealthy resources to maintain a clean and efficient Kubernetes cluster</strong></li>
<li><a href="https://dragondscv.medium.com/controller-runtime-handle-resource-deletion-with-predicate-f69d09dd5802">dragondscv.medium.com: Controller runtime — handle resource deletion with predicate</a></li>
<li><a href="https://github.com/NCCloud/mayfly">github.com/NCCloud/mayfly: Ephemeral Kubernetes Resources 🌟</a> An operator to manage ephemeral Kubernetes resources</li>
<li><a href="https://itnext.io/5-advanced-kubernetes-operators-every-devops-engineer-should-know-about-ab46bdc1c7d5"><mark>itnext.io: 5 Advanced Kubernetes Operators Every DevOps Engineer Should Know About</mark> 🌟</a> <strong>Simplify Infrastructure Management</strong></li>
</ul>
<h2 id="opentelemetry-operator">OpenTelemetry Operator</h2>
<ul>
<li>
<p><a href="https://github.com/argoproj/argo-cd/pull/26601">feat(ui): Add AppSet to Application Resource Tree in Argo CD</a> - <em>(Related to argo topic)</em></p>
</li>
<li>
<p><a href="https://github.com/open-telemetry/opentelemetry-operator">github.com/open-telemetry/opentelemetry-operator</a></p>
</li>
<li><a href="https://medium.com/@magstherdev/opentelemetry-operator-d3d407354cbf">medium.com/@magstherdev: OpenTelemetry Operator</a> This post aims to demonstrate how you can implement traces in your application without any code changes by using the OpenTelemetry Operator.</li>
</ul>
<h2 id="creating-kubernetes-operator-using-kubebuilder">Creating Kubernetes operator using Kubebuilder</h2>
<ul>
<li><a href="https://github.com/kubernetes-sigs/kubebuilder">kubernetes-sigs/kubebuilder</a> Kubebuilder - SDK for building Kubernetes APIs using CRDs. Kubebuilder is a framework for building Kubernetes APIs using custom resource definitions (CRDs). Kubebuilder increases velocity and reduces the complexity managed by developers for rapidly building and publishing Kubernetes APIs in Go.<ul>
<li><a href="https://book.kubebuilder.io">https://book.kubebuilder.io</a></li>
</ul>
</li>
<li><a href="https://medium.com/@adnn.selimovic/creating-kubernetes-operator-using-kubebuilder-15db5f29ee50">medium.com/@adnn.selimovic: Creating Kubernetes operator using <strong>Kubebuilder</strong></a></li>
<li><a href="https://medium.com/geekculture/a-new-pattern-that-simplifies-operator-building-39df5d021cfa">medium.com/geekculture: A New Pattern that Simplifies Operator Building</a> Build Kubernetes Operator with <strong>Kubebuilder</strong> and declarative pattern. kubebuilder-declarative-pattern provides a set of tools for building cluster operators with kubebuilder. Declarative operators provide a fast path to orchestrating deployments instead of reinventing the wheel i.e. &ldquo;how do I get/update this YAML?&rdquo;</li>
<li>
<p><a href="https://qdnqn.com/creating-kubernetes-operator-using-kubebuilder/">qdnqn.com: Creating Kubernetes operator using Kubebuilder</a></p>
<ul>
<li>
<p>Kubernetes is the current de facto standard for the deployment and running of applications that are suitable for modern cloud platforms. A declarative way of defining infrastructure state using YAML allows a super easy definition of the scheme for the deployment of the application. Deploying stateless applications is not a big deal. On the other hand — deploying distributed stateful applications, configuring, and operating them is a challenging task.</p>
</li>
<li>
<p>Kubernetes addressed this issue by allowing developers to extend it, using the Kubernetes operator. The operator reacts to the custom resource and reconciliate the state in the cluster with the state defined in the custom resource, by implementing logic embedded in the operator itself.</p>
</li>
<li>
<p>When designing/writing an application, intended to run on the Kubernetes, one should take into account capabilities provided by Kubernetes and take that information when designing software architecture. It can speed up implementation, make an application more reliable and the code can focus more on business logic itself.</p>
</li>
<li>
<p>There are multiple ways to create an operator. You could write one from scratch using Kubernetes client-go. Its a tedious task and the learning curve is steep. As an alternative, multiple tools provide boilerplate code and speed up the writing of operators. Popular ones are Operatorsdk and Kubebuilder. The focus of the article will be on creating an operator using Kubebuilder. Lets create an operator which will create a pod running a simple HTTP API and bind some data to the HTTP API.</p>
</li>
<li><a href="https://dev.to/thenjdevopsguy/what-is-a-kubernetes-operator-53kb">dev.to/thenjdevopsguy: What Is A Kubernetes Operator?</a></li>
</ul>
</li>
</ul>
<h2 id="operatorhubio">operatorhub.io</h2>
<ul>
<li><a href="https://operatorhub.io/">operatorhub.io</a> OperatorHub.io is a new home for the Kubernetes community to share Operators. Find an existing Operator or list your own today.</li>
</ul>
<h2 id="red-hat-container-community-of-practice-operators">Red Hat Container Community of Practice Operators</h2>
<ul>
<li><a href="https://cloud.redhat.com/blog/red-hat-container-community-of-practice-operators"><mark>cloud.redhat.com: Red Hat Container Community of Practice Operators</mark></a> In this post, you will find a summary of the operators maintained by Red Hat and how they can be used to facilitate the adoption of OpenShift.</li>
</ul>
<h2 id="operator-capability-levels">Operator Capability Levels</h2>
<ul>
<li><a href="https://operatorframework.io/operator-capabilities/">Operator Capability Levels</a> Operators come in different maturity levels in regards to their lifecycle management capabilities for the application or workload they deliver. The capability models aims to provide guidance in terminology to express what features users can expect from an Operator.</li>
</ul>
<h2 id="cluster-addons">Cluster Addons</h2>
<ul>
<li><a href="https://github.com/kubernetes-sigs/gateway-api">Kubernetes Gateway API</a> - <em>(Related to kubernetes-networking topic)</em></li>
<li><a href="https://github.com/kubernetes-sigs/ingate">InGate: Ingress &amp; Gateway API Controller (Archived)</a> - <em>(Related to kubernetes-networking topic)</em></li>
<li><a href="https://blog.cloudtrooper.net/2025/02/28/application-gateway-for-containers-a-not-so-gentle-intro-1/">Introduction to Azure Application Gateway for Containers (AGC)</a> - <em>(Related to azure topic)</em></li>
<li>
<p><a href="https://techcommunity.microsoft.com/blog/azureforisvandstartupstechnicalblog/four-methods-to-access-azure-key-vault-from-azure-kubernetes-service-aks/4376662">Four Methods to Access Azure Key Vault from Azure Kubernetes Service (AKS)</a> - <em>(Related to kubernetes-security topic)</em></p>
</li>
<li>
<p><a href="https://github.com/kubernetes-sigs/cluster-addons">Cluster Addons 🌟</a> With cluster addon operators, we are exploring a kubernetes-native way of managing addons using CRDs(Custom Resource Definitions) and controllers where the controllers encode how best to manage the addon. Installing and managing an addon could be as simple as creating a custom resource.</p>
</li>
</ul>
<h2 id="k8spin-operator-kubernetes-multi-tenant-operator">K8Spin Operator. Kubernetes multi-tenant operator</h2>
<ul>
<li><a href="https://github.com/k8spin/k8spin-operator">K8Spin Operator 🌟</a> Kubernetes multi-tenant operator. Enables multi-tenant capabilities in your Kubernetes Cluster. <a href="https://github.com/k8spin/k8spin-operator/projects/1">We defined some small features to implement</a>. If you know python &amp; Kubernetes and want to contribute to this project, ping us!</li>
<li><a href="https://thenewstack.io/k8spin-provides-multitenant-isolation-for-kubernetes/">thenewstack.io: K8Spin Provides Multitenant Isolation for Kubernetes</a></li>
<li><a href="https://k8spin.cloud/oss-projects/">Discover K8Spin open source software</a></li>
</ul>
<h2 id="k8s-kpis-with-kuberhealthy-operator">K8s KPIs with Kuberhealthy Operator</h2>
<ul>
<li><a href="https://kubernetes.io/blog/2020/05/29/k8s-kpis-with-kuberhealthy/">K8s KPIs with Kuberhealthy 🌟</a> transforming Kuberhealthy into a Kubernetes operator for synthetic monitoring. This new ability granted developers the means to create their own Kuberhealthy check containers to synthetically monitor their applications and clusters. Additionally, we created a guide on how to easily install and use Kuberhealthy in order to capture some helpful synthetic <a href="https://kpi.org/KPI-Basics">KPIs</a>.</li>
</ul>
<h2 id="writing-kubernetes-operators-and-controllers">Writing Kubernetes Operators and Controllers</h2>
<ul>
<li><a href="https://github.com/kubernetes-sigs/kueue/releases/tag/v0.14.0">Kueue Release v0.14.0</a> - This is a release note for Kueue, an open-source Kubernetes project designed for workload management and scheduling. Version v0.14.0 includes changes such as the removal of deprecated annotations related to ProvisioningRequest, which is important for users upgrading from previous versions. It also highlights the necessity for ProvisioningRequest reconcilers to be updated to avoid issues.</li>
<li><a href="https://masterpoint.io/blog/ai-meets-tf-prompt-strategies-for-test-generation/">AI Meets Terraform: Prompt Strategies for Test Generation</a> - <em>(Related to ai topic)</em></li>
<li><a href="https://livingdevops.com/devops/10-real-world-kubernetes-troubleshooting-scenarios-and-solutions/">10 Real-World Kubernetes Troubleshooting Scenarios and Solutions</a> - <em>(Related to kubernetes-troubleshooting topic)</em></li>
<li>
<p><a href="https://www.packetcoders.io/the-beginners-guide-to-the-ansible-inventory/">The Beginners Guide to the Ansible Inventory</a> - <em>(Related to ansible topic)</em></p>
</li>
<li>
<p><a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/">Kubernetes.io: Operator pattern</a></p>
</li>
<li><a href="https://opensource.com/article/20/3/kubernetes-operator-sdk">opensource.com: Build a Kubernetes Operator in 10 minutes with Operator SDK</a></li>
<li><a href="https://itnext.io/testing-the-operator-sdk-and-making-a-prefetch-mechanism-for-kubernetes-7508577efdd7">itnext.io: Testing the Operator SDK and making a prefetch mechanism for Kubernetes</a></li>
<li><a href="https://www.magalix.com/blog/creating-custom-kubernetes-operators">magalix.com: Creating Custom Kubernetes Operators</a></li>
<li><a href="https://medium.com/faun/writing-your-first-kubernetes-operator-8f3df4453234">medium.com: Writing Your First Kubernetes Operator</a></li>
<li><a href="https://www.bmc.com/blogs/kubernetes-operator/">bmc.com: What Is a Kubernetes Operator?</a></li>
<li><a href="https://developers.redhat.com/cheat-sheets/writing-kubernetes-operator-java/">Writing a Kubernetes Operator in Java Cheat Sheet</a></li>
<li><a href="https://linuxera.org/writing-operators-using-operator-framework/">linuxera.org: Writing Operators using the Operator Framework SDK</a></li>
<li><a href="https://www.openshift.com/blog/7-best-practices-for-writing-kubernetes-operators-an-sre-perspective">openshift.com: 7 Best Practices for Writing Kubernetes Operators: An SRE Perspective</a></li>
<li><a href="https://medium.com/@victorpaulo/from-zero-to-kubernetes-operator-dd06436b9d89">medium: From Zero to Kubernetes Operator</a> In this post you will learn how to build a simple Kubernetes Operator. The article starts with the main concepts and then continues with hands-on labs where you will create a Kubernetes Operator from the ground up.</li>
<li><a href="https://www.openshift.com/blog/build-your-kubernetes-operator-with-the-right-tool">openshift.com: Build Your Kubernetes Operator With the Right Tool 🌟</a> <strong>Go-based operators are by far the most popular. That is why Go is probably the first option to consider.</strong> The other good choice is Helm, especially if you already have a Helm chart for your software or you want to build your operator quickly and you don&rsquo;t need any complex <a href="https://operatorframework.io/operator-capabilities/">capability levels</a>. I&rsquo;d leave Operator Frameworks or Bare Programming Language implementations only for the cases when keeping a single programming language in your organization is a priority.</li>
<li><a href="https://www.rookout.com/blog/lessons-learned-when-building-a-kubernetes-operator">rookout.com: Lessons Learned When Building A Kubernetes Operator</a></li>
<li><a href="https://brennerm.github.io/posts/k8s-operators-with-python-part-1.html">brennerm.github.io: Kubernetes operators with Python #1: Creating CRDs</a></li>
<li><a href="https://vivilearns2code.github.io/k8s/2021/03/11/writing-controllers-for-kubernetes-custom-resources.html">vivilearns2code.github.io: Writing Controllers For Kubernetes Resources</a></li>
<li><a href="https://cloudark.medium.com/kubernetes-custom-controllers-b6c7d0668fdf">cloudark.medium.com: Writing Kubernetes Custom Controllers</a></li>
<li><a href="https://developers.redhat.com/articles/2021/08/04/managing-stateful-applications-kubernetes-operators-golang">developers.redhat.com: Managing stateful applications with Kubernetes Operators in Golang 🌟</a> Explore this pattern by creating a Kubernetes Operator in Golang to keep a WordPress site up to date.</li>
<li><a href="https://medium.com/xgeeks/kubernetes-dummy-operator-in-java-6b2f26198a55">medium: Kubernetes Dummy Operator in Java</a> - <a href="https://www.youtube.com/watch?v=C0E93Uc4h5k&amp;t=761s&amp;ab_channel=xgeeks">youtube: Creating a Kubernetes Operator in Java by Rudy De Busscher</a></li>
<li><a href="https://betterprogramming.pub/building-a-highly-available-kubernetes-operator-using-golang-fe4a44c395c2">betterprogramming.pub: Build a Highly Available Kubernetes Operator Using Golang</a> Develop a simple Kubernetes operator from scratch. In this article, you will build a &ldquo;hello world” operator using the client-go library, make adaptations to it to achieve high availability, and deploy it to a Kubernetes cluster using Helm.</li>
<li><a href="https://github.com/kubernetes/sample-controller"><mark>kubernetes/sample-controller</mark></a> Repository for sample controller. Complements sample-apiserver</li>
<li><a href="https://betterprogramming.pub/writing-custom-kubernetes-controller-and-webhooks-141230820e9">betterprogramming.pub: Writing Custom Kubernetes Controller and Webhooks</a> Create a Kubernetes API, controller, validate webhooks, and test.</li>
<li><a href="https://betterprogramming.pub/write-tests-for-your-kubernetes-operator-d3d6a9530840">betterprogramming.pub: How To Write Tests for Your Kubernetes Operator</a></li>
<li><a href="https://metalbear.co/blog/writing-a-kubernetes-operator/">metalbear.co: Writing a Kubernetes Operator</a></li>
<li><a href="https://dev.to/hkhelil/building-a-kubernetes-operator-with-an-nginx-crd-3lil">dev.to/hkhelil: Building a Kubernetes Operator with an NGINX CRD</a></li>
</ul>
<h2 id="tweets">Tweets</h2>
<details>
<summary>Click to expand!</summary>
<center markdown="1">
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Generic automation tools like Helm are limited by the interfaces exposed to them, and often lack enough context to make the right state machine transitions.<br><br>Ideally, software evolves to expose better automation hooks, then custom tools, aka operators, can leverage them. <a href="https://t.co/v38aj4ukn4">https://t.co/v38aj4ukn4</a></p>&mdash; Kelsey Hightower (@kelseyhightower) <a href="https://twitter.com/kelseyhightower/status/1435637052079427584?ref_src=twsrc%5Etfw">September 8, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</center>
</details>
<h2 id="videos">Videos</h2>
<details class="note">
<summary>Click to expand!</summary>
<center markdown="1">
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/ha3LjlD6g7g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
</center>
</details>
<ul>
<li><a href="https://www.cloudnativedeepdive.com/sharing-a-nvidia-gpu-between-pods-in-kubernetes/">Sharing a NVIDIA GPU Between Pods in Kubernetes</a> - <em>(Related to kubernetes-tools topic)</em></li>
</ul>
<form class="md-feedback" name="feedback" hidden>
<fieldset>
<legend class="md-feedback__title">
Was this page helpful?
</legend>
<div class="md-feedback__inner">
<div class="md-feedback__list">
<button class="md-feedback__icon md-icon" type="submit" title="This page was helpful" data-md-value="1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 12a8 8 0 0 0-8-8 8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M10 9.5c0 .8-.7 1.5-1.5 1.5S7 10.3 7 9.5 7.7 8 8.5 8s1.5.7 1.5 1.5m7 0c0 .8-.7 1.5-1.5 1.5S14 10.3 14 9.5 14.7 8 15.5 8s1.5.7 1.5 1.5m-5 7.73c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81"/></svg>
</button>
<button class="md-feedback__icon md-icon" type="submit" title="This page could be improved" data-md-value="0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 12a8 8 0 0 0-8-8 8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10m-6.5-4c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5M10 9.5c0 .8-.7 1.5-1.5 1.5S7 10.3 7 9.5 7.7 8 8.5 8s1.5.7 1.5 1.5m2 4.5c1.75 0 3.29.72 4.19 1.81l-1.42 1.42C14.32 16.5 13.25 16 12 16s-2.32.5-2.77 1.23l-1.42-1.42C8.71 14.72 10.25 14 12 14"/></svg>
</button>
</div>
<div class="md-feedback__note">
<div data-md-value="1" hidden>
Thanks for your feedback!
</div>
<div data-md-value="0" hidden>
Thanks for your feedback! Help us improve this page by using our <a href="..." target=_blank>feedback form</a>.
</div>
</div>
</div>
</fieldset>
</form>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
2026 <a href="https://twitter.com/nubenetes">Nubenetes</a>, <a href="https://nubenetes.com/about/">about</a>.
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://www.youtube.com/channel/UCnrc0CFnNJSG2Kt4Ohdr3UA/playlists?view=1" target="_blank" rel="noopener" title="www.youtube.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M549.7 124.1c-6.2-23.7-24.8-42.3-48.3-48.6C458.9 64 288.1 64 288.1 64S117.3 64 74.7 75.5c-23.5 6.3-42 24.9-48.3 48.6C15 167 15 256.4 15 256.4s0 89.4 11.4 132.3c6.3 23.6 24.8 41.5 48.3 47.8C117.3 448 288.1 448 288.1 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zM232.2 337.6V175.2l142.7 81.2z"/></svg>
</a>
<a href="https://twitter.com/nubenetes" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
</a>
<a href="https://github.com/nubenetes" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M202.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1M496 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2m-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3m-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1"/></svg>
</a>
<a href="https://speakerdeck.com/nubenetes/stars" target="_blank" rel="noopener" title="speakerdeck.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M213.9 296H100c-26.5 0-52-10.5-70.7-29.3S0 222.5 0 196s10.5-52 29.3-70.7S73.5 96 100 96h132.8c10.6 0 20.8 4.2 28.3 11.7s11.7 17.7 11.7 28.3-4.2 20.8-11.7 28.3-17.7 11.7-28.3 11.7H98c-26.5 0-26.4 40 0 40h113.8c26.5 0 52 10.5 70.7 29.3s29.3 44.2 29.3 70.7-10.5 52-29.3 70.7-44.2 29.3-70.7 29.3H40c-10.6 0-20.8-4.2-28.3-11.7S0 386.6 0 376s4.2-20.8 11.7-28.3S29.4 336 40 336h173.9c26.5 0 26.5-40 0-40M298 416c13.5-9.2 25-21 33.8-34.7s14.7-29.2 17.3-45.3h64.6c2.6 0 5.2-.6 7.6-1.6s4.6-2.5 6.4-4.4 3.3-4.1 4.2-6.5 1.5-5 1.4-7.6v-120c0-2.6-.5-5.2-1.4-7.6s-2.4-4.6-4.2-6.5-4-3.3-6.4-4.4-5-1.6-7.6-1.6H296.5c9.7-11.1 15-25.3 15-40s-5.3-28.9-15-40h136.9c43.4 0 78.6 35.8 78.6 80v160c0 44.2-35.2 80-78.6 80z"/></svg>
</a>
<a href="https://www.slideshare.net/nubenetes/favorites" target="_blank" rel="noopener" title="www.slideshare.net" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M187.9 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7m143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7m156.6 90-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.8c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72-56.3 191.7 137.4 222.3 134.3 124.1 0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8m-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z"/></svg>
</a>
<a href="https://twitter.com/redhatspain" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
</a>
<a href="https://www.linkedin.com/groups/1937212/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zM102.2 96a38.5 38.5 0 1 1 0 77 38.5 38.5 0 1 1 0-77m282.1 320h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<div class="md-consent" data-md-component="consent" id="__consent" hidden>
<div class="md-consent__overlay"></div>
<aside class="md-consent__inner">
<form class="md-consent__form md-grid md-typeset" name="consent">
<h4>Cookie consent</h4>
<p>We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better.</p>
<input class="md-toggle" type="checkbox" id="__settings" >
<div class="md-consent__settings">
<ul class="task-list">
<li class="task-list-item">
<label class="task-list-control">
<input type="checkbox" name="analytics" checked>
<span class="task-list-indicator"></span>
Google Analytics
</label>
</li>
<li class="task-list-item">
<label class="task-list-control">
<input type="checkbox" name="github" checked>
<span class="task-list-indicator"></span>
GitHub
</label>
</li>
</ul>
</div>
<div class="md-consent__controls">
<button class="md-button md-button--primary">Accept</button>
<label class="md-button" for="__settings">Manage settings</label>
</div>
</form>
</aside>
</div>
<script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout((function(){document.querySelector("[data-md-component=consent]").hidden=!1}),250);var form=document.forms.consent;for(var action of["submit","reset"])form.addEventListener(action,(function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map((function(e){return[e,!0]})))),location.hash="",location.reload()}))</script>
<script id="__config" type="application/json">{"annotate": null, "base": ".", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "toc.integrate", "navigation.top", "content.code.annotate", "navigation.indexes", "search.highlight", "search.share", "search.suggest"], "search": "assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="assets/javascripts/bundle.79ae519e.min.js"></script>
<script src="javascript/extra.js"></script>
</body>
</html>