Skip to main content
Version: v0.30.0

Requirements

Kernel Requirements (per gadget)

Inspektor Gadget uses eBPF to obtain the insights it provides. The different gadgets provided use different eBPF capabilities. The capabilities available depend on the version of the kernel running in the node, as well as whether or not the kernel has BTF enabled (via CONFIG_DEBUG_INFO_BTF=y).

The gadgets implementation relies on Compile Once - Run Everywhere (CO-RE) approach. These tools need to have BTF information. This information is collected from three different sources, a fallback mechanism is implemented to try another source if the previous one was not available.

  1. The kernel already exposes it through /sys/kernel/btf/vmlinux: the kernel was compiled with CONFIG_DEBUG_INFO_BTF).
  2. It's available in the gadget container image: we ship the BTF information for some well known kernel versions using BTFGen.
  3. It's downloaded from BTFHub.

In case your kernel does not support CO-RE, we advise you to use an older version of Inspektor Gadget which provides BCC gadget like v0.21.0-bcc

Required Kernel Versions and CONFIG_*

This section summarizes the kernel versions and features that are required to run the gadgets. This has been generated by testing different Ubuntu versions and their shipped kernels, hence it's possible that some gadgets work in older kernels than the one mentioned here.

All gadgets require the following:

  1. CONFIG_BPF=y
  2. CONFIG_BPF_SYSCALL=y.
  3. CONFIG_DEBUG_INFO_BTF=y if the host kernel is not supported by BTFHub.

For all gadgets, the minimum kernel version and additional needed CONFIG_* are listed in the following table:

GadgetMinimum KernelAdditional CONFIG_*
advise network-policyU.U
advise seccomp-profileU.U
audit seccomp5.4KPROBES
profile block-ioU.U
profile cpuU.U
profile tcprttU.UKPROBES
snapshot process5.10
snapshot socket5.10
top block-ioU.UKPROBES
top file5.4KPROBES
top tcpU.UKPROBES
trace bind5.4KPROBES, KRETPROBES
trace capabilitiesU.UKPROBES
trace dns5.4
trace exec5.4FTRACE_SYSCALLS
trace fsslower5.4KPROBES, KRETPROBES
trace mountU.UFTRACE_SYSCALLS
trace oomkill5.4KPROBES
trace open5.4FTRACE_SYSCALLS
trace signal5.4FTRACE_SYSCALLS
trace sniU.U
trace tcpU.U
trace tcpconnect5.8KPROBES, KRETPROBES
trace tcpdrop5.18
trace tcpretrans4.15
script4.9
traceloop4.15KPROBES

If the kernel version is U.U, it means we do not have this information at the moment.

Kubernetes Platform Requirements

Kubernetes platformsSupport
Minikube✔️
AKS, EKS, GKS✔️
AWS Fargate, Azure Containers instances, GKE Autopilot❌ (see #1320)
OpenShift✔️
Talos✔️

Container Runtime Requirements

OrchestratorContainer managerContainer runtimeSupport
dockercontainerdrunc✔️
nerdctlcontainerdrunc✔️
Kubernetescontainerdrunc✔️
Kubernetescontainerdwasm❌ (see #1899)
Kubernetescontainerdkatacontainers
KubernetesCRI-Orunc / crunKubernetes v1.20+ (see below)
Podman (root)podmanrunc / crun✔️
Podman (rootless)podmanrunc / crunOnly with Podman API enabled (see below)

CRI-O

We only support CRI v1 meaning that only CRI-O v1.20+ (compatible with Kubernetes v1.20+) is supported.

Podman (rootless)

We use Podman API to trace containers. In case we want trace rootless containers, we need to ensure that the Podman API is available via socket as:

$ systemctl start --user podman.socket
# use rootless Podman API socket i.e /run/user/USERID#/podman/podman.sock
$ sudo ig -r podman --podman-socketpath /run/user/$UID/podman/podman.sock list-containers
$ sudo ig -r podman --podman-socketpath /run/user/$UID/podman/podman.sock snapshot process