| title | 维护 TiDB 集群所在的 Kubernetes 节点 |
|---|---|
| summary | 介绍如何维护 TiDB 集群所在的 Kubernetes 节点。 |
TiDB 是高可用数据库,即使部分节点下线,集群也能正常运行。因此,你可以安全地对 TiDB 集群所在的 Kubernetes 节点执行停机维护操作。
本文介绍如何维护 Kubernetes 节点,并根据维护时长和存储类型提供不同的操作策略。
- 安装
kubectl
注意:
维护节点前,需要保证 Kubernetes 集群的剩余资源足够运行 TiDB 集群。
-
使用
kubectl cordon命令将待维护节点标记为不可调度,防止新的 Pod 被调度到该节点:kubectl cordon ${node_name} -
检查待维护节点上是否运行 TiDB 集群组件的 Pod:
kubectl get pod --all-namespaces -o wide -l pingcap.com/managed-by=tidb-operator | grep ${node_name}
根据 Kubernetes 节点的存储类型,选择相应的 Pod 迁移策略:
- 可自动迁移存储:使用方法 1:重调度 Pod
- 不可自动迁移存储:使用方法 2:重建实例
如果使用支持自动迁移的存储(如 Amazon EBS),可以通过优雅重启某个组件的单个 Pod 方式重调度各个组件 Pod。以 PD 组件为例:
-
查看待维护节点上的 PD Pod:
kubectl get pod --all-namespaces -o wide -l pingcap.com/component=pd | grep ${node_name}
-
获取该 PD Pod 对应的实例名称:
kubectl get pod -n ${namespace} ${pod_name} -o jsonpath='{.metadata.labels.pingcap\.com/instance}'
-
为该 PD 实例添加一个新标签以触发重调度:
kubectl label pd -n ${namespace} ${pd_instance_name} pingcap.com/restartedAt=2025-06-30T12:00
-
确认该 PD Pod 已成功调度到其他节点:
watch kubectl -n ${namespace} get pod -o wide -
按相同步骤迁移 TiKV、TiDB 等其他组件 Pod,直至该维护节点上的所有 TiDB 集群组件 Pod 都迁移完成。
如果节点使用无法自动迁移的存储(如本地存储),你需要重建实例。
警告:
重建实例会导致数据丢失。对于 TiKV 等有状态组件,请确保集群副本数充足,以保障数据安全。
以重建 TiKV 实例为例:
-
删除 TiKV 实例的 CR。TiDB Operator 会自动删除其关联的 PVC 和 ConfigMap 等资源,并创建新实例:
kubectl delete -n ${namespace} tikv ${tikv_instance_name}
-
等待新创建的 TiKV 实例状态变为
Ready:kubectl get -n ${namespace} tikv ${tikv_instance_name}
-
确认 TiDB 集群状态正常且数据同步完成后,再继续维护其他组件。
完成 Pod 迁移后,该节点上应仅运行由 DaemonSet 管理的 Pod(如网络插件、监控代理等):
kubectl get pod --all-namespaces -o wide | grep ${node_name}现在,你可以安全地对节点执行维护操作,例如重启、更新操作系统或进行硬件维护。
如果是长期维护或永久下线节点,请跳过此步骤。
对于临时维护,节点维护完成后需要执行以下恢复操作:
-
确认节点健康状态:
watch kubectl get node ${node_name}当节点状态变为
Ready后,继续下一步。 -
使用
kubectl uncordon命令解除节点的调度限制:kubectl uncordon ${node_name} -
观察 Pod 是否全部恢复正常运行:
kubectl get pod --all-namespaces -o wide | grep ${node_name}
当所有 Pod 正常运行后,维护操作完成。