CRI(container runtime interface)
实现:
Generic Runtime Manager:通用的运行时管理器
remote:CRI接口
- CRI Server 如:创建/删除容器这样的接口
- 流式数据接口 Streaming Server,如exec,port-forward 流式数据接口
循环:
- 通过List接口拿到容器的状态
- 通过Sandbox和Container 接口创建容器
- 镜像接口来拉取容器镜像
通过CRI操作容器的生命周期
比方说我们通过 kubectl 命令来运行一个 Pod,那么 Kubelet 就会通过 CRI 执行以下操作:
- 首先调用 RunPodSandbox 接口来创建一个 Pod 容器,Pod 容器是用来持有容器的相关资源的,比如说网络空间、PID空间、进程空间等资源;
- 然后调用 CreatContainer 接口在 Pod 容器的空间创建业务容器;
- 再调用 StartContainer 接口启动容器,相对应的销毁容器的接口为 StopContainer 与 RemoveContainer。
CRI streaming 接口
exec 或者 attach 到容器的IO流中做各种交互命令
- exec 操作发送到apiserver,鉴权
- apiserver对kubelet server 发起exec 请求
- kubelet 调用 CRI 的exec 接口将具体的请求发送至容器的 runtime
- 跟streaming server 交互获取流式数据