k8s 调用CNI

参考文档:https://zhuanlan.zhihu.com/p/450140876

简单总结一下 CNI 相关。

  1. k8s 的 kubelet 在启动一个容器之前,会先做一些预先检查以及 csi 的操作
  2. 然后 kubelet 调用 CRI 的接口,通过 grpc 的方式和 CRI runtime 通信,告知 CRI 要创建 pod 了
  3. 随后 CRI 的 Server 端收到通知后调用 OCI 的接口去真正的执行拉起 Pod 的操作
  4. 不过在真的拉起 pod 之前,会先给 pod 创建一个 pause 容器,这个 pause 容器是一个特别小又特别稳定的进程,主要用来挂载网络命名空间和存储资源
  5. 然后 CRI 调用 CNI 提供的接口,先在 /etc/cni/net.d 目录中获取网络插件配置(这个配置由每个插件自己通过 daemonset 的方式拷贝到主机上), 然后把插件的配置作为标准输入, 再把容器的运行时信息作为环境变量, 最后执行插件
  6. CNI 插件执行完毕后, 把执行结果(结果要包含一些关键信息比如 Pod IP 等)直接干到标准输出上
  7. CRI 从标准输出上读取插件执行结果再做后续操作, 后续操作就是拉起真正的容器等
posted @ 2022-12-29 18:00  salami_china  阅读(127)  评论(0编辑  收藏  举报