Table of Contents
In this article, I will take you through the steps to install and use crictl on Linux Using 10 easy steps. crictl is a free and open source command-line interface for CRI-compatible container runtimes. It is mainly used for inspecting and debugging container runtimes and applications on a Kubernetes node. This interface can be easily implemented by runtimes like cri-o, containerd and docker. You just have to configure the interface to be used with your runtime in your Kubernetes cluster.
You can even use multiple runtimes in a k8s cluster as the container runtime is only bound to the kubelet configuration. crictl can be easily installed and used in a Linux based system. Here we will see the steps to install in great detail with the help of real world examples. More on GitHub website.
How to Install and Use crictl on Linux Using 10 Easy Steps
Also Read: Solved: "Kubectl error: You must logged in to the Server (Unauthorized)"
Step 1: Prerequisites
a) You should have a running Linux
(in my case, it is Ubuntu 20.04 LTS
) Server.
b) You should have sudo
or root
access to run privileged commands.
c) You should have a container runtime installed in your Server.
d) You should have wget
or curl
and tar
utility available in your Server.
e) You should have kubectl
utility available in your Server.
Step 2: Update Your Server
In the first step, I would recommend you to check and install all the available updates from default repo to avoid any hazzle during the installation of a new package in your System. You can use below method to do that depending on the Linux distribution you are using.
a) On Ubuntu/Debian System
If you are using Ubuntu/Debian based system then you can install all the available updates from default Ubuntu repo by using sudo apt update
command and then upgrade packages to the latest version by using sudo apt upgrade
command as shown below.
cyberithub@ubuntu:~$ sudo apt update && sudo apt upgrade
[sudo] password for cyberithub:
Hit:1 https://dl.google.com/linux/chrome/deb stable InRelease
Hit:2 http://ppa.launchpad.net/flatpak/stable/ubuntu focal InRelease
Hit:3 https://dl.winehq.org/wine-builds/ubuntu focal InRelease
Get:4 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Hit:5 http://in.archive.ubuntu.com/ubuntu focal InRelease
Get:6 http://in.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Hit:7 https://download.sublimetext.com apt/stable/ InRelease
Get:8 http://in.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Get:9 http://security.ubuntu.com/ubuntu focal-security/main amd64 DEP-11 Metadata [59.9 kB]
Get:10 http://in.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2,469 kB]
Get:11 http://security.ubuntu.com/ubuntu focal-security/universe amd64 DEP-11 Metadata [95.9 kB]
Get:12 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 DEP-11 Metadata [940 B]
Get:13 http://in.archive.ubuntu.com/ubuntu focal-updates/main i386 Packages [807 kB]
......................................................................
b) On RHEL/CentOS System
If you are using RHEL/CentOS based system then you need to run sudo yum update && sudo yum upgrade
command or sudo dnf update && sudo dnf upgrade
command, depending on the OS version you are currently using.
[cyberithub@centos ~]$ sudo yum update && sudo yum upgrade
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink | 7.0 kB 00:00:00
* base: centos.excellmedia.net
* epel: epel.excellmedia.net
* extras: centos.excellmedia.net
* updates: centos.excellmedia.net
base | 3.6 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): epel/x86_64/group_gz | 99 kB 00:00:00
(2/4): updates/7/x86_64/primary_db | 20 MB 00:00:04
(3/4): epel/x86_64/primary_db | 7.0 MB 00:00:05
(4/4): epel/x86_64/updateinfo | 1.0 MB 00:00:06
Resolving Dependencies
--> Running transaction check
---> Package firefox.x86_64 0:102.8.0-2.el7.centos will be updated
---> Package firefox.x86_64 0:102.10.0-1.el7.centos will be an update
---> Package libzstd.x86_64 0:1.5.4-1.el7 will be updated
---> Package libzstd.x86_64 0:1.5.5-1.el7 will be an update
..........................................................
Step 3: Download tar file
Then in the next step, you need to download the tar
package from Github by using below wget
command. This will download the package in your local directory of your System.
cyberithub@ubuntu:~$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.0/crictl-v1.26.0-linux-amd64.tar.gz --2023-04-15 17:18:20-- https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.0/crictl-v1.26.0-linux-amd64.tar.gz Resolving github.com (github.com)... 20.207.73.82 Connecting to github.com (github.com)|20.207.73.82|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/80172100/3e5407f0-625f-49c9-878b-59e321e38853?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230415T114821Z&X-Amz-Expires=300&X-Amz-Signature=a12dbba38d74515877bc23e189a040822710c7539fbd34c6830688473ff9a8ad&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=80172100&response-content-disposition=attachment%3B%20filename%3Dcrictl-v1.26.0-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream [following] --2023-04-15 17:18:21-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/80172100/3e5407f0-625f-49c9-878b-59e321e38853?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230415T114821Z&X-Amz-Expires=300&X-Amz-Signature=a12dbba38d74515877bc23e189a040822710c7539fbd34c6830688473ff9a8ad&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=80172100&response-content-disposition=attachment%3B%20filename%3Dcrictl-v1.26.0-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.110.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 22931211 (22M) [application/octet-stream] Saving to: ‘crictl-v1.26.0-linux-amd64.tar.gz’ crictl-v1.26.0-linux-amd64.tar.gz 100%[============================================================================>] 21.87M 5.96MB/s in 4.5s 2023-04-15 17:18:27 (4.88 MB/s) - ‘crictl-v1.26.0-linux-amd64.tar.gz’ saved [22931211/22931211]
Step 4: Extract the file
The tar package basically contains the crictl binary utility which you need to extract and keep it in /usr/local/bin
directory so that it can be detected by the system. This can be done by using sudo tar zxvf crictl-v1.26.0-linux-amd64.tar.gz -C /usr/local/bin
command as shown below.
cyberithub@ubuntu:~$ sudo tar zxvf crictl-v1.26.0-linux-amd64.tar.gz -C /usr/local/bin [sudo] password for cyberithub: crictl
Step 5: Check Version
After successfully placing the binary file, you can test it by running crictl --version
command as shown below.
cyberithub@ubuntu:~$ crictl --version crictl version v1.26.0
Step 6: Check Your Container Runtime
To check your container runtime, you need to use kubectl get nodes -o wide
command in your system.
cyberithub@ubuntu:~$ kubectl get nodes -o wide
Step 7: Configure crictl
You need to configure crictl based on the container runtime installed in your system. For example if you are using containerd
runtime in your node then you can use below command to configure crictl
.
cyberithub@ubuntu:~$ echo "===================================" &&\ > echo "Config BEFORE change:" &&\ > sudo cat /etc/crictl.yaml &&\ > sudo crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock --set image-endpoint=unix:///run/containerd/containerd.sock &&\ > echo "===================================" &&\ > echo "Config AFTER change:" &&\ > sudo cat /etc/crictl.yaml =================================== Config BEFORE change: runtime-endpoint: unix:///var/run/dockershim.sock image-endpoint: unix:///var/run/dockershim.sock timeout: 2 debug: true pull-image-on-create: false disable-pull-on-run: false =================================== Config AFTER change: runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 2 debug: true pull-image-on-create: false disable-pull-on-run: false
Step 8: Pull Images
If you want to pull a image say latest Ubuntu image from registry then you need to run sudo crictl pull ubuntu
command as shown below.
cyberithub@ubuntu:~$ sudo crictl pull ubuntu
DEBU[0000] get image connection
DEBU[0000] PullImageRequest: &PullImageRequest{Image:&ImageSpec{Image:ubuntu,Annotations:map[string]string{},},Auth:nil,SandboxConfig:nil,}
Step 9: List Images
To list all the images, you need to run sudo crictl images
command as shown below.
cyberithub@ubuntu:~$ sudo crictl images [sudo] password for cyberithub: DEBU[0000] get image connection DEBU[0000] ListImagesRequest: &ListImagesRequest{Filter:&ImageFilter{Image:&ImageSpec{Image:,Annotations:map[string]string{},},},} DEBU[0000] ListImagesResponse: &ListImagesResponse{Images:[]*Image{&Image{Id:sha256:08d22c0ceb150ddeb2237c5fa3129c0183f3cc6f5eeb2e7aa4016da3ad02140a,RepoTags:[docker.io/library/ubuntu:latest],RepoDigests:[docker.io/library/ubuntu@sha256:67211c14fa74f070d27cc59d69a7fa9aeff8e28ea118ef3babc295a0428a6d21],Size_:29537805,Uid:nil,Username:,Spec:nil,Pinned:false,},},} IMAGE TAG IMAGE ID SIZE docker.io/library/ubuntu latest 08d22c0ceb150 29.5MB
Step 10: Delete an Image
To delete an image, you can use sudo crictl rmi <image_id>
syntax. For example, here we are deleting a docker image of ID 08d22c0ceb150
using sudo crictl rmi 08d22c0ceb150
command as shown below.
cyberithub@ubuntu:~$ sudo crictl rmi 08d22c0ceb150 DEBU[0000] get image connection DEBU[0000] User specified image to be removed: 08d22c0ceb150 DEBU[0000] ImageStatusRequest: &ImageStatusRequest{Image:&ImageSpec{Image:08d22c0ceb150,Annotations:map[string]string{},},Verbose:false,} DEBU[0000] ImageStatusResponse: &ImageStatusResponse{Image:&Image{Id:sha256:08d22c0ceb150ddeb2237c5fa3129c0183f3cc6f5eeb2e7aa4016da3ad02140a,RepoTags:[docker.io/library/ubuntu:latest],RepoDigests:[docker.io/library/ubuntu@sha256:67211c14fa74f070d27cc59d69a7fa9aeff8e28ea118ef3babc295a0428a6d21],Size_:29537805,Uid:nil,Username:,Spec:nil,Pinned:false,},Info:map[string]string{},} DEBU[0000] RemoveImageRequest: &RemoveImageRequest{Image:&ImageSpec{Image:08d22c0ceb150,Annotations:map[string]string{},},} Deleted: docker.io/library/ubuntu:latest