CRI V1接口支持
概述
CRI(Container Runtime Interface, 容器运行时接口)是kublet与容器引擎通信使用的主要协议。 在K8S 1.25及之前,K8S存在CRI v1alpha2 和 CRI V1两种版本的CRI接口,但从1.26开始,K8S仅提供对于CRI V1的支持。
iSulad同时提供对CRI v1alpha2和CRI v1的支持, 对于CRI v1,iSulad支持CRI v1alpha2所述功能, 并提供对CRI V1中所定义新接口和字段的支持。
目前iSulad支持的CRI V1版本为1.29,对应官网描述API如下:
https://github.com/kubernetes/cri-api/blob/kubernetes-1.29.0/pkg/apis/runtime/v1/api.proto
iSulad使用的API描述文件,与官方API略有出入,以本文档描述的接口为准。
新增字段描述
cgroup驱动的enum值列表
容器引擎所使用的cgroup驱动
容器事件类型枚举值
虚拟内存使用情况
新增接口描述
RuntimeConfig
接口原型
rpc RuntimeConfig(RuntimeConfigRequest) returns (RuntimeConfigResponse) {}
接口描述
获取cgroup驱动配置 cgroupfs 或 systemd-cgroup
参数 RuntimeConfigRequest
无字段
返回值 RuntimeConfigResponse
GetContainerEvents
接口原型
rpc GetContainerEvents(GetEventsRequest) returns (stream ContainerEventResponse) {}
接口描述
获取Pod生命周期事件流
参数 GetEventsRequest
无字段
返回值 ContainerEventResponse
变更描述
CRI V1.29更新变更描述
获取cgroup驱动配置
RuntimeConfig
获取cgroup驱动配置 cgroupfs 或 systemd-cgroup
GetContainerEvents支持pod生命周期事件
GetContainerEents
,提供对pod生命周期相关事件流
PodSandboxStatus
有相应调整,增加ContainerStatuses提供沙箱内容器status信息
ContainerStats虚拟内存信息
ContainerStats
新增虚拟内存使用情况信息: SwapUsage
ContainerStatus reason字段OOMKilled设置
ContainerStatus中reason字段在cgroup out-of-memory时应该设置为OOMKilled
PodSecurityContext.SupplementalGroups描述修改
描述修改,优化PodSecurityContext.SupplementalGroups
的注释,明确容器镜像定义的主UID不在该列表下的行为
ExecSync输出限制
ExecSync返回值输出小于16MB
使用手册
配置iSulad支持CRI V1
该需求需要iSulad对K8S新版本CRI接口1.29提供支持,
对于1.25及之前的CRI接口,V1alpha2和V1功能保持一致,1.26及之后新增的特性仅在CRI V1中提供支持。 此次升级的功能和特性仅在CRI V1中提供支持,因此新增特性均需要按照以下配置使能CRI V1。
CRI V1使能:
iSulad daemon.json中enable-cri-v1设置为true,重启iSulad
{
"group": "isula",
"default-runtime": "runc",
...
"enable-cri-v1": true
}
若通过源码进行编译安装iSulad需开启ENABLE_CRI_API_V1编译选项
cmake ../ -D ENABLE_CRI_API_V1=ON
RuntimeConfig获取cgroup驱动配置
systemd-cgroup配置
iSulad同时提供对systemd和cgroupfs两种cgroup驱动支持, 默认使用cgroupfs作为cgroup驱动,可以通过配置iSulad容器引擎提供对systemd cgroup驱动支持。 iSulad仅提供底层运行时为runc时systemd-cgroup的支持。通过修改iSulad配置文件daemon.json, 设置systemd-cgroup为true,重启iSulad,则使用systemd cgroup驱动。
{
"group": "isula",
"default-runtime": "runc",
...
"enable-cri-v1": true,
"systemd-cgroup": true
}
GetContainerEvents Pod 生命周期事件生成
Pod Events配置
修改iSulad配置文件daemon.json, 设置enable-pod-events为true,重启iSulad。
{
"group": "isula",
"default-runtime": "runc",
...
"enable-cri-v1": true,
"enable-pod-events": true
}
使用限制
- 以上新增特性,iSulad仅提供容器运行时设置为runc时的支持。
- 由于cgroup oom会同时触发容器cgroup路径删除,若iSulad对oom事件处理发生在 cgroup路径删除之后,iSulad则无法成功捕捉容器oom事件, 可能导致ContainerStatus中reason字段设置不正确。
- iSulad不支持交叉使用不同的cgroup驱动管理容器,启动容器后iSulad的cgroup驱动配置不应该发生变化。