Kubernetes 上的 TiDB 集群管理常用使用技巧

本文介绍了 Kubernetes 上 TiDB 集群管理常用使用技巧。

诊断模式

当 Pod 处于 CrashLoopBackoff 状态时,Pod 内容器不断退出,导致无法正常使用 kubectl exec,给诊断带来不便。为了解决这个问题,TiDB in Kubernetes 提供了 PD/TiKV/TiDB Pod 诊断模式。在诊断模式下,Pod 内的容器启动后会直接挂起,不会再进入重复 Crash 的状态,此时,便可以通过 kubectl exec 连接 Pod 内的容器进行诊断。

操作方式:

  1. 首先,为待诊断的 Pod 添加 Annotation:

     

    kubectl annotate pod ${pod_name} -n ${namespace} runmode=debug

    在 Pod 内的容器下次重启时,会检测到该 Annotation,进入诊断模式。

    注意

    如果 Pod 处于运行中,可以执行以下命令强制让容器重启。

     

    kubectl exec ${pod_name} -n ${namespace} -c ${container} -- kill -SIGTERM 1

  2. 等待 Pod 进入 Running 状态即可开始诊断:

     

    watch kubectl get pod ${pod_name} -n ${namespace}

    下面是使用 kubectl exec 进入容器进行诊断工作的例子:

     

    kubectl exec -it ${pod_name} -n ${namespace} -- /bin/sh

  3. 诊断完毕,修复问题后,删除 Pod:

     

    kubectl delete pod ${pod_name} -n ${namespace}

Pod 重建后会自动回到正常运行模式。

单独修改某个 TiKV 的配置

在一些测试场景中,如果你需要单独修改某一个 TiKV 实例配置,而不影响其他的 TiKV 实例,可以参考以下两种方式。

在线更新

参考文档在线修改 TiKV 配置,使用 SQL 在线更新某一个 TiKV 实例的配置。

注意

这种方式的配置更新是临时的,不会持久化。这意味着,当该 TiKV 的 Pod 重启后,依旧会使用原来的配置。

进入诊断模式后修改配置

让 TiKV Pod 进入诊断模式后,可以手动修改 TiKV 的配置文件,并指定使用修改后的配置文件启动 TiKV 进程。

具体操作步骤如下:

  1. 从 TiKV 的日志中获取 TiKV 的启动命令,后续步骤中将会使用。

     

    kubectl logs pod ${pod_name} -n ${namespace} -c tikv | head -2 | tail -1

    输出类似如下,该行就是 TiKV 的启动命令。

     

    /tikv-server --pd=http://${tc_name}-pd:2379 --advertise-addr=${pod_name}.${tc_name}-tikv-peer.default.svc:20160 --addr=0.0.0.0:20160 --status-addr=0.0.0.0:20180 --data-dir=/var/lib/tikv --capacity=0 --config=/etc/tikv/tikv.toml

    注意

    如果 TiKV Pod 持续处于 CrashLoopBackoff 状态,无法从日志中获取启动命令,可以按照上述的命令格式来拼接出启动命令。

  2. 对 Pod 开启诊断模式,并重启 Pod。

    执行以下命令为 Pod 添加 Annotation,等待下一次 Pod 重启。

     

    kubectl annotate pod ${pod_name} -n ${namespace} runmode=debug

    如果 Pod 一直处于运行中,你可以执行以下命令强制让 TiKV 容器重启。

     

    kubectl exec ${pod_name} -n ${namespace} -c tikv -- kill -SIGTERM 1

    可以通过检查 TiKV 的日志,确认是否进入了诊断模式。

     

    kubectl logs ${pod_name} -n ${namespace} -c tikv

    期望的日志内容如下:

     

    entering debug mode.

  3. 执行下面命令进入 TiKV 容器。

     

    kubectl exec -it ${pod_name} -n ${namespace} -c tikv -- sh

  4. 在 TiKV 容器中,复制 TiKV 的配置文件,然后在新的文件上修改 TiKV 的配置。

     

    cp /etc/tikv/tikv.toml /tmp/tikv.toml && vi /tmp/tikv.tmol

  5. 在 TiKV 容器中,根据第 1 步中获取的 TiKV 的启动命令,修改启动参数 --config 为刚刚新创建的配置文件路径后,启动 TiKV 进程。

     

    /tikv-server --pd=http://${tc_name}-pd:2379 --advertise-addr=${pod_name}.${tc_name}-tikv-peer.default.svc:20160 --addr=0.0.0.0:20160 --status-addr=0.0.0.0:20180 --data-dir=/var/lib/tikv --capacity=0 --config=/tmp/tikv.toml

测试完成后,如果要恢复 TiKV Pod,可以直接删除当前的 TiKV Pod,并等待 TiKV Pod 自动被拉起。

 

kubectl delete ${pod_name} -n ${namespace}

配置 TiKV 强制升级

正常情况下,在 TiKV 滚动升级或者修改配置滚动更新过程中,TiDB Operator 会为每个 TiKV 驱逐 Region Leader,并在 Leader 驱逐完成后才开始更新当前 Pod,尽量减小滚动升级或者更新过程对用户请求的影响。在一些测试场景中,如果你不需要在 TiKV 滚动升级或者修改配置滚动更新过程中等待 TiKV 上的 Region Leader 迁移,想要加速升级或者更新过程,可以将 TidbCluster 定义中的 spec.tikv.evictLeaderTimeout 字段设置为一个很小的值。

 

spec: tikv: evictLeaderTimeout: 10s

关于该字段更多的说明,见配置 TiKV 平滑升级

警告

该操作会导致部分用户请求失败,不建议在生产环境中使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天读点书学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值