跳转到主内容
跳转到主内容

ClickHouse Operator API 参考文档

本文档提供了 ClickHouse Operator 自定义资源的详细 API 参考信息。

ClickHouseCluster

ClickHouseCluster 是 ClickHouse 集群 API 的模式。

API 版本与 Kind

apiVersion: clickhouse.com/v1alpha1
kind: ClickHouseCluster

ClickHouseClusterSpec

ClickHouseClusterSpec 定义了 ClickHouse 集群的期望状态。

FieldTypeRequiredDefaultDescription
replicas*int32No3单个分片中的副本数量。必须大于等于 0。
shards*int32No1集群中的分片数量。必须大于等于 0。
keeperClusterRefLocalObjectReferenceYes-用于协调的 KeeperCluster 引用。
podTemplatePodTemplateSpecNo-pod(容器组)规范的参数。
containerTemplateContainerTemplateSpecNoSee defaultsClickHouse 容器规范的参数。
dataVolumeClaimSpecPersistentVolumeClaimSpecYes-数据卷的存储配置。
labelsmap[string]stringNo-要添加到所有资源的附加标签。
annotationsmap[string]stringNo-要添加到所有资源的附加注解。
settingsClickHouseConfigNo-ClickHouse 配置参数。

示例

apiVersion: clickhouse.com/v1alpha1
kind: ClickHouseCluster
metadata:
  name: example-cluster
spec:
  replicas: 3
  shards: 2
  keeperClusterRef:
    name: example-keeper
  dataVolumeClaimSpec:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 100Gi
  containerTemplate:
    image:
      repository: clickhouse/clickhouse-server
      tag: "25.12"
    resources:
      requests:
        cpu: "2"
        memory: "8Gi"
      limits:
        cpu: "4"
        memory: "16Gi"
  settings:
    defaultUserPassword:
      secret:
        name: clickhouse-password
        key: password
    tls:
      enabled: true
      required: true
      serverCertSecret:
        name: clickhouse-cert

ClickHouseConfig

ClickHouse 配置参数。

FieldTypeRequiredDefaultDescription
defaultUserPassword*DefaultPasswordSelectorNo-从 Secret 或 ConfigMap 中获取的 default 用户密码。
loggerLoggerConfigNoSee defaults日志配置。
tlsClusterTLSSpecNo-ClickHouse 的 TLS 设置。
enableDatabaseSyncboolNotrue启用将数据库同步到新副本。
extraConfigruntime.RawExtensionNo-额外的 ClickHouse 配置(与默认值合并)。
extraUsersConfigruntime.RawExtensionNo-额外的 ClickHouse 用户配置(与默认值合并)。

ClickHouseClusterStatus

ClickHouseClusterStatus 定义了 ClickHouse 集群的观测到的状态。

FieldTypeDescription
conditions[]metav1.Condition集群当前的状态条件。
observedGenerationint64最近一次观测到的 generation。
replicasint32当前正在运行的副本数量。
readyReplicasint32处于就绪状态的副本数量。
configurationRevisionstring由 Operator 应用的目标配置修订版本。
statefulSetRevisionstring目标 StatefulSet 控制器修订版本。
currentRevisionstring最近一次已应用的集群 spec 修订版本。
updateRevisionstring最近一次请求的集群 spec 修订版本。

KeeperCluster

KeeperCluster 是 ClickHouse Keeper 集群 API 的模式定义。

API 版本与 Kind

apiVersion: clickhouse.com/v1alpha1
kind: KeeperCluster

KeeperClusterSpec

KeeperClusterSpec 定义了 Keeper 集群的期望状态。

字段类型必需默认值描述
replicas*int323副本数量。必须为奇数:0、1、3、5、7、9、11、13 或 15。
podTemplatePodTemplateSpec-pod(容器组)规范的参数。
containerTemplateContainerTemplateSpecSee defaultsKeeper 容器规范的参数。
dataVolumeClaimSpecPersistentVolumeClaimSpec-数据卷的存储配置。
labelsmap[string]string-添加到所有资源的附加标签。
annotationsmap[string]string-添加到所有资源的附加注解。
settingsKeeperConfig-Keeper 配置参数。

