參考資訊:
https://github.com/containerd/containerd/issues/6645
https://github.com/containerd/containerd/blob/main/docs/cri/config.md
https://github.com/opencontainers/runtime-spec/blob/main/config.md#prestart
步驟如下:
$ su
# ctr oci spec > /var/lib/rancher/k3s/agent/etc/containerd/myconfig.json
# vim /var/lib/rancher/k3s/agent/etc/containerd/myconfig.json
"hooks": {
"createRuntime": [
{
"path": "/home/user/run.sh",
"args": [ "" ],
"env": [],
"timeout": 120
}
]
}
# cp /var/lib/rancher/k3s/agent/etc/containerd/config.toml /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
# vim /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
base_runtime_spec = "/var/lib/rancher/k3s/agent/etc/containerd/myconfig.json"
# vim /home/user/run.sh
#!/bin/bash
echo 123 > /tmp/hook_createRuntime
# reboot
# crictl info | grep RuntimeSpec
"baseRuntimeSpec": "/var/lib/rancher/k3s/agent/etc/containerd/myconfig.json",
# vim test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
# kubectl create -f test.yaml
deployment.apps/nginx-deployment created
# cat /tmp/hook_createRuntime
123
# kubectl delete deployment nginx-deployment
deployment.apps "nginx-deployment" deleted
# kubectl get pod
No resources found in default namespace.