In this post, we will cover how to install cri-o on Ubuntu 22.04 LTS step-by-step.
Cri-o is a lightweight container runtime for Kubernetes and it is strictly focused on OCI-compliant runtime and container images. It supports various image formats including docker image format. It offers the functionalities like managing image layers, overlay filesystems, containers lifecycle, monitoring and logging.
Prerequisites
- Pre-Installed Ubuntu 22.04 System
- Sudo User with admin rights
- Stable Internet connectivity
Let’s Jump into installation steps of CRI-O,
1 ) Install Updates
Login to your system Ubuntu 22.04 system and run following apt commands from the terminal,
$ sudo apt update $ sudo apt upgrade -y
Once all the updates are installed then reboot your system.
$ sudo reboot
2) Add Cri-o Repository
Define the following variables using export command,
$ export OS=xUbuntu_22.04 $ export CRIO_VERSION=1.25
Now run following set of commands to add cri-o kubic repository,
$ echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list $ echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
Import GPG key for Cri-o package repository
$ curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add - $ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -
Output of above commands would look like below,
Execute following command to update package index,
$ sudo apt update
3) Install CRI-O on Ubuntu 22.04
Now, we are all set to install cri-o, run following apt command,
$ sudo apt install cri-o cri-o-runc -y
Once cri-o and its dependencies are installed then start and enable its service, run
$ sudo systemctl start crio $ sudo systemctl enable crio $ sudo systemctl status crio
4) Add CNI Plugin for CRI-O
By default, there is no CNI plugin installed and configured for CRIO, so to install CNI plugin run beneath command,
$ sudo apt install containernetworking-plugins -y
After CNI installation, edit its configuration file ‘/etc/crio/crio.conf’, uncomment network_dir & plugin_dirs section and also add ‘/usr/lib/cni/’ under plugin_dirs section.
$ sudo vi /etc/crio/crio.conf … # Path to the directory where CNI configuration files are located. network_dir = "/etc/cni/net.d/" # Paths to directories where CNI plugin binaries are located. plugin_dirs = [ "/opt/cni/bin/", "/usr/lib/cni/", ] …
Save and close the file
Delete the existing ‘etc/cni/net.d/100-crio-bridge.conf’ file and download the latest bridge.conf using following curl command,
$ sudo rm -f /etc/cni/net.d/100-crio-bridge.conf $ sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conflist https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conflist
To make above changes into the affect, restart crio service
$ sudo systemctl restart crio
5) Install Cri-tools
Cri-tools will provide crictl utility which allows us to interact with cri-o container run time, run following command to install it,
$ sudo apt install cri-tools -y
After installing cri-tools, verify the crictl utility version,
$ crictl --version crictl version v1.25.0 $
Run ‘crictl info’ command to view information of container runtime
$ sudo crictl info
6) Test CRI-O Installation
To test cri-o installation, we will pull couple of images and then start a container to a pod using pulled images.
To pull hello-world and nginx image, run
$ sudo crictl pull hello-world $ sudo crictl pull nginx $ sudo crictl images
Output
Spin up a pod sandbox using following config file,
$ vi sandbox-config.json "metadata": { "name": "nginx-sandbox", "namespace": "default", "attempt": 1, "uid": "hdishd83djaidwnduwk28bcsb" }, "linux": { }, "log_directory": "/tmp" }
Save and exit the file and run
$ sudo crictl runp sandbox-config.json
To verify the pod status, run
$ sudo crictl pods
Create following json file which will be used for nginx container,
$ vi container-config.json "metadata": { "name": "nginx" }, "image":{ "image": "nginx" }, "log_path":"nginx.0.log", "linux": { } }
Save and exit the file.
To create a container to sandbox pod ‘1965fda7a06a6’, run following command
$ sudo crictl create 1965fda7a06a6 container-config.json sandbox-config.json
Now, run below command to start the container,
$ sudo crictl start be2867cfabb2442528b61dbd4347cd87de790c65bef631debf6e2742d94297f2
View container status,
$ sudo crictl ps
Output,
Great, above confirms that container has been started successfully.
Get pod ip address, run
$ sudo crictl inspectp -o table 1965fda7a06a6 | grep -w "IP Addresses" IP Addresses: 10.85.0.3 $
Try access nginx application using curl command,
$ curl 10.85.0.3
Perfect, above confirms that we are able to access nginx page.
That’s all from this post, please do post your queries and feedback in below comments section.
Also Read: How to Install Ansible in Ubuntu 22.04 LTS (Jammy Jellyfish)
Thank you for a very clear direction. The configuration has moved to conflist so it is now:
sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conflist https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conflist