1 unstable release
new 0.1.0 | Nov 4, 2024 |
---|
#3 in #ttrpc
60KB
672 lines
shimkit
Library for writing containerd shims
Task API
Setup
-
Build the logger example
cargo build --example logger
-
Create an executable script to print the path to the shim server
cat <<EOF | sudo tee /usr/local/bin/containerd-shim-logger-v1 > /dev/null #!/bin/bash echo unix:///run/containerd/containerd-shim-logger-debug.sock.ttrpc EOF sudo chmod a+x /usr/local/bin/containerd-shim-logger-v1
-
Then run the shim
sudo ./target/debug/examples/logger start
Start a container
Now in a different terminal start a container with docker run
docker run --runtime=io.containerd.logger.v1 hello-world
The command will fail because the logger shim is just a stub, but you will see the requests that containerd did on the shim printed to the terminal.
Sandbox API
Setup
- If you haven't, follow the setup in steps in Task API
- Enable containerd's sandbox API by setting the environent variable
ENABLE_CRI_SANDBOXES=sandboxed
when launching containerd. If you use systemd edit/usr/lib/systemd/system/containerd.service
and in the[Service]
section addEnvironment=ENABLE_CRI_SANDBOXES=sandboxed
.... [Service] ExecStartPre=-/user/bin/modprobe overlay ExecStart=/usr/bin/containerd Environment=ENABLE_CRI_SANDBOXES=sandboxed ...
- Add the runtime to containerd's
config.toml
file/etc/containerd/config.toml
. If the file doesn't exist, create it. A minimal example below:version = 2 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.logger] runtime_type = "io.containerd.logger.v1" sandbox_mode = "shim" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2"
- Restart containerd. If you use systemd
sudo systemctl daemon-reload sudo systemctl restart containerd
Start a sandbox
Now start a new sandbox using crictl runp
cat <<EOF > /tmp/pod-config.yaml
metadata:
name: my-sandbox
namespace: default
uid: abc123
EOF
sudo crictl --runtime-endpoint=unix:///run/containerd/containerd.sock \
runp --runtime=logger \
/tmp/pod-config.yaml
The command will fail because the logger shim is just a stub, but you will see the requests that containerd did on the shim printed to the terminal.
Dependencies
~14–27MB
~393K SLoC