如果你的 kubelet 运行在容器中,使用 local static provisioner 要注意一个问题

我有一个本地的测试 Kubernetes 集群,是用 RKE 部署的。

RKE 的优势之一是部署 k8s 很方便,集群在 Docker 内部运行,部署的时候只需要准备 Docker 环境和配置文件就可以了。

先说一下我遇到的问题:
我配置了本地 PV,一切正常,可以看到所有的本地盘都注册好了 ( tidb-operator 官方文档

然后在部署 tidb 集群时遇到报错

Error: MountVolume.NewMounter initialization failed for volume “local-pv-xxxxx” : path “/mnt/disks/xxx-xxx-xxx” does not exist

原因是:kubelet 运行在容器内部,无法读到 Node 节点上的 /mnt/disks (我的本地PV位置)

其实官方的 FAQ 也说了这个问题。

对 RKE 来说,解决办法就是配置 kubelet extra bind 并升级集群

services:
    kubelet:
      extra_binds:
        - "/mnt/disks:/mnt/disks"