<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Getting started on Java Operator SDK</title><link>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/</link><description>Recent content in Getting started on Java Operator SDK</description><generator>Hugo</generator><language>en</language><atom:link href="https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/index.xml" rel="self" type="application/rss+xml"/><item><title>Introduction to Kubernetes operators</title><link>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/intro-to-operators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/intro-to-operators/</guid><description>&lt;h2 id="what-are-kubernetes-operators"&gt;What are Kubernetes Operators?&lt;/h2&gt;
&lt;p&gt;Kubernetes operators are software extensions that manage both cluster and non-cluster resources on behalf of Kubernetes. The Java Operator SDK (JOSDK) makes it easy to implement Kubernetes operators in Java, with APIs designed to feel natural to Java developers and framework handling of common problems so you can focus on your business logic.&lt;/p&gt;
&lt;h2 id="why-use-java-operator-sdk"&gt;Why Use Java Operator SDK?&lt;/h2&gt;
&lt;p&gt;JOSDK provides several key advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Java-native APIs&lt;/strong&gt; that feel familiar to Java developers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic handling&lt;/strong&gt; of common operator challenges (caching, event handling, retries)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Production-ready features&lt;/strong&gt; like observability, metrics, and error handling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified development&lt;/strong&gt; so you can focus on business logic instead of Kubernetes complexities&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="learning-resources"&gt;Learning Resources&lt;/h2&gt;
&lt;h3 id="getting-started"&gt;Getting Started&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.container-solutions.com/kubernetes-operators-explained"&gt;Introduction to Kubernetes operators&lt;/a&gt; - Core concepts explained&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=CvftaV-xrB4"&gt;Implementing Kubernetes Operators in Java&lt;/a&gt; - Introduction talk&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/"&gt;Kubernetes operator pattern documentation&lt;/a&gt; - Official Kubernetes docs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="deep-dives"&gt;Deep Dives&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.container-solutions.com/a-deep-dive-into-the-java-operator-sdk"&gt;Problems JOSDK solves&lt;/a&gt; - Technical deep dive&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.container-solutions.com/cloud-native-java-infrastructure-automation-with-kubernetes-operators"&gt;Why Java operators make sense&lt;/a&gt; - Java in cloud-native infrastructure&lt;/li&gt;
&lt;li&gt;&lt;a href="https://csviri.medium.com/deep-dive-building-a-kubernetes-operator-sdk-for-java-developers-5008218822cb"&gt;Building a Kubernetes operator SDK for Java&lt;/a&gt; - Framework design principles&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tutorials"&gt;Tutorials&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.redhat.com/articles/2022/02/15/write-kubernetes-java-java-operator-sdk"&gt;Writing Kubernetes operators using JOSDK&lt;/a&gt; - Step-by-step blog series&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Bootstrapping and samples</title><link>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/bootstrap-and-samples/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/bootstrap-and-samples/</guid><description>&lt;h2 id="creating-a-new-operator-project"&gt;Creating a New Operator Project&lt;/h2&gt;
&lt;h3 id="using-the-maven-plugin"&gt;Using the Maven Plugin&lt;/h3&gt;
&lt;p&gt;The simplest way to start a new operator project is using the provided Maven plugin, which generates a complete project skeleton:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn io.javaoperatorsdk:bootstrapper:&lt;span style="color:#ce5c00;font-weight:bold"&gt;[&lt;/span&gt;version&lt;span style="color:#ce5c00;font-weight:bold"&gt;]&lt;/span&gt;:create &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -DprojectGroupId&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;org.acme &lt;span style="color:#4e9a06"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -DprojectArtifactId&lt;span style="color:#ce5c00;font-weight:bold"&gt;=&lt;/span&gt;getting-started
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This command creates a new Maven project with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A basic operator implementation&lt;/li&gt;
&lt;li&gt;Maven configuration with required dependencies&lt;/li&gt;
&lt;li&gt;Generated &lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions"&gt;CustomResourceDefinition&lt;/a&gt; (CRD)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="building-your-project"&gt;Building Your Project&lt;/h3&gt;
&lt;p&gt;Build the generated project with Maven:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn clean install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The build process automatically generates the CustomResourceDefinition YAML file that you&amp;rsquo;ll need to apply to your Kubernetes cluster.&lt;/p&gt;</description></item><item><title>Patterns and best practices</title><link>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/patterns-best-practices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aerben.github.io/josdk-docs-test/v5.1/docs/getting-started/patterns-best-practices/</guid><description>&lt;p&gt;This document describes patterns and best practices for building and running operators, and how to implement them using the Java Operator SDK (JOSDK).&lt;/p&gt;
&lt;p&gt;See also best practices in the &lt;a href="https://sdk.operatorframework.io/docs/best-practices/best-practices/"&gt;Operator SDK&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="implementing-a-reconciler"&gt;Implementing a Reconciler&lt;/h2&gt;
&lt;h3 id="always-reconcile-all-resources"&gt;Always Reconcile All Resources&lt;/h3&gt;
&lt;p&gt;Reconciliation can be triggered by events from multiple sources. It might be tempting to check the events and only reconcile the related resource or subset of resources that the controller manages. However, this is &lt;strong&gt;considered an anti-pattern&lt;/strong&gt; for operators.&lt;/p&gt;</description></item></channel></rss>