{"id":141472,"date":"2023-07-22T00:24:14","date_gmt":"2023-07-21T21:24:14","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=141472"},"modified":"2023-11-04T12:36:02","modified_gmt":"2023-11-04T09:36:02","slug":"interact-with-containerd-runtime-in-kubernetes","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/interact-with-containerd-runtime-in-kubernetes\/","title":{"rendered":"Managing Containerd Containers using ctr and crictl"},"content":{"rendered":"\n<p>Containerd is an open source, and container runtime interface (CRI) compliant container runtime initially created by Docker and donated to the Cloud Native Computing Foundation (CNCF). It supports the standards established by Open Container Initiative (OCI). Containerd will be responsible for the management of container lifecycle on a physical or virtual machine (a host). The daemon process will pull container images from container registries and mount storage. It can also start, stop, destroy, and enable networking for a container.<\/p>\n\n\n\n<p>In most circumstances you don&#8217;t need to administer containerd directly in your <a href=\"https:\/\/computingforgeeks.com\/install-kubernetes-production-cluster-using-rancher-rke\/\">Kubernetes<\/a> deployment. But we will provide two ways in which you can interact with images and containers on containerd just for diagnosis purposes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Interact with containerd runtime using ctr<\/h2>\n\n\n\n<p><strong><em>ctr<\/em><\/strong> is unsupported debug and administrative client for interacting with the containerd daemon. Because it is unsupported, the commands,<br>options, and operations are not guaranteed to be backward compatible or stable from release to release of the containerd project.<\/p>\n\n\n\n<p>Check of containerd service status by running the following command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">systemctl status containerd<\/mark>\n\u25cf containerd.service - containerd container runtime\n     Loaded: loaded (\/etc\/systemd\/system\/containerd.service; enabled-runtime; preset: disabled)\n     Active: active (running) since Wed 2023-07-19 09:46:47 UTC; 1 day 12h ago\n       Docs: https:\/\/containerd.io\n    Process: 806 ExecStartPre=\/sbin\/modprobe overlay (code=exited, status=0\/SUCCESS)\n   Main PID: 823 (containerd)\n      Tasks: 136\n     Memory: 329.2M\n        CPU: 19min 51.135s\n     CGroup: \/system.slice\/containerd.service\n             \u251c\u2500 823 \/opt\/bin\/containerd<\/code><\/pre>\n\n\n\n<p>Next get containerd server and client versions.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> sudo ctr version<\/mark>\nClient:\n  Version:  1.6.16\n  Revision: 92b3a9d6f1b3bcc6dc74875cfdea653fe39f09c2\n  Go version: go1.18.10\n\nServer:\n  Version:  v1.6.8\n  Revision: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6\n  UUID: 5702a568-3a30-48cc-b97f-96e646cf95ff\nWARNING: version mismatch\nWARNING: revision mismatch<\/code><\/pre>\n\n\n\n<p>Show a list of commands<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ctr help<\/code><\/pre>\n\n\n\n<p>Shows help for one command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ctr help &lt;command&gt;\nctr help images\nctr help run\nctr help container<\/code><\/pre>\n\n\n\n<p>List namespaces<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo ctr ns ls<\/mark>\nNAME   LABELS\nk8s.io<\/code><\/pre>\n\n\n\n<p>The <code>--namespace value, -n value<\/code> is used to specify the namespace to use with commands (default: &#8220;<strong><em>default<\/em><\/strong>&#8220;).<\/p>\n\n\n\n<p>To list images known to containerd in <a href=\"https:\/\/computingforgeeks.com\/install-kubernetes-cluster-on-rocky-linux-with-kubeadm-crio\/\">kubernetes<\/a> namespace run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo ctr -n k8s.io container list<\/mark>\nCONTAINER                                                           IMAGE                                              RUNTIME\n14547fb3d12d8451b33e8f814fe223bf127f8abf1f48a69a5cf6b2905abccf05    registry.k8s.io\/pause:3.6                          io.containerd.runc.v2\n3791b1b66442a14b6361c2347831981bbedc86a0cead7988f0a137c14b5ef54f    registry.k8s.io\/kube-apiserver:v1.24.6             io.containerd.runc.v2\n4831df98ec7f6981dfbddf1c546c88ac75307f343548e266e37a3984ae36fd75    registry.k8s.io\/pause:3.6                          io.containerd.runc.v2\n50b0ff87965a0f58ce315a40b2e1ebe4a8a97867e2c56c54b58c2fef53768f69    registry.k8s.io\/kube-apiserver:v1.24.6             io.containerd.runc.v2\n545bf5226fd1ec64ddfd3d64dd3ead50795d0c2cf0b4347708e4a20e1eb248a6    registry.k8s.io\/pause:3.6                          io.containerd.runc.v2\n60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd    quay.io\/calico\/node:v3.23.3                        io.containerd.runc.v2\n65809c67b6a68dddf62db16a6bd38910016f00e4a243d9a23f1d15a19cf997ef    registry.k8s.io\/pause:3.6                          io.containerd.runc.v2\n675d091aa8c3206f7c9d6ee7cf1440429abaf3d9bf23205e2094ee58afb96319    registry.k8s.io\/pause:3.6                                   \n....<\/code><\/pre>\n\n\n\n<p>List containerd plugins in kubernetes namespace.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> sudo ctr -n k8s.io plugins list<\/mark>\nTYPE                                  ID                       PLATFORMS      STATUS\nio.containerd.content.v1              content                  -              ok\nio.containerd.snapshotter.v1          aufs                     linux\/amd64    skip\nio.containerd.snapshotter.v1          btrfs                    linux\/amd64    skip\nio.containerd.snapshotter.v1          native                   linux\/amd64    ok\nio.containerd.snapshotter.v1          overlayfs                linux\/amd64    ok\nio.containerd.snapshotter.v1          zfs                      linux\/amd64    skip\nio.containerd.metadata.v1             bolt                     -              ok\n....<\/code><\/pre>\n\n\n\n<p>Display containerd events<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo ctr events<\/mark>\n2023-07-20 22:06:45.533485709 +0000 UTC k8s.io \/tasks\/exec-added {\"container_id\":\"60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd\",\"exec_id\":\"6535efd575bb0ac4d7c49557fa790962362e8f9c47a376c93daa4481f5b079e3\"}\n2023-07-20 22:06:45.53386204 +0000 UTC k8s.io \/tasks\/exec-added {\"container_id\":\"60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd\",\"exec_id\":\"befb68da2de2d64ef697d5f28e4285db0faee08b9667fb6d4479e84ec87dc229\"}\n2023-07-20 22:06:45.55858748 +0000 UTC k8s.io \/tasks\/exec-started {\"container_id\":\"60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd\",\"exec_id\":\"6535efd575bb0ac4d7c49557fa790962362e8f9c47a376c93daa4481f5b079e3\",\"pid\":1100376}\n2023-07-20 22:06:45.578203661 +0000 UTC k8s.io \/tasks\/exec-started {\"container_id\":\"60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd\",\"exec_id\":\"befb68da2de2d64ef697d5f28e4285db0faee08b9667fb6d4479e84ec87dc229\",\"pid\":1100398}\n2023-07-20 22:06:45.605581161 +0000 UTC k8s.io \/tasks\/exit {\"container_id\":\"60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd\",\"id\":\"6535efd575bb0ac4d7c49557fa790962362e8f9c47a376c93daa4481f5b079e3\",\"pid\":1100376,\"exited_at\":\"2023-07-20T22:06:45.605549682Z\"}\n2023-07-20 22:06:45.689340832 +0000 UTC k8s.io \/tasks\/exit {\"container_id\":\"60bb4a18cca9f00f548bbd138792330674e9014957ba3ae05455386ae8d4eabd\",\"id\":\"befb68da2de2d64ef697d5f28e4285db0faee08b9667fb6d4479e84ec87dc229\",\"pid\":1100398,\"exited_at\":\"2023-07-20T22:06:45.689322554Z\"}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Interact with containerd runtime using crictl<\/h2>\n\n\n\n<p><strong><em>crictl<\/em><\/strong> is a command-line interface for CRI-compatible container runtimes. You can use it to inspect and debug container runtimes and <a href=\"https:\/\/computingforgeeks.com\/install-and-use-winget-windows-package-manager-client\/\">applications<\/a> on a Kubernetes node. <\/p>\n\n\n\n<p>Check if <code>crictl<\/code> is installed in your system.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">which crictl<\/mark>\n\/usr\/bin\/crictl<\/code><\/pre>\n\n\n\n<p>crictl and its source are hosted in the<a href=\"https:\/\/github.com\/kubernetes-sigs\/cri-tools\" target=\"_blank\" rel=\"noreferrer noopener\"> cri-tools repository<\/a>. You can install it using the commands below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>VER=$(curl -s https:\/\/api.github.com\/repos\/kubernetes-sigs\/cri-tools\/releases\/latest|grep tag_name|cut -d '\"' -f 4|sed 's\/v\/\/')\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### Linux 64 bit ###\n<\/mark><\/em>wget https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v${VER}\/crictl-v${VER}-linux-amd64.tar.gz\ntar xvf crictl-v${VER}-linux-amd64.tar.gz\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### Linux 32 bit ###\n<\/mark><\/em>wget https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v{VER}\/crictl-v{VER}-linux-386.tar.gz\ntar xvf crictl-v{VER}-linux-386.tar.gz\n\n<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">### Linux ARM ###\n<\/mark><\/em>wget https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v{VER}\/crictl-v{VER}-linux-arm.tar.gz\ntar xvf crictl-v{VER}-linux-arm.tar.gz<\/code><\/pre>\n\n\n\n<p>Move extracted binary to directory in your PATH.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mv crictl \/usr\/local\/bin<\/code><\/pre>\n\n\n\n<p>Check version of crictl installed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> sudo crictl version<\/mark>\nVersion:  0.1.0\nRuntimeName:  containerd\nRuntimeVersion:  v1.6.8\nRuntimeApiVersion:  v1<\/code><\/pre>\n\n\n\n<p>Display information of the container runtime<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl info\nsudo crictl info|grep -i containerd<\/code><\/pre>\n\n\n\n<p>List pods running in the host.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo crictl pods<\/mark>\nPOD ID              CREATED             STATE               NAME                  NAMESPACE           ATTEMPT             RUNTIME\n3fe60548f7980       36 hours ago        Ready               node-exporter-jfm4r   monitoring          67                  (default)\nfab46d543d1aa       36 hours ago        Ready               nodelocaldns-76sgx    kube-system         1                   (default)\ne403ba0615eb8       36 hours ago        Ready               speaker-7q4dm         metallb-system      1                   (default)\nb59a5b4345df8       36 hours ago        Ready               calico-node-x9vwp     kube-system         12                  (default)\n0025007b6267d       36 hours ago        Ready               kube-proxy-xwdjj      kube-system         1                   (default)\n...<\/code><\/pre>\n\n\n\n<p>List container images on the node in your cluster.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo crictl image list<\/mark>\nIMAGE                                                    TAG                 IMAGE ID            SIZE\ndocker.io\/ambassador\/ambassador-agent                    1.0.3               0c5f3cfad4d65       33.2MB\ndocker.io\/datawire\/aes                                   1.14.4              3295ac39d11dc       175MB\ndocker.io\/datawire\/aes                                   3.5.1               9f53591be643b       187MB\ndocker.io\/grafana\/grafana                                9.3.1               179ad45e2c742       97.9MB\ndocker.io\/hashicorp\/vault-k8s                            1.1.0               d12e0fde3d588       28.7MB\ndocker.io\/hashicorp\/vault                                1.12.1              ba4d5c495a47b       85.7MB\ndocker.io\/kong\/httpbin                                   latest              97011e41c273a       250MB\ndocker.io\/kubernetesui\/dashboard                         v2.7.0              07655ddf2eebe       75.8MB\ndocker.io\/kubernetesui\/metrics-scraper                   v1.0.8              115053965e86b       19.7MB\ndocker.io\/kubeshark\/kubeshark                            37.0                1437fc61a2aa3       25.3MB\ndocker.io\/library\/nginx                                  &lt;none&gt;              448a08f1d2f94       57MB\ndocker.io\/library\/nginx                                  &lt;none&gt;              eb4a571591807       70.6MB\ndocker.io\/library\/nginx                                  &lt;none&gt;              6efc10a0510f1       57MB\ndocker.io\/library\/nginx                                  &lt;none&gt;              f9c14fe76d502       57.2MB\ndocker.io\/library\/nginx                                  1.24.0              1e96add5ea29f       57MB\ndocker.io\/library\/nginx                                  latest              021283c8eb95b       70.6MB\ndocker.io\/library\/postgres                               13                  b9c0a694b7811       137MB\ndocker.io\/library\/redis                                  5.0.1               c188f257942c5       35.2MB\ndocker.io\/library\/traefik                                v2.9.8              85dec640e68e6       38.8MB\n...<\/code><\/pre>\n\n\n\n<p>If you only need image IDs then use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl images -q<\/code><\/pre>\n\n\n\n<p>List containers active in your node.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> sudo crictl ps<\/mark>\nCONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD\n6825d2ec20200       5f5175f39b19e       36 hours ago        Running             calico-node         15                  b59a5b4345df8       calico-node-x9vwp\n019b7ffe8efd1       eb5a02daef2fe       36 hours ago        Running             kube-rbac-proxy     67                  3fe60548f7980       node-exporter-jfm4r\n3ddaa8beec819       0da6a335fe135       36 hours ago        Running             node-exporter       67                  3fe60548f7980       node-exporter-jfm4r\nc8fae715be0e5       5bae806f8f123       36 hours ago        Running             node-cache          1                   fab46d543d1aa       nodelocaldns-76sgx\n6cbe8ee0d8e80       738c5d221d601       36 hours ago        Running             speaker             1                   e403ba0615eb8       speaker-7q4dm\n622e6f6b44bc2       0bb39497ab33b       36 hours ago        Running             kube-proxy          1                   0025007b6267d       kube-proxy-xwdjj<\/code><\/pre>\n\n\n\n<p>To list all containers including exited ones<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl ps -a<\/code><\/pre>\n\n\n\n<p>Fetch the logs of a container<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> sudo crictl logs <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">&lt;ContainerID&gt;<\/mark><\/em><\/code><\/pre>\n\n\n\n<p>List container(s) resource usage statistics<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl stats <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">&lt;ContainerID&gt;<\/mark><\/em><\/code><\/pre>\n\n\n\n<p>Display the status of one or more containers<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl inspect <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">&lt;ContainerID&gt;<\/mark><\/em><\/code><\/pre>\n\n\n\n<p>Get all container logs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>crictl logs <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">&lt;containerid&gt;<\/mark><\/em><\/code><\/pre>\n\n\n\n<p>List pod resource usage statistics<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl statsp<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\"> &lt;PodID&gt;<\/mark><\/em>\n\n<em># Example\n<\/em>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo crictl statsp 3fe60548f7980<\/mark>\nPOD                   POD ID              CPU %               MEM\nnode-exporter-jfm4r   3fe60548f7980       1.40                49.97MB<\/code><\/pre>\n\n\n\n<p>Execute a command in a running container<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl exec -i -t <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">&lt;containerid&gt;<\/mark><\/em> ls<\/code><\/pre>\n\n\n\n<p>To see more command options run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl  help<\/code><\/pre>\n\n\n\n<p>Help page of specific command can be checked using syntax below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo crictl  help <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">&lt;command&gt;<\/mark><\/em><\/code><\/pre>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo crictl  help port-forward<\/mark>\nNAME:\n   crictl port-forward - Forward local port to a pod\n\nUSAGE:\n   crictl port-forward POD-ID &#91;LOCAL_PORT:]REMOTE_PORT<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Containerd is an open source, and container runtime interface (CRI) compliant container runtime initially created by Docker and donated to the Cloud Native Computing Foundation (CNCF). It supports the standards established by Open Container Initiative (OCI). Containerd will be responsible for the management of container lifecycle on a physical or virtual machine (a host). The &#8230; <a title=\"Managing Containerd Containers using ctr and crictl\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/interact-with-containerd-runtime-in-kubernetes\/\" aria-label=\"Read more about Managing Containerd Containers using ctr and crictl\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":140460,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2680,316,299,317],"tags":[18615],"class_list":["post-141472","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud","category-containers","category-how-to","category-kubernetes","tag-containerd"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/141472","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=141472"}],"version-history":[{"count":0,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/141472\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/140460"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=141472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=141472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=141472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}