<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Component Operator</title><link>https://sap.github.io/component-operator/</link><description>Recent content on Component Operator</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://sap.github.io/component-operator/index.xml" rel="self" type="application/rss+xml"/><item><title>Cluster Setup</title><link>https://sap.github.io/component-operator/docs/getting-started/setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/getting-started/setup/</guid><description>&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Install the following tools before you begin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kind.sigs.k8s.io/docs/user/quick-start/#installation"&gt;&lt;code&gt;kind&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/tasks/tools/"&gt;&lt;code&gt;kubectl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fluxcd.io/flux/installation/"&gt;&lt;code&gt;flux&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://helm.sh/docs/intro/install/"&gt;&lt;code&gt;helm&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-1--create-a-kind-cluster"&gt;Step 1 – Create a kind cluster&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind create cluster
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-2--install-the-flux-source-controller"&gt;Step 2 – Install the Flux source controller&lt;/h2&gt;
&lt;p&gt;Component-operator relies on the &lt;a href="https://fluxcd.io/flux/components/source/"&gt;Flux source controller&lt;/a&gt; to fetch and serve artifact content. Install only the source controller component:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flux install --components source-controller
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-3--install-component-operator"&gt;Step 3 – Install component-operator&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --install component-operator &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; oci://ghcr.io/sap/component-operator/charts/component-operator &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace flux-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Wait for the operator to become ready:&lt;/p&gt;</description></item><item><title>Command-Line Flags</title><link>https://sap.github.io/component-operator/docs/configuration/flags/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/configuration/flags/</guid><description>&lt;p&gt;The component-operator controller manager is configured via command-line flags at startup. All flags are optional unless noted otherwise.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Flag&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-metrics-bind-address&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;:8080&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Address on which the Prometheus metrics endpoint is served.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-health-probe-bind-address&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;:8081&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Address on which the liveness and readiness probe HTTP endpoints are served.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-kubeconfig&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;Path to a kubeconfig file. Only required when running out-of-cluster (e.g. for local development). In-cluster deployments use the pod&amp;rsquo;s service account automatically.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-leader-elect&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;bool&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Enable leader election. When running multiple replicas of the controller manager, enabling this ensures that only one instance is active at any time. Recommended for production deployments.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-default-service-account&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;Name of the service account to impersonate by default for all components that do not explicitly set &lt;code&gt;spec.serviceAccountName&lt;/code&gt;. The account is resolved relative to each component&amp;rsquo;s namespace. See &lt;a href="../../usage/impersonation"&gt;Impersonation and Remote Clusters&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-events-address&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;HTTP address of a Flux notification-controller events receiver. When set, component-operator streams reconciliation events (successful applies, errors, state transitions) to this endpoint. See &lt;a href="../../usage/notifications"&gt;Notifications&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-max-concurrent-reconciles&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;int&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum number of component reconciliations that may run in parallel. See &lt;a href="../performance"&gt;Performance and Sizing&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="high-availability-and-leader-election"&gt;High Availability and Leader Election&lt;/h2&gt;
&lt;p&gt;For production deployments, run two or more replicas of the controller manager with &lt;code&gt;-leader-elect&lt;/code&gt; enabled. Leader election ensures that only one instance actively reconciles at any time; the others remain on standby and take over automatically if the leader fails or is restarted.&lt;/p&gt;</description></item><item><title>Component</title><link>https://sap.github.io/component-operator/docs/reference/component/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/reference/component/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Component&lt;/code&gt; custom resource is the primary API for managing Kubernetes components with component-operator. It defines a set of Kubernetes resources (deployments, services, RBAC, etc.) that are managed as a cohesive unit.&lt;/p&gt;
&lt;h2 id="api-version"&gt;API Version&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;core.cs.sap.com/v1alpha1&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="kind"&gt;Kind&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Component&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="spec"&gt;Spec&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;ComponentSpec&lt;/code&gt; defines the desired state of a Component.&lt;/p&gt;
&lt;h3 id="source-reference"&gt;Source Reference&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sourceRef&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;a href="#sourcereference"&gt;SourceReference&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;Reference to the source containing the manifest templates&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;revision&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Pin component to a specific source revision&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;digest&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Pin component to a specific source digest&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;path&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Subfolder within the source (default: root)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="placement-and-targeting"&gt;Placement and Targeting&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;namespace&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Target namespace for deployment (default: component&amp;rsquo;s namespace)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Target name for deployment (default: component&amp;rsquo;s name)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;serviceAccountName&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Service account to impersonate during reconciliation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;kubeConfig&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;a href="#kubeconfigspec"&gt;KubeConfigSpec&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;KubeConfig for deploying to remote cluster&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="templating-and-values"&gt;Templating and Values&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;values&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;JSON&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Inline values for templating&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;valuesFrom&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;[]&lt;a href="#secretkeyreference"&gt;SecretKeyReference&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Secret references containing values&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;decryption&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;a href="#decryption"&gt;Decryption&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Decryption settings for encrypted manifests&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;postBuild&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;a href="#postbuild"&gt;PostBuild&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Post-build variable substitution and patches&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="reconciliation-control"&gt;Reconciliation Control&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;suspend&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;boolean&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Suspend reconciliation (default: false)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;requeueInterval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;duration&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Period for re-reconciliation after success (default: 10m)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;retryInterval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;duration&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Period for re-reconciliation after retriable error&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;timeout&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;duration&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;How long dependent objects have to become ready&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sticky&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;boolean&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Stick to source revision until ready or timeout&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;reapplyInterval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;duration&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Force reapply interval (default: 60m)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="policies"&gt;Policies&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;adoptionPolicy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;How to handle existing objects (&lt;code&gt;IfUnowned&lt;/code&gt;, &lt;code&gt;Never&lt;/code&gt;, &lt;code&gt;Always&lt;/code&gt;; default: &lt;code&gt;IfUnowned&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;updatePolicy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;How to update objects (&lt;code&gt;Replace&lt;/code&gt;, &lt;code&gt;Recreate&lt;/code&gt;, &lt;code&gt;SsaMerge&lt;/code&gt;, &lt;code&gt;SsaOverride&lt;/code&gt;; default: &lt;code&gt;SsaOverride&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;deletePolicy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;What happens on deletion (&lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;Orphan&lt;/code&gt;; default: &lt;code&gt;Delete&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;missingNamespacesPolicy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Auto-create missing namespaces (&lt;code&gt;Create&lt;/code&gt;, &lt;code&gt;DoNotCreate&lt;/code&gt;; default: &lt;code&gt;Create&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="advanced-configuration"&gt;Advanced Configuration&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;dependencies&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;[]&lt;a href="#dependency"&gt;Dependency&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Dependencies to other components&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;additionalManagedTypes&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;[]&lt;a href="#typeinfo"&gt;TypeInfo&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Additional CRD types managed by this component&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="sourcereference"&gt;SourceReference&lt;/h2&gt;
&lt;p&gt;Defines the source of manifest templates. Exactly one source type must be provided.&lt;/p&gt;</description></item><item><title>CRD Deletion Safeguarding</title><link>https://sap.github.io/component-operator/docs/tutorials/crd-deletion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/tutorials/crd-deletion/</guid><description>&lt;p&gt;This tutorial installs &lt;a href="https://cert-manager.io/"&gt;cert-manager&lt;/a&gt; using component-operator. Along the way you will see how the HelmGenerator translates Helm hook annotations into component-operator lifecycle annotations, and observe how component-operator protects against premature deletion when foreign instances of managed CRDs still exist in the cluster.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;You need a Kubernetes cluster with Flux source-controller and component-operator installed. If you don&amp;rsquo;t have one yet, the &lt;a href="../../getting-started/setup"&gt;Cluster Setup&lt;/a&gt; guide walks you through creating a local kind cluster with everything in place.&lt;/p&gt;</description></item><item><title>Prerequisites</title><link>https://sap.github.io/component-operator/docs/installation/prerequisites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/installation/prerequisites/</guid><description>&lt;p&gt;Component-operator requires the &lt;a href="https://fluxcd.io/flux/components/source/"&gt;Flux source controller&lt;/a&gt; to be installed in the cluster. It relies on Flux&amp;rsquo;s &lt;code&gt;GitRepository&lt;/code&gt;, &lt;code&gt;OCIRepository&lt;/code&gt;, &lt;code&gt;Bucket&lt;/code&gt;, and &lt;code&gt;HelmChart&lt;/code&gt; source types to fetch manifest artifacts. You can install just the source controller without the full Flux stack:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flux install --components source-controller
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alternatively, install the complete Flux toolkit if you plan to use other Flux features alongside component-operator:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flux install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Sources</title><link>https://sap.github.io/component-operator/docs/usage/sources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/sources/</guid><description>&lt;p&gt;The mandatory field &lt;code&gt;spec.sourceRef&lt;/code&gt; defines where component-operator retrieves the manifests used to generate the component&amp;rsquo;s dependent objects. Exactly one source type must be specified.&lt;/p&gt;
&lt;h2 id="source-types"&gt;Source Types&lt;/h2&gt;
&lt;h3 id="flux-gitrepository"&gt;Flux GitRepository&lt;/h3&gt;
&lt;p&gt;References a &lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/"&gt;Flux &lt;code&gt;GitRepository&lt;/code&gt;&lt;/a&gt; object. The source controller fetches and serves the Git repository content as a tarball artifact.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sourceRef:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fluxGitRepository:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: my-gitrepo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000"&gt;# namespace: source-ns # optional; defaults to component&amp;#39;s namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="flux-ocirepository"&gt;Flux OCIRepository&lt;/h3&gt;
&lt;p&gt;References a &lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/"&gt;Flux &lt;code&gt;OCIRepository&lt;/code&gt;&lt;/a&gt; object, backed by an OCI-compatible container registry.&lt;/p&gt;</description></item><item><title>Apply, Delete and Purge Orders</title><link>https://sap.github.io/component-operator/docs/tutorials/waves/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/tutorials/waves/</guid><description>&lt;p&gt;This tutorial shows how component-operator&amp;rsquo;s ordering annotations let you sequence the creation, deletion, and one-shot execution of dependent objects within a single component. You will use a &lt;code&gt;Blueprint&lt;/code&gt; as the manifest source so no external Git repository or Helm repository is needed.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;You need a Kubernetes cluster with Flux source-controller and component-operator installed. If you don&amp;rsquo;t have one yet, the &lt;a href="../../getting-started/setup"&gt;Cluster Setup&lt;/a&gt; guide walks you through creating a local kind cluster with everything in place.&lt;/p&gt;</description></item><item><title>Blueprint</title><link>https://sap.github.io/component-operator/docs/reference/blueprint/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/reference/blueprint/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Blueprint&lt;/code&gt; custom resource provides an in-cluster mechanism for storing manifest templates. Blueprints serve as reusable component templates that can be referenced by Component resources, eliminating the need for external source repositories.&lt;/p&gt;
&lt;h2 id="api-version"&gt;API Version&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;core.cs.sap.com/v1alpha1&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="kind"&gt;Kind&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Blueprint&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="spec"&gt;Spec&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;BlueprintSpec&lt;/code&gt; defines the desired state of a Blueprint.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;files&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;map[string]string&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Map of file paths to file contents&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="files-field"&gt;Files Field&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;files&lt;/code&gt; field contains a map where:&lt;/p&gt;</description></item><item><title>Container Images</title><link>https://sap.github.io/component-operator/docs/installation/images/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/installation/images/</guid><description>&lt;p&gt;OCI images for component-operator are published to the GitHub Container Registry alongside each release. You can browse all available images and versions on the &lt;a href="https://github.com/orgs/SAP/packages?repo_name=component-operator"&gt;GitHub Packages page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The image reference is:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ghcr.io/sap/component-operator:&amp;lt;version&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Custom Resource Definitions can be downloaded separately as:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ghcr.io/sap/component-operator/crds:&amp;lt;version&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; with the desired release tag (e.g. &lt;code&gt;v0.12.0&lt;/code&gt;). Using &lt;code&gt;latest&lt;/code&gt; is not recommended for production deployments.&lt;/p&gt;</description></item><item><title>Manifests</title><link>https://sap.github.io/component-operator/docs/usage/manifests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/manifests/</guid><description>&lt;p&gt;The files making up a component&amp;rsquo;s manifests are provided by the configured &lt;a href="../sources"&gt;source&lt;/a&gt;. The field &lt;code&gt;spec.path&lt;/code&gt; defines the subfolder within the source artifact to use as the entry point (default: the root of the artifact).&lt;/p&gt;
&lt;p&gt;Component-operator automatically determines how to render the manifests based on the contents of that directory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If a &lt;code&gt;Chart.yaml&lt;/code&gt; file exists in &lt;code&gt;spec.path&lt;/code&gt;, the content is rendered as a &lt;strong&gt;Helm chart&lt;/strong&gt; using the &lt;a href="https://sap.github.io/component-operator-runtime/docs/generators/helm/"&gt;HelmGenerator&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Otherwise, the &lt;a href="https://sap.github.io/component-operator-runtime/docs/generators/kustomize/"&gt;KustomizeGenerator&lt;/a&gt; logic is applied, which also supports plain YAML manifests without a &lt;code&gt;kustomization.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="values-and-valuesfrom"&gt;Values and ValuesFrom&lt;/h2&gt;
&lt;p&gt;Parameters for the manifests can be provided inline via &lt;code&gt;spec.values&lt;/code&gt; or loaded from Kubernetes Secrets via &lt;code&gt;spec.valuesFrom&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Performance and Sizing</title><link>https://sap.github.io/component-operator/docs/configuration/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/configuration/performance/</guid><description>&lt;h2 id="concurrency"&gt;Concurrency&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;-max-concurrent-reconciles&lt;/code&gt; flag controls how many &lt;code&gt;Component&lt;/code&gt; objects can be reconciled simultaneously. Each reconciliation worker handles one component at a time: fetching the source artifact, rendering the manifests, applying or deleting dependent objects, and updating the component&amp;rsquo;s status.&lt;/p&gt;
&lt;p&gt;The default of &lt;code&gt;5&lt;/code&gt; concurrent workers is suitable for small to medium clusters with up to a few hundred components. For larger deployments, consider increasing this value.&lt;/p&gt;
&lt;p&gt;Factors that influence the right setting:&lt;/p&gt;</description></item><item><title>Scenario 1: Helm</title><link>https://sap.github.io/component-operator/docs/getting-started/scenario-helm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/getting-started/scenario-helm/</guid><description>&lt;p&gt;Deploy &lt;a href="https://github.com/stefanprodan/podinfo"&gt;podinfo&lt;/a&gt; using its OCI-hosted Helm chart. The equivalent plain Helm command would be:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade -i podinfo oci://ghcr.io/stefanprodan/charts/podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With component-operator, a Flux &lt;code&gt;HelmRepository&lt;/code&gt; and &lt;code&gt;HelmChart&lt;/code&gt; object serve the chart artifact, and a &lt;code&gt;Component&lt;/code&gt; drives the deployment lifecycle.&lt;/p&gt;
&lt;h2 id="1-create-the-flux-source-objects"&gt;1. Create the Flux source objects&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000"&gt;# podinfo-helm-source.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apiVersion: source.toolkit.fluxcd.io/v1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind: HelmRepository
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; namespace: default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; type: oci
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; url: oci://ghcr.io/stefanprodan/charts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; interval: 5m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apiVersion: source.toolkit.fluxcd.io/v1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind: HelmChart
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; namespace: default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; chart: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sourceRef:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kind: HelmRepository
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; interval: 5m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f podinfo-helm-source.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-create-the-component"&gt;2. Create the Component&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000"&gt;# podinfo-helm.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apiVersion: core.cs.sap.com/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind: Component
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; namespace: default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sourceRef:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fluxHelmChart:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f podinfo-helm.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-verify"&gt;3. Verify&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get component podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -l app.kubernetes.io/name=podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="4-cleanup"&gt;4. Cleanup&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete component podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete helmchart podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete helmrepository podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;Continue with &lt;a href="../scenario-kustomize"&gt;Scenario 2: Kustomize&lt;/a&gt; to deploy the same application from a Git repository.&lt;/p&gt;</description></item><item><title>Deploying to a Remote Cluster</title><link>https://sap.github.io/component-operator/docs/tutorials/kubeconfig/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/tutorials/kubeconfig/</guid><description>&lt;p&gt;This tutorial deploys a resource to a second, &lt;strong&gt;remote&lt;/strong&gt; Kubernetes cluster. It demonstrates &lt;code&gt;spec.kubeConfig&lt;/code&gt; for targeting a remote cluster, and the &lt;code&gt;mustLocalLookup&lt;/code&gt; template function, which reads objects from the &lt;strong&gt;local&lt;/strong&gt; cluster even when the component is deploying to a remote one.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;You need two clusters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local cluster&lt;/strong&gt; (&lt;code&gt;kind&lt;/code&gt;) — hosts Flux source-controller and component-operator. If you don&amp;rsquo;t have one yet, the &lt;a href="../../getting-started/setup"&gt;Cluster Setup&lt;/a&gt; guide walks you through creating it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remote cluster&lt;/strong&gt; (&lt;code&gt;kind-target&lt;/code&gt;) — the deployment target. No Flux or component-operator installation is needed here. Create it now:&lt;/p&gt;</description></item><item><title>Drift Detection</title><link>https://sap.github.io/component-operator/docs/usage/drift-detection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/drift-detection/</guid><description>&lt;h2 id="object-digest"&gt;Object Digest&lt;/h2&gt;
&lt;p&gt;Whenever a dependent object is to be applied to the cluster, a digest is calculated for the object. This digest value is persisted as annotation &lt;code&gt;component-operator.cs.sap.com/digest&lt;/code&gt;. The object is considered as synced if the new digest value equals the currently persisted one, and as out of sync otherwise.&lt;/p&gt;
&lt;p&gt;If the object is out of sync, component-operator reapplies it to the Kubernetes API, including the new digest value. If the object is in sync, it will normally not be reapplied, with one exception: after the effective reapply interval, the object is force-reapplied. This ensures that manual out-of-band changes are reverted, and other glitches get fixed.&lt;/p&gt;</description></item><item><title>Helm Chart</title><link>https://sap.github.io/component-operator/docs/installation/helm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/installation/helm/</guid><description>&lt;p&gt;The recommended way to install component-operator is via the official Helm chart. The chart source is hosted at &lt;a href="https://github.com/SAP/component-operator/tree/main/chart"&gt;&lt;code&gt;github.com/SAP/component-operator/tree/main/chart&lt;/code&gt;&lt;/a&gt; and published to the GitHub OCI registry.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --install component-operator &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; oci://ghcr.io/sap/component-operator/charts/component-operator &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace flux-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To pin to a specific version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --install component-operator &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; oci://ghcr.io/sap/component-operator/charts/component-operator &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --version &amp;lt;version&amp;gt; &lt;span style="color:#a31515"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace flux-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Refer to the &lt;a href="https://github.com/SAP/component-operator/tree/main/chart"&gt;chart documentation&lt;/a&gt; for the full list of available Helm values.&lt;/p&gt;
&lt;p&gt;Note: if you want to deploy component-operator into a different namespace (instead of flux-system), then you have to allow the component-operator pod to access the source-controller running flux-system.&lt;/p&gt;</description></item><item><title>Scenario 2: Kustomize</title><link>https://sap.github.io/component-operator/docs/getting-started/scenario-kustomize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/getting-started/scenario-kustomize/</guid><description>&lt;p&gt;Deploy &lt;a href="https://github.com/stefanprodan/podinfo"&gt;podinfo&lt;/a&gt; using the Kustomization at &lt;a href="https://github.com/stefanprodan/podinfo/tree/master/kustomize"&gt;&lt;code&gt;github.com/stefanprodan/podinfo//kustomize&lt;/code&gt;&lt;/a&gt;. A Flux &lt;code&gt;GitRepository&lt;/code&gt; serves the repository content, and the &lt;code&gt;Component&lt;/code&gt; selects the &lt;code&gt;kustomize&lt;/code&gt; subdirectory as its source path.&lt;/p&gt;
&lt;h2 id="1-create-the-flux-gitrepository"&gt;1. Create the Flux GitRepository&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000"&gt;# podinfo-git-source.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apiVersion: source.toolkit.fluxcd.io/v1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind: GitRepository
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; interval: 5m
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; url: https://github.com/stefanprodan/podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ref:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; branch: master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f podinfo-git-source.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-create-the-component"&gt;2. Create the Component&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000"&gt;# podinfo-kustomize.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apiVersion: core.cs.sap.com/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kind: Component
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; namespace: default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sourceRef:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fluxGitRepository:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path: kustomize
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f podinfo-kustomize.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-verify"&gt;3. Verify&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get component podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -l app=podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="4-cleanup"&gt;4. Cleanup&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete component podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete gitrepository podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;Continue to &lt;a href="../next-steps"&gt;Next Steps&lt;/a&gt; to explore what component-operator has to offer beyond the basics.&lt;/p&gt;</description></item><item><title>Nesting Components</title><link>https://sap.github.io/component-operator/docs/tutorials/nesting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/tutorials/nesting/</guid><description>&lt;p&gt;This tutorial demonstrates &lt;strong&gt;nested components referencing the same source&lt;/strong&gt;: a pattern where one &lt;code&gt;Component&lt;/code&gt; (the outer) creates and manages another &lt;code&gt;Component&lt;/code&gt; (the inner) as one of its dependent objects. Combining this with source pinning ensures both components consistently reconcile against the same state of the referenced source.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;You need a Kubernetes cluster with Flux source-controller and component-operator installed. If you don&amp;rsquo;t have one yet, follow the &lt;a href="../../getting-started/setup"&gt;Cluster Setup&lt;/a&gt; guide.&lt;/p&gt;
&lt;h2 id="what-you-will-build"&gt;What you will build&lt;/h2&gt;
&lt;p&gt;A single &lt;code&gt;Blueprint&lt;/code&gt; (&lt;code&gt;nesting&lt;/code&gt;) contains two subdirectories:&lt;/p&gt;</description></item><item><title>Next Steps</title><link>https://sap.github.io/component-operator/docs/getting-started/next-steps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/getting-started/next-steps/</guid><description>&lt;p&gt;You&amp;rsquo;ve deployed podinfo with component-operator — here are the recommended next steps.&lt;/p&gt;
&lt;h2 id="learn-more-about-usage"&gt;Learn more about usage&lt;/h2&gt;
&lt;p&gt;The &lt;a href="../../usage"&gt;Usage&lt;/a&gt; section covers all the concepts you&amp;rsquo;ll need for real-world deployments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../../usage/sources"&gt;Sources&lt;/a&gt; — GitRepository, OCIRepository, Bucket, HelmChart, and Blueprint source types&lt;/li&gt;
&lt;li&gt;&lt;a href="../../usage/manifests"&gt;Manifests&lt;/a&gt; — Helm and Kustomize rendering, values, template functions&lt;/li&gt;
&lt;li&gt;&lt;a href="../../usage/drift-detection"&gt;Drift Detection&lt;/a&gt; — how component-operator detects and corrects configuration drift&lt;/li&gt;
&lt;li&gt;&lt;a href="../../usage/dependents"&gt;Dependent Objects&lt;/a&gt; — apply/delete ordering, update and delete policies&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="explore-the-api-reference"&gt;Explore the API reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../../reference/component"&gt;Component&lt;/a&gt; — full field reference for the &lt;code&gt;Component&lt;/code&gt; custom resource&lt;/li&gt;
&lt;li&gt;&lt;a href="../../reference/blueprint"&gt;Blueprint&lt;/a&gt; — in-cluster manifest template source&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configure-the-operator"&gt;Configure the operator&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../../configuration/flags"&gt;Command-line Flags&lt;/a&gt; — runtime flags including concurrency and service account defaults&lt;/li&gt;
&lt;li&gt;&lt;a href="../../configuration/performance"&gt;Performance&lt;/a&gt; — sizing guidance for larger clusters&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Status Detection</title><link>https://sap.github.io/component-operator/docs/usage/status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/status/</guid><description>&lt;p&gt;Component-operator needs to determine whether each dependent object has reached a ready state before proceeding to the next &lt;a href="../dependents"&gt;apply wave&lt;/a&gt; or completing the component reconciliation. The readiness check is based on the &lt;a href="https://pkg.go.dev/sigs.k8s.io/cli-utils/pkg/kstatus/status"&gt;kstatus&lt;/a&gt; library, with additional tuning capabilities.&lt;/p&gt;
&lt;h2 id="how-kstatus-works"&gt;How kstatus Works&lt;/h2&gt;
&lt;p&gt;For most resources, vanilla kstatus uses the following algorithm to determine if a Kubernetes object is ready (a special logic applies for some builtin types):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1 — observedGeneration check:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Does the object have status.observedGeneration?
 → Yes: Does status.observedGeneration equal metadata.generation?
 → Yes: proceed to readyCondition check
 → No: object is NOT ready (generation mismatch)
 → No: proceed to readyCondition check
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 2 — readyCondition check:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Target Namespace and Name</title><link>https://sap.github.io/component-operator/docs/usage/target-namespace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/target-namespace/</guid><description>&lt;p&gt;The optional fields &lt;code&gt;spec.namespace&lt;/code&gt; and &lt;code&gt;spec.name&lt;/code&gt; customize the deployment namespace and name of the component, as defined by component-operator-runtime.&lt;/p&gt;
&lt;h2 id="defaulting"&gt;Defaulting&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;spec.namespace&lt;/code&gt; is not set, the target namespace defaults to &lt;code&gt;metadata.namespace&lt;/code&gt; — that is, the same namespace in which the &lt;code&gt;Component&lt;/code&gt; object itself resides.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;spec.name&lt;/code&gt; is not set, the target name defaults to &lt;code&gt;metadata.name&lt;/code&gt; — the name of the &lt;code&gt;Component&lt;/code&gt; object.&lt;/p&gt;
&lt;h3 id="effect-on-dependent-objects"&gt;Effect on Dependent Objects&lt;/h3&gt;
&lt;p&gt;The target namespace is passed to the manifest generator. Any namespaced dependent objects whose manifest does not specify an explicit namespace will be placed in this target namespace. This allows a single set of manifests to be deployed into different namespaces simply by varying &lt;code&gt;spec.namespace&lt;/code&gt; across Component instances.&lt;/p&gt;</description></item><item><title>Dependents Lifecycle</title><link>https://sap.github.io/component-operator/docs/usage/dependents/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/dependents/</guid><description>&lt;h2 id="reconciliation-in-waves"&gt;Reconciliation in Waves&lt;/h2&gt;
&lt;p&gt;Component-operator supports ordered reconciliation of dependent objects using the concept of &lt;strong&gt;waves&lt;/strong&gt;. Objects are grouped into waves and processed wave by wave, in ascending order of wave number. Wave numbers can be negative, zero (the default), or positive integers in the range -32768 to 32767.&lt;/p&gt;
&lt;h3 id="apply-waves"&gt;Apply Waves&lt;/h3&gt;
&lt;p&gt;During apply (creation or update), objects are reconciled wave by wave. The next wave only begins once &lt;strong&gt;all objects of the previous wave are fully ready&lt;/strong&gt; — not just created or updated, but actually ready according to their &lt;a href="../status"&gt;status&lt;/a&gt;. Simply initiating creation or an update is not enough.&lt;/p&gt;</description></item><item><title>Dependents Annotations</title><link>https://sap.github.io/component-operator/docs/usage/annotations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/annotations/</guid><description>&lt;p&gt;The following annotations can be added to any rendered manifest to control how component-operator handles that specific dependent object. Where a component-level default exists, it is noted in the &lt;strong&gt;Component-level default&lt;/strong&gt; column.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Annotation&lt;/th&gt;
					&lt;th&gt;Values&lt;/th&gt;
					&lt;th&gt;Component-level default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/adoption-policy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;if-unowned&lt;/code&gt; (default), &lt;code&gt;never&lt;/code&gt;, &lt;code&gt;always&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;spec.adoptionPolicy&lt;/code&gt; (&lt;code&gt;IfUnowned&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;How to handle an object that already exists in the cluster. See &lt;a href="../ownership"&gt;Ownership and Adoption&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/reconcile-policy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;on-object-change&lt;/code&gt; (default), &lt;code&gt;on-object-or-component-change&lt;/code&gt;, &lt;code&gt;once&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;When the object is reconciled. See &lt;a href="../reconcile-modes"&gt;Reconcile Modes&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/update-policy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;ssa-override&lt;/code&gt; (default), &lt;code&gt;ssa-merge&lt;/code&gt;, &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;recreate&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;spec.updatePolicy&lt;/code&gt; (&lt;code&gt;SsaOverride&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;How the object is updated in the Kubernetes API. See &lt;a href="../dependents#update-policy"&gt;Dependents Lifecycle&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/delete-policy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;delete&lt;/code&gt; (default), &lt;code&gt;orphan&lt;/code&gt;, &lt;code&gt;orphan-on-apply&lt;/code&gt;, &lt;code&gt;orphan-on-delete&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;spec.deletePolicy&lt;/code&gt; (&lt;code&gt;Delete&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;What happens to the object when it becomes redundant or the component is deleted. See &lt;a href="../dependents#delete-policy"&gt;Dependents Lifecycle&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/apply-order&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;integer (default: &lt;code&gt;0&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;The wave in which the object is applied. Lower numbers are applied first. See &lt;a href="../dependents#apply-waves"&gt;Dependents Lifecycle&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/delete-order&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;integer (default: &lt;code&gt;0&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;The wave in which the object is deleted. Lower numbers are deleted first. Independent of &lt;code&gt;apply-order&lt;/code&gt;. See &lt;a href="../dependents#delete-waves"&gt;Dependents Lifecycle&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/purge-order&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;integer&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;The apply wave at the end of which the object is deleted (purged) from the cluster, while its inventory record is set to &lt;code&gt;Completed&lt;/code&gt;. See &lt;a href="../dependents#purge-orders"&gt;Dependents Lifecycle&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/reapply-interval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;duration (e.g. &lt;code&gt;30m&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;spec.reapplyInterval&lt;/code&gt; (&lt;code&gt;60m&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;How often the object is force-reapplied even when in sync. See &lt;a href="../drift-detection"&gt;Drift Detection&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;component-operator.cs.sap.com/status-hint&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;comma-separated hints (see below)&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;Tuning hints for the kstatus-based readiness check. See &lt;a href="../status"&gt;Status Detection&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="status-hint-values"&gt;Status Hint Values&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;component-operator.cs.sap.com/status-hint&lt;/code&gt; annotation accepts a comma-separated list of the following values:&lt;/p&gt;</description></item><item><title>Component Deletion</title><link>https://sap.github.io/component-operator/docs/usage/deletion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/deletion/</guid><description>&lt;p&gt;When a &lt;code&gt;Component&lt;/code&gt; object is deleted, component-operator reconciles the deletion by removing all dependent objects it manages. The process is more nuanced than a simple bulk delete, particularly around extension types.&lt;/p&gt;
&lt;h2 id="basic-deletion-flow"&gt;Basic Deletion Flow&lt;/h2&gt;
&lt;p&gt;Upon receiving a delete request, the component enters a &lt;code&gt;Deleting&lt;/code&gt; state. Dependent objects are then deleted according to their &lt;a href="../dependents"&gt;delete order&lt;/a&gt;, wave by wave. Each wave only starts once all objects of the previous wave have fully disappeared from the cluster.&lt;/p&gt;</description></item><item><title>Intervals and Timing</title><link>https://sap.github.io/component-operator/docs/usage/timing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/timing/</guid><description>&lt;p&gt;Reconciliation timing is about&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how often a component is reconciled in success state&lt;/li&gt;
&lt;li&gt;how often a component is reconciled in various error states&lt;/li&gt;
&lt;li&gt;how often a component or single dependent object is force-reapplied to the Kubernetes cluster&lt;/li&gt;
&lt;li&gt;temporarily disabling (suspending) reconciliation of a component.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="reconciliation-intervals"&gt;Reconciliation Intervals&lt;/h2&gt;
&lt;h3 id="requeue-interval"&gt;Requeue Interval&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;spec.requeueInterval&lt;/code&gt; defines how often a component is re-reconciled after a successful reconciliation.&lt;/p&gt;
&lt;p&gt;Requeues are not particularly expensive, but depending on the number of components in a cluster it might be necessary to increase the requeue interval.&lt;/p&gt;</description></item><item><title>Ownership and Adoption</title><link>https://sap.github.io/component-operator/docs/usage/ownership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/ownership/</guid><description>&lt;p&gt;Component-operator tracks ownership of dependent objects using a dedicated label: &lt;code&gt;component-operator.cs.sap.com/owner-id&lt;/code&gt;. This label is set on every object managed by a component and contains a globally unique identifier for the owning component (incorporating a unique ID of the component&amp;rsquo;s Kubernetes cluster). It serves as the basis for all ownership and adoption decisions.&lt;/p&gt;
&lt;h2 id="adoption-policy"&gt;Adoption Policy&lt;/h2&gt;
&lt;p&gt;It can happen that a dependent object already exists in the cluster when a component is applied — either because it was created manually, by another tool, or by a different component. The &lt;code&gt;spec.adoptionPolicy&lt;/code&gt; field on the component
(and the per-object annotation &lt;code&gt;component-operator.cs.sap.com/adoption-policy&lt;/code&gt;) controls how component-operator handles this situation.&lt;/p&gt;</description></item><item><title>Reconcile Modes</title><link>https://sap.github.io/component-operator/docs/usage/reconcile-modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/reconcile-modes/</guid><description>&lt;p&gt;By default, component-operator reconciles a dependent object whenever its generated manifest changes.&lt;/p&gt;
&lt;p&gt;More details about drift detection can be found &lt;a href="../drift-detection"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="reconcile-policy-values"&gt;Reconcile Policy Values&lt;/h2&gt;
&lt;p&gt;This behavior can be customized per object using the annotation &lt;code&gt;component-operator.cs.sap.com/reconcile-policy&lt;/code&gt;.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Value&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;on-object-change&lt;/code&gt; (default)&lt;/td&gt;
					&lt;td&gt;The object is reconciled whenever its generated manifest changes.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;on-object-or-component-change&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The object is reconciled whenever its manifest changes, or whenever the component itself changes (as identified by a change in the component&amp;rsquo;s generation).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;once&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The object is reconciled exactly once (on creation). It is never updated again by component-operator, regardless of changes to the manifest or the component.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In the &lt;code&gt;on-object-or-component-change&lt;/code&gt; case the object digest additionally incorporates a deep digest of the component.
In the &lt;code&gt;once&lt;/code&gt; case, the object digest is set to &lt;code&gt;__once__&lt;/code&gt;. Note that, when changing the effective reconcile policy to &lt;code&gt;once&lt;/code&gt;, then one last reconcile happens, caused by the change of the policy.&lt;/p&gt;</description></item><item><title>Impersonation and Remote Clusters</title><link>https://sap.github.io/component-operator/docs/usage/impersonation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/impersonation/</guid><description>&lt;p&gt;By default, component-operator uses its own controller kubeconfig to interact with the Kubernetes API when reconciling a &lt;code&gt;Component&lt;/code&gt;. Both impersonation and remote cluster deployment allow you to override this default.&lt;/p&gt;
&lt;h2 id="service-account-impersonation"&gt;Service Account Impersonation&lt;/h2&gt;
&lt;p&gt;If &lt;code&gt;spec.serviceAccountName&lt;/code&gt; is set, the controller impersonates that service account (relative to the component&amp;rsquo;s namespace) when applying and deleting dependent objects. This allows fine-grained access control: the service account determines what the component is permitted to create, modify, and delete.&lt;/p&gt;</description></item><item><title>Timeout and Stickiness</title><link>https://sap.github.io/component-operator/docs/usage/timeout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/timeout/</guid><description>&lt;h2 id="timeout"&gt;Timeout&lt;/h2&gt;
&lt;p&gt;The field &lt;code&gt;spec.timeout&lt;/code&gt; defines how long dependent objects are expected to take to reach a ready state after being applied. If not all dependents are ready within this period, the component&amp;rsquo;s state transitions from &lt;code&gt;Processing&lt;/code&gt; to &lt;code&gt;Error&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timeout: 10m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If &lt;code&gt;spec.timeout&lt;/code&gt; is not set, it defaults to the effective requeue interval.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; reaching the timeout does not stop reconciliation. Component-operator continues to attempt reconciliation at the normal requeue interval. The timeout only affects the reported state. Whenever the component itself or any of its referenced objects (e.g., referenced secrets) change, the timeout countdown resets.&lt;/p&gt;</description></item><item><title>Dependencies</title><link>https://sap.github.io/component-operator/docs/usage/dependencies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/dependencies/</guid><description>&lt;p&gt;Component-operator supports declaring dependencies between &lt;code&gt;Component&lt;/code&gt; objects via &lt;code&gt;spec.dependencies&lt;/code&gt;. This allows you to express that a component must not be applied or deleted until other components have reached a certain state.&lt;/p&gt;
&lt;h2 id="declaring-dependencies"&gt;Declaring Dependencies&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dependencies:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - name: database &lt;span style="color:#008000"&gt;# same namespace as this component&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - namespace: infra
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name: cert-manager &lt;span style="color:#008000"&gt;# cross-namespace reference&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If &lt;code&gt;namespace&lt;/code&gt; is omitted, the dependency is assumed to reside in the same namespace as the declaring component.&lt;/p&gt;</description></item><item><title>Notifications</title><link>https://sap.github.io/component-operator/docs/usage/notifications/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sap.github.io/component-operator/docs/usage/notifications/</guid><description>&lt;p&gt;Component-operator can emit events to the &lt;a href="https://fluxcd.io/flux/components/notification/"&gt;Flux notification controller&lt;/a&gt;, enabling integration with Flux&amp;rsquo;s alerting and notification infrastructure.&lt;/p&gt;
&lt;h2 id="enabling-event-streaming"&gt;Enabling Event Streaming&lt;/h2&gt;
&lt;p&gt;Start the component-operator controller with the &lt;code&gt;--events-address&lt;/code&gt; flag pointing to the address of the Flux notification controller:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;--events-address=http://notification-controller.flux-system.svc.cluster.local/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When set, component-operator will stream reconciliation events (such as successful applies, errors, and state transitions) to the notification controller, which can then forward them to configured alert providers (Slack, PagerDuty, etc.).&lt;/p&gt;
&lt;h2 id="patching-the-flux-alert-crd"&gt;Patching the Flux Alert CRD&lt;/h2&gt;
&lt;p&gt;To fully leverage Flux notifications — including the ability to create &lt;code&gt;Alert&lt;/code&gt; objects that reference &lt;code&gt;Component&lt;/code&gt; as an event source — the &lt;code&gt;alerts.notification.toolkit.fluxcd.io&lt;/code&gt; CRD shipped with Flux must be patched to add &lt;code&gt;Component&lt;/code&gt; as an allowed event source kind.&lt;/p&gt;</description></item></channel></rss>