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
简单描述下:
-
首先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.
-
sidecar容器会读取/csi/csi.sock的GetPluginInfo获取csi plugin名称, 然 后在/registration目录下创建/registration/{{CSI Driver Name}}-reg.sock".
-
/registration对应宿主机上的/data/kubernetes/kubelet/plugins_registry, kubelet的插件注册机制使得kubelet会自动发现多了一个socket
-
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容器的启动参数指定
-
kubelet完成插件注册