k8s csi

Posted by [Kohn] on Tuesday, February 20, 2024 本文阅读量

1 CSI

2 CSI的注册

controller注册

node plugin向kubelet注册

cni的node plugin通过kubelet的插件注册机制向kubelet注册, 注册完成后kubelet就知道了如何CNI插件.

k8s提供了Node Driver Registrar sidecar容器来简化CNI插件的注册流程, 这个sidecar的容器的实现原理:

https://www.cnblogs.com/lianngkyle/p/14940136.html

简单描述下:

  1. 首先sidecar容器会挂在几个宿主机上的目录进来:

    • /data/kubernetes/kubelet/plugins/{{CNI NAME}} 挂载到/csi下
    • /data/kubernetes/kubelet/plugins_registry 挂载到 /registration下
    • 这里的/data/kubernetes/kubelet其实是KUBELET_ROOT

    由于csi的node plugin启动时会创建出一个csi.sock, 因此sidecar容器内会出现/csi/csi.sock.

  2. sidecar容器会读取/csi/csi.sock的GetPluginInfo获取csi plugin名称, 然 后在/registration目录下创建/registration/{{CSI Driver Name}}-reg.sock".

  3. /registration对应宿主机上的/data/kubernetes/kubelet/plugins_registry, kubelet的插件注册机制使得kubelet会自动发现多了一个socket

  4. kubelet调用这个socket的GetInfo RPC接口, sidecar容器会返回插件信息, 包括:

    • 类型为CSI插件
    • name为CSI插件名字
    • Endpoint为/data/kubernetes/kubelet/plugins/{{CNI NAME}}/csi.sock
    • 版本

    这里的/data/kubernetes/kubelet/plugins/{{CNI NAME}}/csi.sock这个路径是sidecar容器的启动参数指定

  5. kubelet完成插件注册