首页 > 数据库 > > 重启 Kubernetes 上的 TiDB 集群
在使用 TiDB 集群的过程中,如果你发现某个 Pod 存在内存泄漏等问题,需要对集群进行重启,本文描述了如何优雅滚动重启 TiDB 集群内某个组件的所有 Pod 或通过优雅重启指令来将 TiDB 集群内某个 Pod 优雅下线然后再进行重新启动。
警告:
在生产环境中,未经过优雅重启而手动删除某个 TiDB 集群 Pod 节点是一件极其危险的事情,虽然 StatefulSet 控制器会将 Pod 节点再次拉起,但这依旧可能会引起部分访问 TiDB 集群的请求失败。
参考在标准 Kubernetes 上部署 TiDB 集群,修改 ${cluster_name}/tidb-cluster.yaml 文件,为期望优雅滚动重启的 TiDB 集群组件 Spec 添加 annotation tidb.pingcap.com/restartedAt,Value 设置为当前时间。以下示例中,为组件 pd,tikv,tidb 都设置了 annotation,表示将优雅滚动重启以上三个 TiDB 集群组件的所有 Pod。可以根据实际情况,只为某个组件设置 annotation。
apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
name: basic
spec:
version: v3.0.8
timezone: UTC
pvReclaimPolicy: Delete
pd:
baseImage: pingcap/pd
replicas: 3
requests:
storage: "1Gi"
config: {}
annotations:
tidb.pingcap.com/restartedAt: "202004201200"
tikv:
baseImage: pingcap/tikv
replicas: 3
requests:
storage: "1Gi"
config: {}
annotations:
tidb.pingcap.com/restartedAt: "202004201200"
tidb:
baseImage: pingcap/tidb
replicas: 2
service:
type: ClusterIP
config: {}
annotations:
tidb.pingcap.com/restartedAt: "202004201200"
应用更新
kubectl apply -f ${cluster_name} -n ${namespace}
开启优雅下线功能,需要打开 Webhook 相关设置。默认情况下 Webhook 相关配置是关闭的,你需要手动开启:
修改 Operator 的 values.yaml
开启 Operator Webhook 特性:
admissionWebhook:
create: true
关于 Operator Webhook 详情,请参考开启 TiDB Operator 准入控制器
安装/更新 TiDB Operator
修改完 values.yaml 文件中的上述配置项以后,进行 TiDB Operator 部署或者更新。安装与更新 TiDB Operator 请参考在 Kubernetes 上部署 TiDB Operator。
我们通过 kubectl annotate 的方式来标记目标 TiDB 集群 Pod 节点组件,当 annotate 标记完成以后,TiDB Operator 会自动进行 Pod 节点的优雅下线并重启。你可以通过以下方式来进行标记:
kubectl annotate ${pod_name} -n ${namespace} tidb.pingcap.com/pod-defer-deleting=true
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3158933/ ,如需转载,请注明出处,否则将追究法律责任。