2.9 KiB
isulad-hooks
This is a simple custom isulad hook for our own need, it interacts with isulad as a multifunctional hook.
- allow user to add your own devices or binds into the container and update device Qos for container(device hook in prestart state).
- allow user to remove udev rule which added by isulad-tools when container is exiting(device hook in post-stop state).
- allow user to add network interface and route rule to container(network hook in prestart state).
- allow user to remove network interface on host when container is exiting(network hook in post-stop state).
- allow user to do oci relabel for container in both prestart and post-stop state for container.
Actually, this hook only handles the container restart process, we use isulad-tools to add device/binds/network interface/route rule to container. And isulad-tools will save the device/network config to disk. And the hook will make sure the resources you added to container will be persistent after restart.
Rename it to your favourite name afterwards.
build
To build the binary, you need to download it then run
# make
# sudo make install
Note: make install will install the binary into your "/usr/bin", it's not a mandatory step, make your own choice for your convenience :)
customise hook service
We could use isulad-hooks to customise the hook service.
Usage of isulad-hooks:
-log string
set output log file
-state string
set isulad hook state mode: prestart or poststop
-with-relabel
isulad hook enable oci relabel hook function
As block device and network interface are both in our requirement, so these two function are mandantory.
We could use --with-relabel=true to add oci-relabel hook service for container.
We could use --state to specify which state the hook will be running in.
Full hook config: hook spec example of isulad-hooks
Try it!
First you need an enhanced lcrc with newly added --hook-spec flag,
after that, you can run it like this:
1.run isulad container with hook spec in example directory
$ lcrc run -d --name test_device --hook-spec $PWD/example/hookspec.json busybox sleep 20000
2.use isulad-tools to add device or binds to container
isulad-tools add-device test_device /dev/zero:/dev/test_zero:rwm /dev/zero:/dev/test_zero2:rwm
3.restart the container. to check the device is still in container.
lcrc restart test_device
Let's check the hookspec.json file:
{
"prestart": [
{
"path": "/var/lib/lcrd/hooks/device-hook",
"args": ["device-hook"],
"env": []
}
],
"poststart":[],
"poststop":[]
}
Contact me
If you have any question or suggestion, contact me! Also welcome for any issue or MR! Thanks!
Author: Zhang Wentao zhangwentao234@huawei.com