githubEdit

CRI-O

Container runtime interface OCI

Introduction

CRI-O is a lightweight container runtime specifically designed for Kubernetes. It implements the Kubernetes Container Runtime Interface (CRI) using OCI-compatible runtimes, providing a minimal and stable alternative to Docker and containerd for running containers in Kubernetes clusters. CRI-O follows the Kubernetes release cycle, with each CRI-O minor version matching the corresponding Kubernetes minor version.

Key Features

  • CRI-Native: Built exclusively to implement the Kubernetes CRI specification

  • OCI-Compatible: Supports any OCI-compliant runtime (runc, crun, Kata Containers)

  • Minimal Footprint: No daemon bloat -- only implements what Kubernetes needs

  • Version Alignment: CRI-O 1.x.y is compatible with Kubernetes 1.x.y

  • Image Management: Pulls images from any OCI-compliant or Docker registry

  • Conmon: Lightweight container monitor that tracks container lifecycle

Architecture

CRI-O sits between the kubelet and the OCI runtime:

kubelet → CRI (gRPC) → CRI-O → OCI Runtime (runc/crun)

                        conmon (container monitor)

Components:

  • CRI-O daemon: Receives CRI calls from kubelet

  • conmon: Per-container process that monitors the container and handles logging

  • OCI runtime: Actual container executor (default: runc)

  • CNI plugins: Network configuration for pods

  • containers/image: Image pull and management library

Installation

RHEL/CentOS/Fedora

Verify Installation

Configuration

CRI-O configuration is located at /etc/crio/crio.conf:

Kubeadm Integration

Configure kubeadm to use CRI-O as the container runtime:

Reference:

Last updated