Skip to main content
All operator CRDs

SchemaRegistry

Expand a field to see its description, example, and default behavior. Nested fields are grouped under their parent.

API group
krabka.io
Scope
Namespaced
Resource name
schemaregistries
Short names
sr

Required fields must be present when their parent object exists. [] denotes an array item; {key} denotes a map value. status is written by the operator. Reconcile-time checks and runtime defaults can add requirements beyond the schema.

Examples are illustrative JSON values. Open “View JSON example” for an object or array. Adapt names, endpoints, and credentials to your cluster. Kubernetes applies schema defaults when the containing object exists. Runtime and omission notes describe operator behavior. Status examples show reported data.

Runtime notes and domain examples were reviewed against operator source at b409b56.

View the complete CRD manifest at 618d621
Example manifest

This example includes the required spec fields. Adapt its values and create any referenced resources before applying it.

apiVersion: krabka.io/v1alpha1
kind: SchemaRegistry
metadata:
  name: example
  namespace: default
  labels:
    krabka.io/cluster: my-cluster
spec:
  replicas: 1

krabka.io/v1alpha1

Served API version · Storage version · 87 schema entries

Complete OpenAPI schema (JSON)
{
  "description": "Auto-generated derived type for SchemaRegistrySpec via `CustomResource`",
  "properties": {
    "spec": {
      "properties": {
        "authentication": {
          "description": "REST authentication.",
          "nullable": true,
          "properties": {
            "basic": {
              "nullable": true,
              "properties": {
                "usersSecretKey": {
                  "description": "Secret key holding the htpasswd-style file. Default `users`.",
                  "nullable": true,
                  "type": "string"
                },
                "usersSecretName": {
                  "description": "Secret with one key that holds `user:cred` entries, one on each\nline. The cred is plaintext or a `$2…` bcrypt hash. The operator\nmounts the key as a file and gives it in `--basic-auth-file`.",
                  "type": "string"
                }
              },
              "required": [
                "usersSecretName"
              ],
              "type": "object"
            },
            "bearer": {
              "nullable": true,
              "properties": {
                "jwksEndpointUri": {
                  "description": "JWKS endpoint URI. It is necessary when `mode` is `Jwks`.",
                  "nullable": true,
                  "type": "string"
                },
                "jwksExpectedAudience": {
                  "description": "Expected `aud` claim value.",
                  "nullable": true,
                  "type": "string"
                },
                "jwksPrincipalClaim": {
                  "description": "JWT claim to use as the principal when the mode is `Jwks`. It\noverrides `principalClaim` on the JWKS paths.",
                  "nullable": true,
                  "type": "string"
                },
                "jwksRefresh": {
                  "description": "JWKS key-set refresh interval. Default `1m`.",
                  "nullable": true,
                  "type": "string"
                },
                "jwksTlsSecretName": {
                  "description": "Name of the Secret whose `ca.crt` key the operator mounts and\ngives in `--bearer-jwks-ca`.",
                  "nullable": true,
                  "type": "string"
                },
                "jwksValidIssuer": {
                  "description": "Expected `iss` claim value.",
                  "nullable": true,
                  "type": "string"
                },
                "mode": {
                  "enum": [
                    "Unsecured",
                    "Jwks"
                  ],
                  "type": "string"
                },
                "principalClaim": {
                  "description": "JWT claim used as the principal name. Default `sub`.",
                  "nullable": true,
                  "type": "string"
                }
              },
              "required": [
                "mode"
              ],
              "type": "object"
            },
            "realm": {
              "description": "`WWW-Authenticate: basic realm=\"<realm>\"`.",
              "nullable": true,
              "type": "string"
            },
            "requireAuth": {
              "default": false,
              "description": "Reject anonymous requests with 401.",
              "type": "boolean"
            }
          },
          "type": "object"
        },
        "authorization": {
          "description": "REST authorization, based on the Kafka ACLs.",
          "nullable": true,
          "properties": {
            "aclRefresh": {
              "description": "ACL-cache refresh interval. Default `30s`.",
              "nullable": true,
              "type": "string"
            },
            "enabled": {
              "default": false,
              "type": "boolean"
            },
            "superUsers": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object"
        },
        "bootstrapServers": {
          "description": "Bootstrap override for an external Kafka that the operator does\nnot manage. When unset, the operator derives the bootstrap from the\ninternal listener of the Kafka with the `krabka.io/cluster` label.\nSettings in `kafka_client` secure both external and managed bootstrap\nconnections.",
          "nullable": true,
          "type": "string"
        },
        "clientId": {
          "description": "Kafka client id used by the registry. Default `krabka-schema-registry`.",
          "minLength": 1,
          "nullable": true,
          "type": "string"
        },
        "groupId": {
          "description": "Election group id. Default `schema-registry`.",
          "nullable": true,
          "type": "string"
        },
        "healthChecks": {
          "description": "Kubernetes probe timing overrides.",
          "nullable": true,
          "properties": {
            "livenessInitialDelaySeconds": {
              "format": "int32",
              "minimum": 0,
              "nullable": true,
              "type": "integer"
            },
            "livenessPeriodSeconds": {
              "format": "int32",
              "minimum": 1,
              "nullable": true,
              "type": "integer"
            },
            "readinessInitialDelaySeconds": {
              "format": "int32",
              "minimum": 0,
              "nullable": true,
              "type": "integer"
            },
            "readinessPeriodSeconds": {
              "format": "int32",
              "minimum": 1,
              "nullable": true,
              "type": "integer"
            },
            "startupFailureThreshold": {
              "description": "Failed startup probes before the kubelet restarts the container.\nDefault 60.\n\nSet it so that `startupPeriodSeconds` times this value covers the\nlongest replay of the schemas topic. The defaults allow 5 minutes.",
              "format": "int32",
              "minimum": 1,
              "nullable": true,
              "type": "integer"
            },
            "startupPeriodSeconds": {
              "description": "Seconds between two startup probes. Default 5.\n\nThe registry binds its REST port only after it replays the schemas\ntopic. The startup probe holds the liveness probe back until then.",
              "format": "int32",
              "minimum": 1,
              "nullable": true,
              "type": "integer"
            }
          },
          "type": "object"
        },
        "image": {
          "description": "Container image. Defaults to the operator's\n`--default-schema-registry-image`.",
          "nullable": true,
          "type": "string"
        },
        "kafkaClient": {
          "description": "Client security from the SR to the broker, with SASL and TLS. It\nmaps to the `--kafka-*` flags.",
          "nullable": true,
          "properties": {
            "sasl": {
              "description": "SASL credentials for the connection from the SR to the broker.",
              "nullable": true,
              "properties": {
                "mechanism": {
                  "description": "For example `PLAIN`, `SCRAM-SHA-256`, or `SCRAM-SHA-512`.",
                  "type": "string"
                },
                "secretRef": {
                  "description": "Name of the Secret that holds the `username` and `password` keys.",
                  "type": "string"
                }
              },
              "required": [
                "mechanism",
                "secretRef"
              ],
              "type": "object"
            },
            "securityProtocol": {
              "description": "For example `PLAINTEXT`, `SASL_PLAINTEXT`, `SSL`, or `SASL_SSL`.",
              "nullable": true,
              "type": "string"
            },
            "tls": {
              "description": "TLS settings for the connection from the SR to the broker.",
              "nullable": true,
              "properties": {
                "caSecretName": {
                  "description": "Secret with a `ca.crt` key that gives the broker CA.",
                  "nullable": true,
                  "type": "string"
                },
                "serverNameOverride": {
                  "description": "Override the server name for TLS SNI and hostname verification.",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            }
          },
          "type": "object"
        },
        "replicas": {
          "description": "Number of stateless replicas. All of them join the election\ngroup. Default 1.",
          "format": "int32",
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        "resources": {
          "description": "Pod resource requirements.",
          "nullable": true,
          "properties": {
            "claims": {
              "description": "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.\n\nThis is an alpha field and requires enabling the DynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
              "items": {
                "description": "ResourceClaim references one entry in PodSpec.ResourceClaims.",
                "properties": {
                  "name": {
                    "description": "Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.",
                    "type": "string"
                  },
                  "request": {
                    "description": "Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.",
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              },
              "type": "array"
            },
            "limits": {
              "additionalProperties": {
                "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` <quantity>        ::= <signedNumber><suffix>\n\n\t(Note that <suffix> may be empty, from the \"\" case in <decimalSI>.)\n\n<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= \"+\" | \"-\" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n<decimalSI>       ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n<decimalExponent> ::= \"e\" <signedNumber> | \"E\" <signedNumber> ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.",
                "x-kubernetes-int-or-string": true
              },
              "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
              "type": "object"
            },
            "requests": {
              "additionalProperties": {
                "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` <quantity>        ::= <signedNumber><suffix>\n\n\t(Note that <suffix> may be empty, from the \"\" case in <decimalSI>.)\n\n<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= \"+\" | \"-\" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n<decimalSI>       ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n<decimalExponent> ::= \"e\" <signedNumber> | \"E\" <signedNumber> ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.",
                "x-kubernetes-int-or-string": true
              },
              "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
              "type": "object"
            }
          },
          "type": "object"
        },
        "runtime": {
          "description": "Schema Registry runtime policy.",
          "nullable": true,
          "properties": {
            "clientDispatchQueueCapacity": {
              "description": "Kafka client request-dispatch queue capacity.",
              "format": "uint",
              "minimum": 1,
              "nullable": true,
              "type": "integer"
            },
            "clientFrameMax": {
              "description": "Maximum accepted Kafka client frame size.",
              "nullable": true,
              "type": "string"
            },
            "defaultCompatibilityLevel": {
              "nullable": true,
              "type": "string"
            },
            "defaultMode": {
              "nullable": true,
              "type": "string"
            },
            "electionHeartbeatInterval": {
              "nullable": true,
              "type": "string"
            },
            "electionRebalanceTimeout": {
              "nullable": true,
              "type": "string"
            },
            "electionReconnectBackoff": {
              "nullable": true,
              "type": "string"
            },
            "electionSessionTimeout": {
              "nullable": true,
              "type": "string"
            },
            "forwardMaxBody": {
              "nullable": true,
              "type": "string"
            },
            "schemasTopicCreateTimeout": {
              "nullable": true,
              "type": "string"
            },
            "storeReaderFetchMax": {
              "nullable": true,
              "type": "string"
            },
            "storeReaderFetchMaxWait": {
              "nullable": true,
              "type": "string"
            },
            "storeReaderRetryBackoff": {
              "nullable": true,
              "type": "string"
            }
          },
          "type": "object"
        },
        "schemasTopic": {
          "description": "Backing compacted topic. Default `_schemas`.",
          "nullable": true,
          "type": "string"
        },
        "schemasTopicReplicationFactor": {
          "description": "Replication factor for `_schemas` when auto-created. Default 3.",
          "format": "int32",
          "nullable": true,
          "type": "integer"
        },
        "tls": {
          "description": "Server TLS for the HTTPS REST surface. `None` means plain HTTP.",
          "nullable": true,
          "properties": {
            "clientAuth": {
              "description": "Client-cert mode. Default `Disabled`.",
              "enum": [
                "Disabled",
                "Optional",
                "Required",
                null
              ],
              "nullable": true,
              "type": "string"
            },
            "clientCaSecretName": {
              "description": "Secret with `ca.crt` that verifies the client certs. It is\nnecessary when `clientAuth` is not Disabled.",
              "nullable": true,
              "type": "string"
            },
            "issuerRef": {
              "description": "cert-manager issuer reference. Do not set it together with\n`secretName`.",
              "nullable": true,
              "properties": {
                "group": {
                  "description": "API group. Default `cert-manager.io`.",
                  "nullable": true,
                  "type": "string"
                },
                "kind": {
                  "description": "The default is `Issuer`. Set `ClusterIssuer` for an issuer with\ncluster scope.",
                  "nullable": true,
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "secretName": {
              "description": "Secret of type kubernetes.io/tls with `tls.crt` and `tls.key`. Do\nnot set it together with `issuerRef`.",
              "nullable": true,
              "type": "string"
            }
          },
          "type": "object"
        }
      },
      "required": [
        "replicas"
      ],
      "type": "object"
    },
    "status": {
      "nullable": true,
      "properties": {
        "conditions": {
          "default": [],
          "description": "Kubernetes-style conditions: `KafkaReady`, `Available`, and\n`Ready`.",
          "items": {
            "properties": {
              "lastTransitionTime": {
                "description": "RFC3339 timestamp.",
                "type": "string"
              },
              "message": {
                "description": "Human-readable message.",
                "type": "string"
              },
              "reason": {
                "description": "CamelCase machine reason.",
                "type": "string"
              },
              "status": {
                "description": "`True`, `False`, or `Unknown`.",
                "type": "string"
              },
              "type": {
                "description": "For example, `Ready`.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "message",
              "reason",
              "status",
              "type"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "observedGeneration": {
          "description": "`metadata.generation` of the last successfully-reconciled spec.",
          "format": "int64",
          "nullable": true,
          "type": "integer"
        },
        "readyReplicas": {
          "format": "int32",
          "nullable": true,
          "type": "integer"
        },
        "replicas": {
          "format": "int32",
          "nullable": true,
          "type": "integer"
        },
        "url": {
          "description": "In-cluster REST URL that the clients use.",
          "nullable": true,
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "required": [
    "spec"
  ],
  "title": "SchemaRegistry",
  "type": "object"
}

spec

spec object Required 14 fields
Example
View JSON example
{
  "replicas": 1
}
Default No schema default
Not declared
authentication object | null Optional 4 fields

REST authentication.

Example
View JSON example
{
  "basic": {
    "usersSecretName": "schema-registry-users"
  }
}
Default No schema default
Not declared
basic object | null Optional 2 fields
Example
View JSON example
{
  "usersSecretName": "schema-registry-users"
}
Default No schema default
Not declared
usersSecretKey string | null Optional

Secret key holding the htpasswd-style file. Default users.

Example
"users"
Default Documented behavior

Default users.

#
usersSecretName string Required

Secret with one key that holds user:cred entries, one on each line. The cred is plaintext or a $2… bcrypt hash. The operator mounts the key as a file and gives it in --basic-auth-file.

Example
"schema-registry-users"
Default No schema default
Not declared
#
#
bearer object | null Optional 8 fields
Example
View JSON example
{
  "mode": "Jwks",
  "jwksEndpointUri": "https://identity.example.com/.well-known/jwks.json",
  "principalClaim": "sub"
}
Default No schema default
Not declared
jwksEndpointUri string | null Optional

JWKS endpoint URI. It is necessary when mode is Jwks.

Example
"https://identity.example.com/.well-known/jwks.json"
Default No schema default
Not declared
#
jwksExpectedAudience string | null Optional

Expected aud claim value.

Example
"schema-registry"
Default No schema default
Not declared
#
jwksPrincipalClaim string | null Optional

JWT claim to use as the principal when the mode is Jwks. It overrides principalClaim on the JWKS paths.

Example
"sub"
Default No schema default
Not declared
#
jwksRefresh string | null Optional

JWKS key-set refresh interval. Default 1m.

Example
"1m"
Default Documented behavior

Default 1m.

#
jwksTlsSecretName string | null Optional

Name of the Secret whose ca.crt key the operator mounts and gives in --bearer-jwks-ca.

Example
"identity-ca"
Default No schema default
Not declared
#
jwksValidIssuer string | null Optional

Expected iss claim value.

Example
"https://identity.example.com/"
Default No schema default
Not declared
#
mode string Required
Example
"Jwks"
Default No schema default
Not declared
Allowed values"Unsecured""Jwks"
#
principalClaim string | null Optional

JWT claim used as the principal name. Default sub.

Example
"sub"
Default Documented behavior

Default sub.

#
#
realm string | null Optional

WWW-Authenticate: basic realm="<realm>".

Example
"schema-registry"
Default No schema default
Not declared
#
requireAuth boolean Optional

Reject anonymous requests with 401.

Example
false
Default Schema default
false
#
#
authorization object | null Optional 3 fields

REST authorization, based on the Kafka ACLs.

Example
View JSON example
{
  "aclRefresh": "30s"
}
Default No schema default
Not declared
aclRefresh string | null Optional

ACL-cache refresh interval. Default 30s.

Example
"30s"
Default Documented behavior

Default 30s.

#
enabled boolean Optional
Example
false
Default Schema default
false
#
superUsers array Optional 1 field
Example
View JSON example
[
  "User:admin"
]
Default Runtime / omission

[] (no principals bypass ACL checks).

[] string Array item
Example
"User:admin"
Default No independent default
Defined by the parent
#
#
#
bootstrapServers string | null Optional

Bootstrap override for an external Kafka that the operator does not manage. When unset, the operator derives the bootstrap from the internal listener of the Kafka with the krabka.io/cluster label. Settings in kafka_client secure both external and managed bootstrap connections.

Example
"my-cluster-bootstrap.kafka.svc.cluster.local:9092"
Default Documented behavior

When unset, the operator derives the bootstrap from the internal listener of the Kafka with the krabka.io/cluster label.

#
clientId string | null Optional

Kafka client id used by the registry. Default krabka-schema-registry.

Example
"krabka-schema-registry"
Default Documented behavior

Default krabka-schema-registry.

Validation and schema details
Minimum length
1
#
groupId string | null Optional

Election group id. Default schema-registry.

Example
"schema-registry"
Default Documented behavior

Default schema-registry.

#
healthChecks object | null Optional 6 fields

Kubernetes probe timing overrides.

Example
View JSON example
{
  "livenessInitialDelaySeconds": 10
}
Default No schema default
Not declared
livenessInitialDelaySeconds integer | null (int32) Optional
Example
10
Default No schema default
Not declared
Validation and schema details
Minimum
0
#
livenessPeriodSeconds integer | null (int32) Optional
Example
10
Default No schema default
Not declared
Validation and schema details
Minimum
1
#
readinessInitialDelaySeconds integer | null (int32) Optional
Example
5
Default No schema default
Not declared
Validation and schema details
Minimum
0
#
readinessPeriodSeconds integer | null (int32) Optional
Example
10
Default No schema default
Not declared
Validation and schema details
Minimum
1
#
startupFailureThreshold integer | null (int32) Optional

Failed startup probes before the kubelet restarts the container. Default 60.

Set it so that startupPeriodSeconds times this value covers the longest replay of the schemas topic. The defaults allow 5 minutes.

Example
60
Default Documented behavior

Default 60. The defaults allow 5 minutes.

Validation and schema details
Minimum
1
#
startupPeriodSeconds integer | null (int32) Optional

Seconds between two startup probes. Default 5.

The registry binds its REST port only after it replays the schemas topic. The startup probe holds the liveness probe back until then.

Example
5
Default Documented behavior

Default 5.

Validation and schema details
Minimum
1
#
#
image string | null Optional

Container image. Defaults to the operator's --default-schema-registry-image.

Example
"registry.example.com/krabka/schema-registry:1.0.0"
Default Runtime / omission

Use the operator's --default-schema-registry-image value when omitted.

#
kafkaClient object | null Optional 3 fields

Client security from the SR to the broker, with SASL and TLS. It maps to the --kafka-* flags.

Example
View JSON example
{
  "securityProtocol": "SASL_SSL",
  "sasl": {
    "mechanism": "SCRAM-SHA-512",
    "secretRef": "schema-registry-kafka"
  },
  "tls": {
    "caSecretName": "my-cluster-ca"
  }
}
Default No schema default
Not declared
sasl object | null Optional 2 fields

SASL credentials for the connection from the SR to the broker.

Example
View JSON example
{
  "mechanism": "SCRAM-SHA-512",
  "secretRef": "schema-registry-kafka"
}
Default No schema default
Not declared
mechanism string Required

For example PLAIN, SCRAM-SHA-256, or SCRAM-SHA-512.

Example
"SCRAM-SHA-512"
Default No schema default
Not declared
#
secretRef string Required

Name of the Secret that holds the username and password keys.

Example
"schema-registry-kafka"
Default No schema default
Not declared
#
#
securityProtocol string | null Optional

For example PLAINTEXT, SASL_PLAINTEXT, SSL, or SASL_SSL.

Example
"SASL_SSL"
Default No schema default
Not declared
#
tls object | null Optional 2 fields

TLS settings for the connection from the SR to the broker.

Example
View JSON example
{
  "caSecretName": "my-cluster-ca"
}
Default No schema default
Not declared
caSecretName string | null Optional

Secret with a ca.crt key that gives the broker CA.

Example
"my-cluster-ca"
Default No schema default
Not declared
#
serverNameOverride string | null Optional

Override the server name for TLS SNI and hostname verification.

Example
"my-cluster-bootstrap.kafka.svc.cluster.local"
Default No schema default
Not declared
#
#
#
replicas integer (int32) Required

Number of stateless replicas. All of them join the election group. Default 1.

Example
1
Default Runtime / omission

Required; no CRD default. 1 is the documented baseline.

Validation and schema details
Maximum
1000
Minimum
1
#
resources object | null Optional 3 fields

Pod resource requirements.

Example
View JSON example
{
  "claims": [
    {
      "name": "example"
    }
  ]
}
Default No schema default
Not declared
claims array Optional 1 field

Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.

This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.

This field is immutable. It can only be set for containers.

Example
View JSON example
[
  {
    "name": "example"
  }
]
Default No schema default
Not declared
[] object Array item 2 fields

ResourceClaim references one entry in PodSpec.ResourceClaims.

Example
View JSON example
{
  "name": "example"
}
Default No independent default
Defined by the parent
name string Required

Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container.

Example
"example"
Default No schema default
Not declared
#
request string Optional

Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request.

Example
"example"
Default No schema default
Not declared
#
#
#
limits object Optional 1 field

Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Example
View JSON example
{
  "example": "256Mi"
}
Default No schema default
Not declared
Validation and schema details
Additional properties
{
  "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` <quantity>        ::= <signedNumber><suffix>\n\n\t(Note that <suffix> may be empty, from the \"\" case in <decimalSI>.)\n\n<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= \"+\" | \"-\" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n<decimalSI>       ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n<decimalExponent> ::= \"e\" <signedNumber> | \"E\" <signedNumber> ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.",
  "x-kubernetes-int-or-string": true
}
{key} integer | string Map value

Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.

The serialization format is:

<quantity>        ::= <signedNumber><suffix>

	(Note that <suffix> may be empty, from the "" case in <decimalSI>.)

<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= "+" | "-" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei

	(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)

<decimalSI>       ::= m | "" | k | M | G | T | P | E

	(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)

<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber>

No matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.

When a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.

Before serializing, Quantity will be put in "canonical form". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:

  • No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.

The sign will be omitted unless the number is negative.

Examples:

  • 1.5 will be serialized as "1500m" - 1.5Gi will be serialized as "1536Mi"

Note that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.

Non-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)

This format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.

Example
"256Mi"
Default No independent default
Defined by the parent
Validation and schema details
x-kubernetes-int-or-string
true
#
#
requests object Optional 1 field

Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

Example
View JSON example
{
  "example": "256Mi"
}
Default Documented behavior

If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value.

Validation and schema details
Additional properties
{
  "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` <quantity>        ::= <signedNumber><suffix>\n\n\t(Note that <suffix> may be empty, from the \"\" case in <decimalSI>.)\n\n<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= \"+\" | \"-\" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n<decimalSI>       ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n<decimalExponent> ::= \"e\" <signedNumber> | \"E\" <signedNumber> ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.",
  "x-kubernetes-int-or-string": true
}
{key} integer | string Map value

Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.

The serialization format is:

<quantity>        ::= <signedNumber><suffix>

	(Note that <suffix> may be empty, from the "" case in <decimalSI>.)

<digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= "+" | "-" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei

	(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)

<decimalSI>       ::= m | "" | k | M | G | T | P | E

	(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)

<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber>

No matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.

When a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.

Before serializing, Quantity will be put in "canonical form". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:

  • No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.

The sign will be omitted unless the number is negative.

Examples:

  • 1.5 will be serialized as "1500m" - 1.5Gi will be serialized as "1536Mi"

Note that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.

Non-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)

This format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.

Example
"256Mi"
Default No independent default
Defined by the parent
Validation and schema details
x-kubernetes-int-or-string
true
#
#
#
runtime object | null Optional 13 fields

Schema Registry runtime policy.

Example
View JSON example
{
  "clientDispatchQueueCapacity": 1024
}
Default No schema default
Not declared
clientDispatchQueueCapacity integer | null (uint) Optional

Kafka client request-dispatch queue capacity.

Example
1024
Default No schema default
Not declared
Validation and schema details
Minimum
1
#
clientFrameMax string | null Optional

Maximum accepted Kafka client frame size.

Example
"100MiB"
Default No schema default
Not declared
#
defaultCompatibilityLevel string | null Optional
Example
"BACKWARD"
Default No schema default
Not declared
#
defaultMode string | null Optional
Example
"READWRITE"
Default No schema default
Not declared
#
electionHeartbeatInterval string | null Optional
Example
"3s"
Default No schema default
Not declared
#
electionRebalanceTimeout string | null Optional
Example
"1m"
Default No schema default
Not declared
#
electionReconnectBackoff string | null Optional
Example
"500ms"
Default No schema default
Not declared
#
electionSessionTimeout string | null Optional
Example
"30s"
Default No schema default
Not declared
#
forwardMaxBody string | null Optional
Example
"4MiB"
Default No schema default
Not declared
#
schemasTopicCreateTimeout string | null Optional
Example
"30s"
Default No schema default
Not declared
#
storeReaderFetchMax string | null Optional
Example
"10MiB"
Default No schema default
Not declared
#
storeReaderFetchMaxWait string | null Optional
Example
"1s"
Default No schema default
Not declared
#
storeReaderRetryBackoff string | null Optional
Example
"500ms"
Default No schema default
Not declared
#
#
schemasTopic string | null Optional

Backing compacted topic. Default _schemas.

Example
"_schemas"
Default Documented behavior

Default _schemas.

#
schemasTopicReplicationFactor integer | null (int32) Optional

Replication factor for _schemas when auto-created. Default 3.

Example
3
Default Documented behavior

Default 3.

#
tls object | null Optional 4 fields

Server TLS for the HTTPS REST surface. None means plain HTTP.

Example
View JSON example
{
  "secretName": "schema-registry-tls",
  "clientAuth": "Disabled"
}
Default Runtime / omission

Absent: serve plain HTTP.

clientAuth string | null Optional

Client-cert mode. Default Disabled.

Example
"Disabled"
Default Documented behavior

Default Disabled.

Allowed values"Disabled""Optional""Required"null
#
clientCaSecretName string | null Optional

Secret with ca.crt that verifies the client certs. It is necessary when clientAuth is not Disabled.

Example
"schema-registry-client-ca"
Default No schema default
Not declared
#
issuerRef object | null Optional 3 fields

cert-manager issuer reference. Do not set it together with secretName.

Example
View JSON example
{
  "name": "internal-ca",
  "kind": "Issuer",
  "group": "cert-manager.io"
}
Default No schema default
Not declared
group string | null Optional

API group. Default cert-manager.io.

Example
"cert-manager.io"
Default Documented behavior

Default cert-manager.io.

#
kind string | null Optional

The default is Issuer. Set ClusterIssuer for an issuer with cluster scope.

Example
"Issuer"
Default Documented behavior

The default is Issuer.

#
name string Required
Example
"internal-ca"
Default No schema default
Not declared
#
#
secretName string | null Optional

Secret of type kubernetes.io/tls with tls.crt and tls.key. Do not set it together with issuerRef.

Example
"schema-registry-tls"
Default No schema default
Not declared
#
#
#

status

status object | null Optional 5 fields
Example
View JSON example
{
  "conditions": [
    {
      "lastTransitionTime": "2026-10-05T12:00:00Z",
      "message": "The resource is ready.",
      "reason": "Reconciled",
      "status": "True",
      "type": "Ready"
    }
  ]
}
Default No schema default
Not declared
conditions array Optional 1 field

Kubernetes-style conditions: KafkaReady, Available, and Ready.

Example
View JSON example
[
  {
    "lastTransitionTime": "2026-10-05T12:00:00Z",
    "message": "The resource is ready.",
    "reason": "Reconciled",
    "status": "True",
    "type": "Ready"
  }
]
Default Schema default
[]
[] object Array item 5 fields
Example
View JSON example
{
  "lastTransitionTime": "2026-10-05T12:00:00Z",
  "message": "The resource is ready.",
  "reason": "Reconciled",
  "status": "True",
  "type": "Ready"
}
Default No schema default
Not declared
lastTransitionTime string Required

RFC3339 timestamp.

Example
"2026-10-05T12:00:00Z"
Default No schema default
Not declared
#
message string Required

Human-readable message.

Example
"The resource is ready."
Default No schema default
Not declared
#
reason string Required

CamelCase machine reason.

Example
"Reconciled"
Default No schema default
Not declared
#
status string Required

True, False, or Unknown.

Example
"True"
Default No schema default
Not declared
#
type string Required

For example, Ready.

Example
"Ready"
Default No schema default
Not declared
#
#
#
observedGeneration integer | null (int64) Optional

metadata.generation of the last successfully-reconciled spec.

Example
1
Default No schema default
Not declared
#
readyReplicas integer | null (int32) Optional
Example
1
Default No schema default
Not declared
#
replicas integer | null (int32) Optional
Example
1
Default No schema default
Not declared
#
url string | null Optional

In-cluster REST URL that the clients use.

Example
"http://schema-registry.kafka.svc.cluster.local:8081"
Default No schema default
Not declared
#
#

Resource schema

Resource schema object Resource schema

Auto-generated derived type for SchemaRegistrySpec via CustomResource

Example
View JSON example
{
  "apiVersion": "krabka.io/v1alpha1",
  "kind": "SchemaRegistry",
  "metadata": {
    "name": "example",
    "namespace": "default",
    "labels": {
      "krabka.io/cluster": "my-cluster"
    }
  },
  "spec": {
    "replicas": 1
  }
}
Default No resource default
None
#