示例

apiVersion: clickhouse.com/v1alpha1
kind: KeeperCluster
metadata:
  name: example-keeper
spec:
  replicas: 3
  dataVolumeClaimSpec:
    storageClassName: fast-ssd
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 10Gi
  containerTemplate:
    resources:
      requests:
        cpu: "500m"
        memory: "512Mi"
      limits:
        cpu: "1"
        memory: "1Gi"
  podTemplate:
    topologyZoneKey: topology.kubernetes.io/zone
  settings:
    tls:
      enabled: true
      required: true
      serverCertSecret:
        name: keeper-cert

KeeperConfig

Keeper 配置参数。

字段类型必需默认值描述
loggerLoggerConfig参见默认值Logger 配置。
tlsClusterTLSSpec-Keeper 的 TLS 设置。
extraConfigruntime.RawExtension-附加的 Keeper 配置(与默认配置合并)。

KeeperClusterStatus

KeeperClusterStatus 定义了 Keeper 集群的观测状态。

FieldTypeDescription
conditions[]metav1.Condition集群当前的状态条件。
observedGenerationint64最近一次观测到的 generation 值。
replicasint32当前正在运行的副本数量。
readyReplicasint32处于就绪状态的副本数量。
configurationRevisionstring由 Operator 应用的目标配置修订版本。
statefulSetRevisionstring目标 StatefulSet 控制器的修订版本。
currentRevisionstring最近一次已应用的集群 spec 修订版本。
updateRevisionstring最近一次请求的集群 spec 修订版本。

常用类型

PodTemplateSpec

用于 pod(容器组)配置的参数。

FieldTypeRequiredDescription
topologyZoneKeystringNo用于可用区分布的 Kubernetes 拓扑键(例如 topology.kubernetes.io/zone)。
nodeHostnameKeystringNo节点主机名的 Kubernetes 标签键(例如 kubernetes.io/hostname)。
nodeSelectormap[string]stringNo用于 pod(容器组)调度的节点选择器。
affinitycorev1.AffinityNopod(容器组)的亲和性/反亲和性规则。
tolerations[]corev1.TolerationNo针对打了污点的节点的容忍配置。
securityContext*corev1.PodSecurityContextNopod(容器组)的安全上下文。

示例

podTemplate:
  topologyZoneKey: topology.kubernetes.io/zone
  nodeHostnameKey: kubernetes.io/hostname
  nodeSelector:
    disktype: ssd
  tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "clickhouse"
    effect: "NoSchedule"
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app.kubernetes.io/name: clickhouse
        topologyKey: kubernetes.io/hostname

ContainerTemplateSpec

容器配置参数。

FieldTypeRequiredDescription
imageContainerImageNo容器镜像配置。
imagePullPolicycorev1.PullPolicyNo镜像拉取策略(Always、IfNotPresent、Never)。
resourcescorev1.ResourceRequirementsNoCPU 和内存资源需求。
env[]corev1.EnvVarNo环境变量。
volumeMounts[]corev1.VolumeMountNo额外的卷挂载。
securityContext*corev1.SecurityContextNo容器安全上下文。

示例

containerTemplate:
  image:
    repository: clickhouse/clickhouse-server
    tag: "25.12"
  imagePullPolicy: IfNotPresent
  resources:
    requests:
      cpu: "2"
      memory: "8Gi"
    limits:
      cpu: "4"
      memory: "16Gi"
  env:
  - name: TZ
    value: "UTC"

ContainerImage

容器镜像规范。

字段类型是否必需默认值描述
repositorystringClickHouse: clickhouse/clickhouse-server
Keeper: clickhouse/clickhouse-keeper
容器镜像仓库。
tagstringlatest镜像标签。

ClusterTLSSpec

集群的 TLS 配置。

