{"id":2410,"date":"2025-05-11T19:32:46","date_gmt":"2025-05-11T16:32:46","guid":{"rendered":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/"},"modified":"2025-05-11T19:32:46","modified_gmt":"2025-05-11T16:32:46","slug":"building-custom-controllers-in-kubernetes-a-comprehensive-guide","status":"publish","type":"post","link":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/","title":{"rendered":"Building Custom Controllers in Kubernetes: A Comprehensive Guide"},"content":{"rendered":"<p><br \/>\n<\/p>\n<p>In the rapidly evolving world of cloud-native applications, Kubernetes has emerged as the leading container orchestration platform, offering a robust API and extensibility framework. One of the core components that allow Kubernetes to manage resources effectively is the Controller. In this article, we will dive into what custom controllers are, why they are essential, and how to build one from scratch.<\/p>\n<p><\/p>\n<h2>Understanding Controllers in Kubernetes<\/h2>\n<p><\/p>\n<p>A <strong>Kubernetes Controller<\/strong> continuously watches the state of your cluster, comparing the current state of its resources to the desired state defined by the user. If there&#8217;s a discrepancy, the controller takes action to rectify the situation. Controllers work behind the scenes to manage various aspects of your environment, from scaling applications to handling network traffic.<\/p>\n<p><\/p>\n<h3>Custom Controllers: Definition and Use Cases<\/h3>\n<p><\/p>\n<p>While Kubernetes API already includes several built-in controllers (like Deployments and StatefulSets), there are scenarios where custom controllers are necessary:<\/p>\n<p><\/p>\n<ul><\/p>\n<li><strong>CRDs (Custom Resource Definitions)<\/strong>: If your application has unique requirements that don\u2019t fit into existing Kubernetes constructs, you can create your own CRDs and controllers.<\/li>\n<p><\/p>\n<li><strong>Automation<\/strong>: Custom controllers can automate repetitive tasks specific to your workload, improving operational efficiency.<\/li>\n<p><\/p>\n<li><strong>Integration<\/strong>: You can integrate third-party systems by creating controllers that manage their lifecycle based on Kubernetes events.<\/li>\n<p>\n<\/ul>\n<p><\/p>\n<h2>Prerequisites<\/h2>\n<p><\/p>\n<h3>Knowledge<\/h3>\n<p><\/p>\n<p>Before diving into custom controllers, you should have a solid understanding of:<\/p>\n<p><\/p>\n<ul><\/p>\n<li>Kubernetes architecture and concepts like Pods, Deployments, Services, and Volumes.<\/li>\n<p><\/p>\n<li>Go programming language, as most Kubernetes client libraries and examples are written in it.<\/li>\n<p><\/p>\n<li>Familiarity with Kubernetes client-go library.<\/li>\n<p>\n<\/ul>\n<p><\/p>\n<h3>Environment Setup<\/h3>\n<p><\/p>\n<ol><\/p>\n<li><strong>Kubernetes Cluster<\/strong>: You can set up a local cluster using Minikube or Kind.<\/li>\n<p><\/p>\n<li><strong>Go<\/strong>: Install Go on your local machine.<\/li>\n<p><\/p>\n<li><strong>kubectl<\/strong>: Ensure you have <code>kubectl<\/code> configured to communicate with your Kubernetes cluster.<\/li>\n<p>\n<\/ol>\n<p><\/p>\n<h2>Creating a Custom Controller<\/h2>\n<p><\/p>\n<h3>Step 1: Define a Custom Resource Definition (CRD)<\/h3>\n<p><\/p>\n<p>The first step in creating a custom controller is defining a CRD. A CRD allows you to extend Kubernetes with your own resource types.<\/p>\n<p><\/p>\n<p>Here\u2019s an example of a CRD that defines a <code>CronJob<\/code> resource:<\/p>\n<p><\/p>\n<pre><code class=\"language-yaml\">apiVersion: apiextensions.k8s.io\/v1<br \/>\nkind: CustomResourceDefinition<br \/>\nmetadata:<br \/>\n  name: cronjobs.example.com<br \/>\nspec:<br \/>\n  group: example.com<br \/>\n  versions:<br \/>\n  - name: v1<br \/>\n    served: true<br \/>\n    storage: true<br \/>\n    schema:<br \/>\n      openAPIV3Schema:<br \/>\n        type: object<br \/>\n        properties:<br \/>\n          spec:<br \/>\n            type: object<br \/>\n            properties:<br \/>\n              schedule:<br \/>\n                type: string<br \/>\n              image:<br \/>\n                type: string<br \/>\n  scope: Namespaced<br \/>\n  names:<br \/>\n    plural: cronjobs<br \/>\n    singular: cronjob<br \/>\n    kind: CronJob<br \/>\n    shortNames:<br \/>\n    - cj<\/code><\/pre>\n<p><\/p>\n<h3>Step 2: Create the Controller<\/h3>\n<p><\/p>\n<ol><\/p>\n<li>\n<p><strong>Initialize a Go Module<\/strong>:<\/p>\n<p><\/p>\n<p>Start a new Go module for your controller:<\/p>\n<p><\/p>\n<pre><code class=\"language-bash\">mkdir cronjob-controller<br \/>\ncd cronjob-controller<br \/>\ngo mod init example.com\/cronjob-controller<\/code><\/pre>\n<p>\n<\/li>\n<p><\/p>\n<li>\n<p><strong>Install Client Libraries<\/strong>:<\/p>\n<p><\/p>\n<p>Install necessary dependencies:<\/p>\n<p><\/p>\n<pre><code class=\"language-bash\">go get k8s.io\/apimachinery@v0.23.x<br \/>\ngo get k8s.io\/client-go@v0.23.x<br \/>\ngo get k8s.io\/controller-runtime@0.10.x<\/code><\/pre>\n<p>\n<\/li>\n<p><\/p>\n<li>\n<p><strong>Write the Controller Logic<\/strong>:<\/p>\n<p><\/p>\n<p>Create a new file, <code>main.go<\/code>, and start writing your controller. Here\u2019s a simplified example:<\/p>\n<p><\/p>\n<pre><code class=\"language-go\">package main<br \/>\n<br \/>\nimport (<br \/>\n   \"context\"<br \/>\n   \"os\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/controller\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/controller\/controllerutil\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/manager\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/source\"<br \/>\n   corev1 \"k8s.io\/api\/core\/v1\"<br \/>\n   metav1 \"k8s.io\/apimachinery\/pkg\/apis\/meta\/v1\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/reconcile\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/controller\/controlleroptions\"<br \/>\n   \"sigs.k8s.io\/controller-runtime\/pkg\/client\"<br \/>\n)<br \/>\n<br \/>\ntype CronJobReconciler struct {<br \/>\n   client.Client<br \/>\n}<br \/>\n<br \/>\nfunc (r *CronJobReconciler) Reconcile(req reconcile.Request) (reconcile.Result, error) {<br \/>\n   ctx := context.Background()<br \/>\n   cronJob := &amp;corev1.Pod{}<br \/>\n<br \/>\n   if err := r.Get(ctx, req.NamespacedName, cronJob); err != nil {<br \/>\n       return reconcile.Result{}, client.IgnoreNotFound(err)<br \/>\n   }<br \/>\n<br \/>\n   \/\/ Implement your reconciliation logic here<br \/>\n<br \/>\n   return reconcile.Result{}, nil<br \/>\n}<br \/>\n<br \/>\nfunc main() {<br \/>\n   mgr, err := manager.New(config.GetConfigOrDie(), manager.Options{})<br \/>\n   if err != nil {<br \/>\n       os.Exit(1)<br \/>\n   }<br \/>\n<br \/>\n   if err := controller.New(\"cronjob-controller\", mgr, controlleroptions.Options{}).<br \/>\n       Watch(&amp;source.Kind{Type: &amp;corev1.Pod{}}, &amp;handler.EnqueueRequestForObject{}); err != nil {<br \/>\n       os.Exit(1)<br \/>\n   }<br \/>\n<br \/>\n   if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {<br \/>\n       os.Exit(1)<br \/>\n   }<br \/>\n}<\/code><\/pre>\n<p>\n<\/li>\n<p>\n<\/ol>\n<p><\/p>\n<h3>Step 3: Deploy the Controller<\/h3>\n<p><\/p>\n<ol><\/p>\n<li>\n<p><strong>Dockerize Your Application<\/strong>:<\/p>\n<p><\/p>\n<p>Create a Dockerfile to build your controller image.<\/p>\n<p><\/p>\n<pre><code class=\"language-dockerfile\">FROM golang:1.20 AS builder<br \/>\nWORKDIR \/app<br \/>\nCOPY . .<br \/>\nRUN go build -o cronjob-controller .<br \/>\n<br \/>\nFROM alpine:latest<br \/>\nWORKDIR \/root\/<br \/>\nCOPY --from=builder \/app\/cronjob-controller .<br \/>\nCMD [\".\/cronjob-controller\"]<\/code><\/pre>\n<p>\n<\/li>\n<p><\/p>\n<li>\n<p><strong>Build and Push the Docker Image<\/strong>:<\/p>\n<p><\/p>\n<pre><code class=\"language-bash\">docker build -t your-docker-repo\/cronjob-controller:v1 .<br \/>\ndocker push your-docker-repo\/cronjob-controller:v1<\/code><\/pre>\n<p>\n<\/li>\n<p><\/p>\n<li>\n<p><strong>Create Kubernetes Deployment<\/strong>:<\/p>\n<p><\/p>\n<p>Deploy your controller to Kubernetes using a Deployment manifest.<\/p>\n<p><\/p>\n<pre><code class=\"language-yaml\">apiVersion: apps\/v1<br \/>\nkind: Deployment<br \/>\nmetadata:<br \/>\n name: cronjob-controller<br \/>\nspec:<br \/>\n replicas: 1<br \/>\n selector:<br \/>\n   matchLabels:<br \/>\n     app: cronjob-controller<br \/>\n template:<br \/>\n   metadata:<br \/>\n     labels:<br \/>\n       app: cronjob-controller<br \/>\n   spec:<br \/>\n     containers:<br \/>\n     - name: cronjob-controller<br \/>\n       image: your-docker-repo\/cronjob-controller:v1<br \/>\n       imagePullPolicy: Always<\/code><\/pre>\n<p>\n<\/li>\n<p><\/p>\n<li>\n<p><strong>Apply the CRD and Deployment<\/strong>:<\/p>\n<p><\/p>\n<pre><code class=\"language-bash\">kubectl apply -f cronjob-crd.yaml<br \/>\nkubectl apply -f cronjob-controller-deployment.yaml<\/code><\/pre>\n<p>\n<\/li>\n<p>\n<\/ol>\n<p><\/p>\n<h3>Step 4: Test Your Custom Controller<\/h3>\n<p><\/p>\n<p>Create a Custom Resource instance to see your controller in action:<\/p>\n<p><\/p>\n<pre><code class=\"language-yaml\">apiVersion: example.com\/v1<br \/>\nkind: CronJob<br \/>\nmetadata:<br \/>\n  name: my-cronjob<br \/>\nspec:<br \/>\n  schedule: \"*\/1 * * * *\"<br \/>\n  image: \"busybox\"<\/code><\/pre>\n<p><\/p>\n<p>Deploy it using:<\/p>\n<p><\/p>\n<pre><code class=\"language-bash\">kubectl apply -f my-cronjob.yaml<\/code><\/pre>\n<p><\/p>\n<p>Monitor the logs of your controller to verify that it is reconciling the custom resource as expected.<\/p>\n<p><\/p>\n<h2>Conclusion<\/h2>\n<p><\/p>\n<p>Building a custom controller in Kubernetes provides immense flexibility and control over your workloads. With the power of CRDs and custom logic, you can automate complex scenarios and ensure your applications are managed effectively.<\/p>\n<p><\/p>\n<p>By following this guide, you should now be equipped to create, deploy, and test a custom controller tailored to your needs. Stay tuned for more insights and advanced topics on Kubernetes and cloud-native technologies on WafaTech Blogs!<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>In the rapidly evolving world of cloud-native applications, Kubernetes has emerged as the leading container orchestration platform, offering a robust API and extensibility framework. One of the core components that allow Kubernetes to manage resources effectively is the Controller. In this article, we will dive into what custom controllers are, why they are essential, and [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2411,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[213],"tags":[646,218,216,240,233,217],"class_list":["post-2410","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kubernetes","tag-building","tag-comprehensive","tag-controllers","tag-custom","tag-guide","tag-kubernetes","et-has-post-format-content","et_post_format-et-post-format-standard"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Building Custom Controllers in Kubernetes: A Comprehensive Guide - WafaTech Blogs<\/title>\n<meta name=\"description\" content=\"Building Custom Controllers in Kubernetes: A Comprehensive Guide %\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Custom Controllers in Kubernetes: A Comprehensive Guide\" \/>\n<meta property=\"og:description\" content=\"Building Custom Controllers in Kubernetes: A Comprehensive Guide %\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"WafaTech Blogs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/people\/WafaTech\/61560546351289\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-11T16:32:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2024\/06\/logo_big.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2221\" \/>\n\t<meta property=\"og:image:height\" content=\"482\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"WafaTech SA\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wafatech_sa\" \/>\n<meta name=\"twitter:site\" content=\"@wafatech_sa\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"WafaTech SA\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/\"},\"author\":{\"name\":\"WafaTech SA\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#\\\/schema\\\/person\\\/1a5761fc0feb63ab59d295d7c2648f06\"},\"headline\":\"Building Custom Controllers in Kubernetes: A Comprehensive Guide\",\"datePublished\":\"2025-05-11T16:32:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/\"},\"wordCount\":523,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png\",\"keywords\":[\"Building\",\"Comprehensive\",\"Controllers\",\"Custom\",\"Guide\",\"Kubernetes\"],\"articleSection\":[\"Kubernetes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/\",\"url\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/\",\"name\":\"Building Custom Controllers in Kubernetes: A Comprehensive Guide - WafaTech Blogs\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png\",\"datePublished\":\"2025-05-11T16:32:46+00:00\",\"description\":\"Building Custom Controllers in Kubernetes: A Comprehensive Guide %\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png\",\"contentUrl\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png\",\"width\":1024,\"height\":1024,\"caption\":\"Custom Controllers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/devops\\\/kubernetes\\\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Custom Controllers in Kubernetes: A Comprehensive Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/\",\"name\":\"WafaTech Blogs\",\"description\":\"Smart Technologies\",\"publisher\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#organization\"},\"alternateName\":\"WafaTech\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#organization\",\"name\":\"WafaTech Blogs\",\"alternateName\":\"WafaTech\",\"url\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/logo_big.webp\",\"contentUrl\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/logo_big.webp\",\"width\":2221,\"height\":482,\"caption\":\"WafaTech Blogs\"},\"image\":{\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/people\\\/WafaTech\\\/61560546351289\\\/\",\"https:\\\/\\\/x.com\\\/wafatech_sa\",\"https:\\\/\\\/www.youtube.com\\\/@wafatech-sa\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/wafatech\\\/\"],\"description\":\"WafaTech, a leading Saudi IT services provider, specializes in cloud solutions, connectivity, and ICT services. Offering secure cloud infrastructure, high-speed internet, and ICT solutions like hosting, backup, and disaster recovery, WafaTech operates a Tier 3 data center at KAUST with ISO certifications. Regulated by CST, the company is committed to innovation, security, and customer satisfaction, empowering businesses in the digital age.\",\"email\":\"sales@wafatech.sa\",\"legalName\":\"Al-Wafa Al-Dhakia For Information Technology LLC\",\"foundingDate\":\"2013-01-08\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/#\\\/schema\\\/person\\\/1a5761fc0feb63ab59d295d7c2648f06\",\"name\":\"WafaTech SA\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fde877f001a2e0497276edc0684d3ba2a416c0de8caeb8e785076a1b1b932b3a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fde877f001a2e0497276edc0684d3ba2a416c0de8caeb8e785076a1b1b932b3a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fde877f001a2e0497276edc0684d3ba2a416c0de8caeb8e785076a1b1b932b3a?s=96&d=mm&r=g\",\"caption\":\"WafaTech SA\"},\"url\":\"https:\\\/\\\/wafatech.sa\\\/blog\\\/author\\\/omer-yaseen\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building Custom Controllers in Kubernetes: A Comprehensive Guide - WafaTech Blogs","description":"Building Custom Controllers in Kubernetes: A Comprehensive Guide %","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/","og_locale":"en_US","og_type":"article","og_title":"Building Custom Controllers in Kubernetes: A Comprehensive Guide","og_description":"Building Custom Controllers in Kubernetes: A Comprehensive Guide %","og_url":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/","og_site_name":"WafaTech Blogs","article_publisher":"https:\/\/www.facebook.com\/people\/WafaTech\/61560546351289\/","article_published_time":"2025-05-11T16:32:46+00:00","og_image":[{"width":2221,"height":482,"url":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2024\/06\/logo_big.webp","type":"image\/webp"}],"author":"WafaTech SA","twitter_card":"summary_large_image","twitter_creator":"@wafatech_sa","twitter_site":"@wafatech_sa","twitter_misc":{"Written by":"WafaTech SA","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#article","isPartOf":{"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/"},"author":{"name":"WafaTech SA","@id":"https:\/\/wafatech.sa\/blog\/#\/schema\/person\/1a5761fc0feb63ab59d295d7c2648f06"},"headline":"Building Custom Controllers in Kubernetes: A Comprehensive Guide","datePublished":"2025-05-11T16:32:46+00:00","mainEntityOfPage":{"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/"},"wordCount":523,"commentCount":0,"publisher":{"@id":"https:\/\/wafatech.sa\/blog\/#organization"},"image":{"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2025\/05\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png","keywords":["Building","Comprehensive","Controllers","Custom","Guide","Kubernetes"],"articleSection":["Kubernetes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/","url":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/","name":"Building Custom Controllers in Kubernetes: A Comprehensive Guide - WafaTech Blogs","isPartOf":{"@id":"https:\/\/wafatech.sa\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#primaryimage"},"image":{"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2025\/05\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png","datePublished":"2025-05-11T16:32:46+00:00","description":"Building Custom Controllers in Kubernetes: A Comprehensive Guide %","breadcrumb":{"@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#primaryimage","url":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2025\/05\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png","contentUrl":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2025\/05\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png","width":1024,"height":1024,"caption":"Custom Controllers"},{"@type":"BreadcrumbList","@id":"https:\/\/wafatech.sa\/blog\/devops\/kubernetes\/building-custom-controllers-in-kubernetes-a-comprehensive-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wafatech.sa\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Custom Controllers in Kubernetes: A Comprehensive Guide"}]},{"@type":"WebSite","@id":"https:\/\/wafatech.sa\/blog\/#website","url":"https:\/\/wafatech.sa\/blog\/","name":"WafaTech Blogs","description":"Smart Technologies","publisher":{"@id":"https:\/\/wafatech.sa\/blog\/#organization"},"alternateName":"WafaTech","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wafatech.sa\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wafatech.sa\/blog\/#organization","name":"WafaTech Blogs","alternateName":"WafaTech","url":"https:\/\/wafatech.sa\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wafatech.sa\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2024\/06\/logo_big.webp","contentUrl":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2024\/06\/logo_big.webp","width":2221,"height":482,"caption":"WafaTech Blogs"},"image":{"@id":"https:\/\/wafatech.sa\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/people\/WafaTech\/61560546351289\/","https:\/\/x.com\/wafatech_sa","https:\/\/www.youtube.com\/@wafatech-sa","https:\/\/www.linkedin.com\/company\/wafatech\/"],"description":"WafaTech, a leading Saudi IT services provider, specializes in cloud solutions, connectivity, and ICT services. Offering secure cloud infrastructure, high-speed internet, and ICT solutions like hosting, backup, and disaster recovery, WafaTech operates a Tier 3 data center at KAUST with ISO certifications. Regulated by CST, the company is committed to innovation, security, and customer satisfaction, empowering businesses in the digital age.","email":"sales@wafatech.sa","legalName":"Al-Wafa Al-Dhakia For Information Technology LLC","foundingDate":"2013-01-08","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"}},{"@type":"Person","@id":"https:\/\/wafatech.sa\/blog\/#\/schema\/person\/1a5761fc0feb63ab59d295d7c2648f06","name":"WafaTech SA","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/fde877f001a2e0497276edc0684d3ba2a416c0de8caeb8e785076a1b1b932b3a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fde877f001a2e0497276edc0684d3ba2a416c0de8caeb8e785076a1b1b932b3a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fde877f001a2e0497276edc0684d3ba2a416c0de8caeb8e785076a1b1b932b3a?s=96&d=mm&r=g","caption":"WafaTech SA"},"url":"https:\/\/wafatech.sa\/blog\/author\/omer-yaseen\/"}]}},"jetpack_featured_media_url":"https:\/\/wafatech.sa\/blog\/wp-content\/uploads\/2025\/05\/Building-Custom-Controllers-in-Kubernetes-A-Comprehensive-Guide.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/posts\/2410","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/comments?post=2410"}],"version-history":[{"count":0,"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/posts\/2410\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/media\/2411"}],"wp:attachment":[{"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/media?parent=2410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/categories?post=2410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wafatech.sa\/blog\/wp-json\/wp\/v2\/tags?post=2410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}