删除实例

删除 ClickHouseInstallation 会移除工作负载。是否会移除你的数据取决于你创建实例时设置的回收策略。删除任何重要数据前,请先阅读回收部分。

停止而不是删除

如果你只想释放计算资源,请停止实例,而不是删除它:

kubectl -n <namespace> patch chi e1-demo --type=merge -p '{"spec":{"stop":"1"}}'

这会在每个 StatefulSet 上设置 Replicas: 0。Pod 和实例 Service 会被移除;PVC 会保留。将 stop 设置回 "0" 会重新创建 Pod,并重新挂载保留的卷。

删除

kubectl -n <namespace> delete chi e1-demo

资源不会立即消失。operator 会在其管理的每个实例上安装 finalizer finalizer.clickhouseinstallation.altinity.com。因此,API server 会将对象标记为待删除并等待;operator 执行拆除流程,随后才会移除 finalizer,使对象得以删除。

拆除流程进行期间,状态会报告 Terminating

删除顺序

operator 按固定顺序拆除实例:

  1. 删除 PodDisruptionBudget。
  2. 停止监控实例,使 metrics exporter 将其移除。
  3. 删除实例范围的 Service。
  4. 请求每个主机同步其表,以便在 Pod 消失前刷新正在传输中的复制数据。
  5. 删除每个集群;该操作会向下遍历到每个主机,并依次删除 StatefulSet、PVC、主机 ConfigMap 和主机 Service。
  6. 删除实例范围的 ConfigMap。
  7. 移除 finalizer。

StatefulSet 会以优雅方式移除——operator 会先将其缩放到零,而不是直接删除。

卷是否会保留

默认情况下会删除卷。对于每个 PVC,operator 会解析生成该 PVC 的 volume claim template 的回收策略。当该策略为 Delete 时,operator 会删除 PVC;对于无法解析或未使用模板的 PVC,也会将其视为 Delete

若要在删除实例后保留数据,请在删除前将策略设置为 Retain

spec:
  defaults:
    storageManagement:
      reclaimPolicy: Retain

该枚举接受 ""RetainDelete;CRD 将 Retain 描述为在删除 StatefulSet 时保留 PVC。该策略也可以针对每个 volume claim template 单独设置,这样便可以保留数据卷,同时允许删除日志卷。

WARNING

发出删除命令后再更改 reclaimPolicy 已经太迟。请先设置该字段,确认它已存在于线上对象中,然后再执行删除。

验证清理结果

kubectl -n <namespace> get chi
kubectl -n <namespace> get statefulset,pod,svc,cm -l clickhouse.altinity.com/chi=e1-demo
kubectl -n <namespace> get pvc

需要关注的是 PVC 列表。如果你原本希望使用 Retain,但 PVC 已经消失,则说明该策略未生效。

如果资源无法删除

ClickHouseInstallation 卡在 Terminating 中,几乎总是意味着 operator 未运行,或未监视该命名空间,因此没有人移除 finalizer。请先检查 operator Pod:

kubectl -n operators get pods -l app=clickhouse-operator
kubectl -n operators logs deploy/clickhouse-operator -c clickhouse-operator

命名空间范围由 operator 配置键 watch.namespaces 决定;空列表表示所有命名空间。


ClickHouse 是 ClickHouse, Inc. 的注册商标。https://clickhouse.com

Alauda 是独立供应商。本产品与 ClickHouse, Inc. 没有关联,也未获得其认可或赞助。所有商标均归其各自所有者所有,此处使用商标仅用于识别目的。