Open jschwinger233 opened 3 years ago
本着开发封闭的原则, 这部分工作其实是甩给 barrel 的, 但是我觉得这片净土比较适合写 proposal...
总得来说, 现有的 docker-cni 的流程是:
shim -> docker-cni -> cni-bin (calico) -> oci (runc)
-> 表示一次 fork(2) + exec(2) 的进程调用, 下同.
->
fork(2)
exec(2)
为了支持 fixed-ip 特性, 我发现只要再多加一层就可以了, 变成:
shim -> docker-cni -> cni-wrapper (barrel) -> cni-bin (calico) -> oci (runc)
多加的这层 cni-wrapper (其实就是 barrel 二进制):
cni-wrapper
barrel
fixed-ip
cni-bin add
cni-bin del
剩下要处理的就是 remove, 让作为 dockerd-wrapper 的 barrel daemon 去真正调用 cni-bin del 释放 ip, 就可以了.
周末重新想了一下, 需要对现有的 docker-cni 做一下简化, 对之后的 fixed-ip 也有好处.
几个核心的点是:
本着开发封闭的原则, 这部分工作其实是甩给 barrel 的, 但是我觉得这片净土比较适合写 proposal...
总得来说, 现有的 docker-cni 的流程是:
->
表示一次fork(2)
+exec(2)
的进程调用, 下同.为了支持 fixed-ip 特性, 我发现只要再多加一层就可以了, 变成:
多加的这层
cni-wrapper
(其实就是barrel
二进制):fixed-ip
标记的时候啥都不干, 透明的;fixed-ip
标记的时候: a. add 流程里, 根据 ID(或者 IP) 去查询 barrel db, 有结果就直接返回, 而不必再调用cni-bin add
; 如果调用了cni-bin add
, 则把结果记录在 barrel db 里; b. del 流程里, 不调用cni-bin del
, 只是更新 barrel db 里的数据状态;剩下要处理的就是 remove, 让作为 dockerd-wrapper 的 barrel daemon 去真正调用
cni-bin del
释放 ip, 就可以了.