Skip to content

Tink Worker

The tink-worker is a component provided by the Tinkerbell community, it is written in Go and you can find it as part of the tink/tinkerbell repository.

You can think about it as the "smart" part of an operating system installation environment. It is an agent that runs in the operating system that gets booted via netboot, and its responsibility is to interact with the tink-server, identifying and executing workflows targeting the hardware it runs to.

The tink-worker implementation we ship uses Docker as container runtime engine. Every action gets executed as a container.

How tink-worker Starts

The way tink-worker starts does not follow any particular rule and it is left to the operating system installation environment. Here an example from OSIE.

As part of the OSIE init script the tink-worker container gets executed:

# tink-worker has been updated to use ID rather than WORKER_ID
# TODO: remove setting WORKER_ID when we no longer want to support backwards compatibility
# with the older tink-worker
docker run --privileged -t --name "tink-worker" \
    -e "container_uuid=$id" \
    -e "WORKER_ID=$worker_id" \
    -e "ID=$worker_id" \
    -e "DOCKER_REGISTRY=$docker_registry" \
    -e "TINKERBELL_GRPC_AUTHORITY=$grpc_authority" \
    -e "TINKERBELL_CERT_URL=$grpc_cert_url" \
    -e "REGISTRY_USERNAME=$registry_username" \
    -e "REGISTRY_PASSWORD=$registry_password" \
    -v /worker:/worker \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -t \
    --net host \
    "$docker_registry/tink-worker:latest"

Future Development

As you can imagine, it would be nice to declare a good interface between tink-worker and tink-server, simplifying the composition and opening the possibility for you to write your own tink-worker. This is important if you don't want to run Docker, for example.