重启 Kubernetes 上的 TiDB 集群

在使用 TiDB 集群的过程中,如果你发现某个 Pod 存在内存泄漏等问题,需要对集群进行重启,本文描述了如何优雅滚动重启 TiDB 集群内某个组件的所有 Pod,或优雅重启单个 TiKV Pod。

优雅滚动重启 TiDB 集群组件的所有 Pod

在标准 Kubernetes 上部署 TiDB 集群之后,通过 kubectl edit tc ${name} -n ${namespace} 修改集群配置,为期望优雅滚动重启的 TiDB 集群组件 Spec 添加 annotation tidb.pingcap.com/restartedAt,Value 设置为当前时间。以下示例中,为组件 pdtikvtidb 都设置了 annotation,表示将优雅滚动重启以上三个 TiDB 集群组件的所有 Pod。可以根据实际情况,只为某个组件设置 annotation。

apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: basic spec: version: v7.5.0 timezone: UTC pvReclaimPolicy: Delete pd: ... annotations: tidb.pingcap.com/restartedAt: 2020-04-20T12:00 tikv: ... annotations: tidb.pingcap.com/restartedAt: 2020-04-20T12:00 tidb: ... annotations: tidb.pingcap.com/restartedAt: 2020-04-20T12:00

优雅重启单个 TiKV Pod

从 v1.2.5 起,TiDB Operator 支持给 TiKV Pod 添加 annotation 来触发优雅重启单个 TiKV Pod。

添加一个 key 为 tidb.pingcap.com/evict-leader 的 annotation,触发优雅重启:

kubectl -n ${namespace} annotate pod ${tikv_pod_name} tidb.pingcap.com/evict-leader="delete-pod"

当 TiKV region leader 数掉到 0 时,根据 annotation 的不同值,TiDB Operator 会采取不同的行为。合法的 annotation 值如下:

  • none: 无对应行为。
  • delete-pod: 删除 Pod,TiDB Operator 的具体行为如下:
    1. 调用 PD API,为对应 TiKV store 添加 evict-leader-scheduler。
    2. 当 TiKV region leader 数掉到 0 时,删除 Pod 并重建 Pod。
    3. 当新的 Pod Ready 后,调用 PD API 删除对应 TiKV store 的 evict-leader-scheduler。

文档内容是否有帮助?