Docker Engine) ・ GUI tool also - Podman Desktop (like Docker Desktop) ・ Runs on macOS and Windows as well as Linux ▸ CRI-O ・ High level runtime, called from Kubernetes CRI (like Containerd) ・ Runs on Linux only ▸ conmon ・ Works as a subreaper of a container process (like containerd shim) ▸ crun ・ OCI runtime (like runc) Short introduction: Podman and CRI-O Podman CRI-O OCI Runtime (runc, crun, youki, ...) Docker Containerd runc c/storage, c/image, c/common shim conmon
C ・ Originally created for the PoC of cgroups v2 (over the Christmas vacations...) ・ https://www.redhat.com/en/blog/introduction-crun ▸ Features ・ Small binary size, short startup time, small memory footprint ・ Effective when running on Edge/IoT devices ・ Simple logic when starting container process ・ ...compared to runc ▸ Handlers enable execution in container environments other than normal binary ・ VM in a container (with libkrun) ・ Confidential Computing (with libkrun) ・ AMD SEV (SEV, SEV-ES and SEV-SNP) ・ WebAssembly binary in a container ・ WasmEdge, WasmTime, Wasmer, WAMR (WebAssembly Micro Runtime) ▸ Mirantis Container Runtime supports crun recently ・ v25.0.9 Release Notes crun
CRI, runs OCI containers ▸ CNCF graduated project ▸ Focused on being called from Kubernetes ・ Should pass all the Kubernetes e2e tests ・ Other use cases are out of scope, no extra functionality is included. ・ E.g. can pull container image, but no push functionality ・ Support lifecycle, version (major, minor) aligned to Kubernetes ・ CRI-O v1.29.* runs on Kubernetes v1.29.* ・ CRI-O v1.28.* runs on Kubernetes v1.28.* ▸ Focus on security, performance and stability ▸ Users ・ Red Hat OpenShift, Oracle Linux Cloud Native Environment, Lyft, Reddit, Adobe, ... ・ https://github.com/cri-o/cri-o/blob/main/ADOPTERS.md CRI-O
libraries ・ containers/storage ・ Deploy layered container image and assemble root file system ・ Forked from Docker graphdrivers and rewritten significantly ・ containers/image ・ Pull image from container registry ・ containers/common ・ Commonly used routines in containers org ・ Input parse, systemd scope operations, operations around cgroup, authentication, sysinfo, seccomp, capabilities, selinux/apparmor, configuration file related, etc. ▸ CNI plugins ▸ conmon (container monitor) ・ A small resident program written in C that manages the container lifecycle ・ one conmon per container ・ equivalent to containerd-shim (subreaper of container process) ・ logging, TTY control, attach process, etc CRI-O related components
Artifact initial support ・ Add OCI artifact support using libimage #8996 ▸ Volume subpath ・ Add image volume subpath support #9050 ▸ Mount ・ OCPNODE-3016: support mount OCI artifact #9062 ▸ Disable/enable mount ・ Add the option to disable/enable OCI Artifact mount #9147 ▸ Image verification ・ Add signature verification for image volumes #9060 ▸ Multi arch support ・ Support multi arch artifact #9194 OCI Artifact support - CRI-O
▸ Previously, there was no API to set STOPSIGNAL for Kubernetes Pod/Container. ・ If you wanted to customize it, you had to update the Dockerfile and recreate the image. ▸ KEP-4960: Container Stop Signals ・ spec.containers[*].lifecycle.stopSignal ・ CRI API is changed ▸ CRI-O supports STOPSIGNAL ・ https://github.com/cri-o/cri-o/pull/9086 Container Stop Signals support
-v /dev/kvm:/dev/kvm \ --annotation=run.oci.handler=krun \ --name nginx nginx • コンテナプロセスのPIDを確認する • KVMの仮想環境でコンテナプロセスが動いていることを確認する $ ls -l /proc/${pid}/fd | grep kvm lrwx------. 1 ori ori 64 Nov 16 00:40 19 -> anon_inode:kvm-vm lrwx------. 1 ori ori 64 Nov 16 00:43 29 -> anon_inode:kvm-vcpu:0 lrwx------. 1 ori ori 64 Nov 16 00:43 31 -> anon_inode:kvm-vcpu:1 lrwx------. 1 ori ori 64 Nov 16 00:43 33 -> anon_inode:kvm-vcpu:2 lrwx------. 1 ori ori 64 Nov 16 00:43 35 -> anon_inode:kvm-vcpu:3 lrwx------. 1 ori ori 64 Nov 16 00:43 37 -> anon_inode:kvm-vcpu:4 lrwx------. 1 ori ori 64 Nov 16 00:43 39 -> anon_inode:kvm-vcpu:5 lrwx------. 1 ori ori 64 Nov 16 00:43 41 -> anon_inode:kvm-vcpu:6 lrwx------. 1 ori ori 64 Nov 16 00:43 43 -> anon_inode:kvm-vcpu:7 $ podman inspect nginx | jq '.[].State.Pid' 190597 $ pid=$(podman inspect nginx | jq '.[].State.Pid') $ ps -p ${pid} f PID TTY STAT TIME COMMAND 190597 ? Ssl 0:00 [libcrun:krun] /docker-entrypoint.sh nginx -g daemon off;
leading provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you