Talos as a Docker-Compose App
Talos can now be run as a docker container. This has a couple of downsides such as:
- No system-extensions
- No TalosCTL reset -> restart the containers and/or wipe container storage instead
- Dependance on host-kernel -> host kernel might not be optimised for Talos
- No MetalLB -> use ServiceLB or node port instead
- No TalosCTL Upgrade -> update the container instead
- Nvidia GPU Assignment
- Warning spam in container logs that it can’t alter bpf-related stuff
- CEPH and such can hijack drives -> Be careful!
Setup Instructions
Section titled “Setup Instructions”Docker Compose YAML
Section titled “Docker Compose YAML”Below you will find a compose.yml
on how to run Talos as a docker container.
services: talos-control-1: container_name: talos-control-1 environment: - PLATFORM=container hostname: talos-control-1 image: ghcr.io/siderolabs/talos:v1.10.2 networks: talosnet: ipv4_address: 192.168.10.50 privileged: true read_only: true tmpfs: - /run - /system - /tmp volumes: - /dev/zfs:/dev/zfs - /mnt/tank/apps/talos/control/system/state:/system/state - /mnt/tank/apps/talos/control/system/var:/var - /mnt/tank/apps/talos/control/system/cni:/etc/cni - /mnt/tank/apps/talos/control/system/kubernetes:/etc/kubernetes - /mnt/tank/apps/talos/control/system/libexec:/usr/libexec/kubernetes - /mnt/tank/apps/talos/control/system/opt:/opt - /mnt/tank/apps/talos/control/data/openebs:/var/openebs/local talos-worker-1: container_name: talos-worker-1 environment: - PLATFORM=container hostname: talos-worker-1 image: ghcr.io/siderolabs/talos:v1.10.2 networks: talosnet: ipv4_address: 192.168.10.51 privileged: true read_only: true tmpfs: - /run - /system - /tmp volumes: - /dev/zfs:/dev/zfs - /mnt/tank/apps/talos/worker/system/state:/system/state - /mnt/tank/apps/talos/worker/system/var:/var - /mnt/tank/apps/talos/worker/system/cni:/etc/cni - /mnt/tank/apps/talos/worker/system/kubernetes:/etc/kubernetes - /mnt/tank/apps/talos/worker/system/libexec:/usr/libexec/kubernetes - /mnt/tank/apps/talos/worker/system/opt:/opt - /mnt/tank/apps/talos/worker/data/openebs:/var/openebs/localnetworks: talosnet: driver: macvlan driver_opts: parent: br0 ipam: driver: default config: - subnet: 192.168.10.0/24 gateway: 192.168.10.1
Clustertool
Section titled “Clustertool”Talconfig
Section titled “Talconfig”This modification for your talconfig should allow for automatic selection of the container NIC. This is needed for each node defined.
nodes: - hostname: talos-control-1 networkInterfaces: - deviceSelector: hardwareAddr: "02:*"
Machineconfig
Section titled “Machineconfig”Running Talos inside a dockerfile requires some modifications to Talos’ machine config:
machine: features: hostDNS: enabled: true forwardKubeDNSToHost: true
This either has to be done manually or in a patchfile.
Other requirements
Section titled “Other requirements”After Clustertool bootstrap, be sure to delete/comment-out:
- MetalLB
- Longhorn
Further testing needed
Section titled “Further testing needed”ClusterTool compatibility
Section titled “ClusterTool compatibility”The tool has previously been tested with “normal” usage of talosctl apply
on machineconfigs created and manually altered using clustertool genconfig
.
It’s not been validated for clustertool bootstrapping as yet.
Intel GPU support
Section titled “Intel GPU support”We assume that doing the volume-forwards to the container like normal for adding intel GPUs to containers works fine, but we’ve not tested this yet.
OpenEBS ZFS-PV
Section titled “OpenEBS ZFS-PV”We assume that the included /dev/zfs forward is going to be enough to even setup OpenEBS ZFS-PV with access to the pool, but we’ve not officially tested this.