FieldTypeRequiredDescription
enabledboolNo启用 TLS。
requiredboolNo要求所有连接必须使用 TLS(禁用不安全的 endpoint)。
serverCertSecretcorev1.LocalObjectReferenceNo包含服务器证书(tls.crt, tls.key)的 Secret。
caBundle*SecretKeySelectorNo包含用于验证的 CA 证书包(CA bundle)的 Secret。

示例

tls:
  enabled: true
  required: true
  serverCertSecret:
    name: clickhouse-cert
  caBundle:
    secretKeyRef:
      name: ca-cert-secret
      key: ca.crt

LoggerConfig

ClickHouse 和 Keeper 的日志配置。

FieldTypeRequiredDefaultDescription
logToFileboolNotrue将日志写入文件。
levelstringNo"trace"日志级别:trace、debug、information、warning、error。
sizestringNo"1000M"日志文件的最大大小。
countintNo50要保留的日志文件数量。

示例

logger:
  logToFile: true
  level: "information"
  size: "1000M"
  count: 50

DefaultPasswordSelector

引用包含密码的 Secret 或 ConfigMap 中的键。

FieldTypeRequiredDefaultDescription
passwordTypestringNoplaintext密码编码类型。可选值:plaintextsha256_passwordsha256_hashdouble_sha1_passworddouble_sha1_hash。详情参见 ClickHouse 文档
secret*SecretKeySelectorNo-从 Secret 中的键选择密码。与 configMap 互斥。
configMap*ConfigMapKeySelectorNo-从 ConfigMap 中的键选择密码。与 secret 互斥。
注意

必须指定 secretconfigMap 其中之一,不能同时指定二者。

使用 Secret 的示例(推荐)

defaultUserPassword:
  passwordType: plaintext  # Optional, default
  secret:
    name: clickhouse-password
    key: password

使用 SHA256 的示例

defaultUserPassword:
  passwordType: sha256_password
  secret:
    name: clickhouse-password
    key: password_hash

ConfigMap 使用示例

defaultUserPassword:
  passwordType: plaintext
  configMap:
    name: clickhouse-config
    key: default_password

默认值

ClickHouse 默认值

设置项默认值
副本数3
分片数1
镜像仓库clickhouse/clickhouse-server
镜像标签latest
镜像拉取策略IfNotPresent
CPU 请求2
CPU 限制4
内存请求4Gi
内存限制8Gi
日志级别trace
日志输出到文件true
日志大小1000M
日志文件数量50
启用数据库同步true

Keeper 默认值

设置项默认值
副本数3
镜像仓库clickhouse/clickhouse-keeper
镜像标签latest
镜像拉取策略IfNotPresent
CPU 请求500m
CPU 限制1
内存请求512Mi
内存限制1Gi
日志级别trace
日志输出到文件true
日志文件大小1000M
日志文件数量50

条件

ClickHouseCluster 条件

TypeDescription
SpecValidClickHouseCluster 自定义资源(CustomResource)是否通过校验。在没有 webhook 的部署中很有用
ReconcileSucceeded上一次协调循环(reconciliation cycle)是否成功
ReplicaStartupSucceededClickHouseCluster 的所有副本是否都能够启动
Healthy所有请求副本的就绪情况
ClusterSizeAligned集群中的副本/分片数量与请求的数量一致
ConfigurationInSync表示当前配置的部署状态
ReadyClickHouseCluster 已就绪,可以处理客户端请求。每个分片中至少有一个副本处于 Ready 状态
SchemaInSync伸缩操作后,所有副本是否具有相同的数据库模式(schema)

KeeperCluster 条件

TypeDescription
SpecValidKeeperCluster 自定义资源是否通过验证。在未配置 webhook 的部署环境中很有用
ReconcileSucceeded上一次调和周期是否成功
ReplicaStartupSucceededKeeperCluster 的所有副本是否都能够成功启动
Healthy所有所需副本的就绪状态
ClusterSizeAligned集群中的副本数量是否与请求的数量一致
ConfigurationInSync表示配置是否与当前部署状态保持同步
ReadyKeeperCluster 已准备好为客户端请求提供服务,且已选举出 Leader