云原生

版本:25.03

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略有出入,以本文档描述的接口为准。

新增字段描述

  • CgroupDriver

    cgroup驱动的enum值列表

    参数成员

    描述

    SYSTEMD = 0

    systemd cgroup驱动

    CGROUPFS = 1

    cgroupfs驱动

  • LinuxRuntimeConfiguration

    容器引擎所使用的cgroup驱动

    参数成员

    描述

    CgroupDriver cgroup_driver

    容器引擎所使用的cgroup驱动枚举值

  • ContainerEventType

    容器事件类型枚举值

    参数成员

    描述

    CONTAINER_CREATED_EVENT = 0

    容器创建类型

    CONTAINER_STARTED_EVENT = 1

    容器启动类型

    CONTAINER_STOPPED_EVENT = 1

    容器停止类型

    CONTAINER_DELETED_EVENT = 1

    容器删除类型

  • SwapUsage

    虚拟内存使用情况

    参数成员

    描述

    int64 timestamp

    时间戳信息

    UInt64Value swap_available_bytes

    可使用虚拟内存字节数

    UInt64Value swap_usage_bytes

    已使用虚拟内存字节数

新增接口描述

RuntimeConfig

接口原型

text
rpc RuntimeConfig(RuntimeConfigRequest) returns (RuntimeConfigResponse) {}

接口描述

获取cgroup驱动配置 cgroupfs 或 systemd-cgroup

参数 RuntimeConfigRequest

无字段

返回值 RuntimeConfigResponse

返回值

描述

LinuxRuntimeConfiguration linux

描述cgroupfs或者systemd-cgroup的CgroupDriver枚举值

GetContainerEvents

接口原型

text
rpc GetContainerEvents(GetEventsRequest) returns (stream ContainerEventResponse) {}

接口描述

获取Pod生命周期事件流

参数 GetEventsRequest

无字段

返回值 ContainerEventResponse

返回值

描述

string container_id

容器id

ContainerEventType container_event_type

容器事件类型

int64 created_at

容器事件产生时间

PodSandboxStatus pod_sandbox_status

容器所属Pod的status信息

repeated ContainerStatus containers_statuses

容器所属Pod内所有容器的status信息

变更描述

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

json
{
    "group": "isula",
    "default-runtime": "runc",
    ...
    "enable-cri-v1": true
}

若通过源码进行编译安装iSulad需开启ENABLE_CRI_API_V1编译选项

bash
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驱动。

json
{
    "group": "isula",
    "default-runtime": "runc",
    ...
    "enable-cri-v1": true,
    "systemd-cgroup": true
}

GetContainerEvents Pod 生命周期事件生成

Pod Events配置

修改iSulad配置文件daemon.json, 设置enable-pod-events为true,重启iSulad。

json
{
    "group": "isula",
    "default-runtime": "runc",
    ...
    "enable-cri-v1": true,
    "enable-pod-events": true
}

使用限制

  1. 以上新增特性,iSulad仅提供容器运行时设置为runc时的支持。
  2. 由于cgroup oom会同时触发容器cgroup路径删除,若iSulad对oom事件处理发生在cgroup路径删除之后,iSulad则无法成功捕捉容器oom事件,可能导致ContainerStatus中reason字段设置不正确。
  3. iSulad不支持交叉使用不同的cgroup驱动管理容器,启动容器后iSulad的cgroup驱动配置不应该发生变化。