// This assembly is included in the following assemblies:
//
// assembly-deploy-intro.adoc

[id='assembly-operators-{context}']

= Strimzi operators

[role="_abstract"]
Strimzi uses operators to deploy and manage Kafka components.
The operators continuously monitor Strimzi custom resources (like `Kafka`, `KafkaTopic`, and `KafkaUser`) and reconcile the state of Kafka components to match their configuration.

This reconciliation process involves three main operations:

Creation::
When you create a Strimzi custom resource, the responsible operator detects it and takes the necessary actions to create the component. 
This might involve creating Kubernetes resources, such as `Deployment`, `Pod`, `Service`, and `ConfigMap`, or configuring items inside the Kafka cluster itself, such as topics and users.

Update::
Each time you update a custom resource, the operator detects the change and applies a corresponding update if the changes are valid. 
This could trigger a rolling update of pods or reconfigure a resource within Kafka.
Rolling updates maintain the availability of the Kafka cluster, but can lead to service disruption in the Kafka clients.

Deletion::
When you delete a custom resource, the operator detects the deletion and acts to remove the component.
Most dependent resources are deleted automatically by Kubernetes garbage collection.
The exact behavior depends on the resource type.
For a Kafka cluster, PVCs are retained by default to prevent data loss.
For a Kafka topic, the topic is fully deleted from the Apache Kafka cluster.

Strimzi provides the following operators, each responsible for different aspects of a Kafka deployment:

Cluster Operator (required):: The Cluster Operator is the core operator and must be deployed first. 
It handles the deployment and lifecycle of Apache Kafka clusters on Kubernetes, automating the setup of Kafka nodes and related resources.
+
Additionally, Strimzi provides *Drain Cleaner*, which is deployed separately.
Drain Cleaner supports the Cluster Operator in managing pod evictions for Kafka clusters.

Entity Operator (recommended):: The Entity Operator can be deployed by the Cluster Operator.
It runs in a single pod and includes one or both of the following operators:
+
--
* *Topic Operator* to manage Kafka topics.
* *User Operator* to manage Kafka users.
--
+
Each operator runs in a separate container within the Entity Operator pod.

ifdef::Section[]
Access Operator (optional):: Manages and shares Kafka cluster connection details.
It is deployed independently of the Cluster Operator.
endif::Section[]

NOTE: The Topic Operator and User Operator can also be deployed standalone (without the Entity Operator) to manage topics and users for a Kafka cluster that is not managed by Strimzi.

//operator namespace 
include::../../modules/operators/con-operators-namespaces.adoc[leveloffset=+1]
//cluster operator's management of rbac resources
include::../../modules/operators/ref-operator-cluster-rbac-resources.adoc[leveloffset=+1]
//cluster operator's management of pod resources
include::../../modules/configuring/con-pod-management.adoc[leveloffset=+1]
//warnings on locks for cluster operations
include::../../modules/configuring/con-failed-lock-warnings.adoc[leveloffset=+1]