kubernets CRI
CRI: the Container Runtime Interface
What is CRI?
CRI (Container Runtime Interface) 由一组规范/要求(待添加),protobuf API和用于容器运行时的库(与节点上的kubelet集成)组成。 TCRI API当前在Alpha中,从Kubernetes 1.7+起默认使用CRI-Docker集成。
将来,计划添加更多开发人员工具,例如CRI验证测试
Why develop CRI?
在存在CRI之前,通过在kubelet内部的实现高级接口,将容器运行时(例如docker,rkt)与kubelet集成在一起。运行时的入口壁垒很高,因为集成需要了解kubelet的内部结构并为主要的Kubernetes仓库做贡献。 更重要的是,这不会扩展,因为每次添加新内容都会在主Kubernetes仓库中产生大量的维护开销。
Kubernetes的目标是可扩展。 CRI是实现可插拔容器运行时和构建更健康的生态系统的一个小而重要的步骤。
How to use CRI?
参考 CRI installation documentation.
CRI仍很年轻,我们正在积极吸收开发人员的反馈意见,以改进API。 尽管我们努力保持向后兼容性,但开发人员应该期望偶尔的API重大更改。
对于 Kubernetes 1.5, 额外的 flags需要:
-
- Set apiserver flag
--feature-gates=StreamingProxyRedirects=true
. - Set kubelet flag
--experimental-cri=true
.
- Set apiserver flag
Does Kubelet use CRI today?
是的, Kubelet 总是使用CRI, 因为rktnetes集成的期望。
旧的, pre-CRI Docker集成在 1.7版本移除.
Specifications, design documents and proposals
Kubernetes 1.5 blog post on CRI 做了一个通俗的介绍.
以下是CRI规格/要求,设计文档和建议的混合列表。 正在努力为API添加更多文档。
Work-In-Progress CRI runtimes
CRI-API
该存储库包含容器运行时接口(CRI)的定义。 CRI是一个插件接口,使kubelet可以使用多种容器运行时,而无需重新编译。 CRI由protocol buffers和gRPC API组成。
dockershim
What is the scope of this project?
CRI-O提供 符合OCI的运行时 和kubelet 的集成。尤其, 他实现了kebulet的 Container Runtime Interface (CRI) 使用OCI 一致的运行时.
CRI-O的范围与CRI的范围相关。
从较高的级别来说,我们希望CRI-O的范围限于以下功能:
-
- 支持多种镜像格式,包括现有的Docker镜像格式
- 支持多种镜像的下载方式,包括trust和镜像验证
- 容器镜像管理(管理镜像层,覆盖文件系统等)
- 容器生命周期管理
- 满足CRI所需的监视和日志记录
- CRI要求的资源隔离
What is not in scope for this project?
-
- 构建,签名并将镜像推送到各种镜像存储
- 用于与CRI-O交互的CLI utility。 作为该项目的一部分构建的任何CLI均仅用于测试该项目,并且不保证与该项目的向后兼容性
这是Kubernetes容器运行时接口(CRI)的实现,它将允许Kubernetes直接启动和管理开放容器倡议(OCI)容器。
该计划是针对不同方面使用OCI项目和最佳品种库:
-
- Runtime: runc (或任何 OCI runtime-spec 实现) 和 oci runtime tools
- Images: 镜像管理使用 containers/image
- Storage: 镜像分层的存储和管理使用 containers/storage
- Networking: 网络支持通过 CNI
目前,它正在Kubernetes社区中通过 design proposal 积极开发. 疑问和问题请联系 sig-node Slack channel.
Introducing Container Runtime Interface (CRI) in Kubernetes
CRI-O 进入 CNCF 孵化阶段,或将挑战 Docker 在容器界的地位
容器,你还只用Docker吗?