### Example output of get members Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/vagrant-libvirt Shows the expected output of the get members command, listing all nodes with their roles and addresses. ```text NODE NAMESPACE TYPE ID VERSION HOSTNAME MACHINE TYPE OS ADDRESSES 192.168.121.203 cluster Member talos-192-168-121-119 1 talos-192-168-121-119 controlplane Talos (v1.1.0) ["192.168.121.119"] 192.168.121.203 cluster Member talos-192-168-121-69 1 talos-192-168-121-69 worker Talos (v1.1.0) ["192.168.121.69"] 192.168.121.203 cluster Member talos-192-168-121-203 6 talos-192-168-121-203 controlplane Talos (v1.1.0) ["192.168.121.100","192.168.121.203"] 192.168.121.203 cluster Member talos-192-168-121-125 1 talos-192-168-121-125 controlplane Talos (v1.1.0) ["192.168.121.125"] ``` -------------------------------- ### Example GRUB boot line with static IP for Talos Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/proxmox Example boot parameters for a control plane node with IP 192.168.0.100 and gateway 192.168.0.1. Append this to the boot line at the GRUB menu and boot with Ctrl-x or F10. ```text linux /boot/vmlinuz init_on_alloc=1 slab_nomerge pti=on panic=0 consoleblank=0 printk.devkmsg=on earlyprintk=ttyS0 console=tty0 console=ttyS0 talos.platform=metal ip=192.168.0.100::192.168.0.1:255.255.255.0::eth0:off ``` -------------------------------- ### Example output of kubectl get node Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/vagrant-libvirt Shows the expected output when listing nodes, displaying the cluster's nodes and their statuses. ```text NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME talos-192-168-121-203 Ready control-plane,master 3m10s v1.24.2 192.168.121.203 Talos (v1.1.0) 5.15.48-talos containerd://1.6.6 talos-192-168-121-69 Ready 2m25s v1.24.2 192.168.121.69 Talos (v1.1.0) 5.15.48-talos containerd://1.6.6 talos-192-168-121-119 Ready control-plane,master 8m46s v1.24.2 192.168.121.119 Talos (v1.1.0) 5.15.48-talos containerd://1.6.6 talos-192-168-121-125 Ready control-plane,master 3m11s v1.24.2 192.168.121.125 Talos (v1.1.0) 5.15.48-talos containerd://1.6.6 ``` -------------------------------- ### Example talosctl get disks output Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Sample output showing disk details including the vda disk used for installation. ```text NODE NAMESPACE TYPE ID VERSION SIZE READ ONLY TRANSPORT ROTATIONAL WWID MODEL SERIAL runtime Disk loop0 2 73 MB true runtime Disk sr0 2 301 MB false ata QEMU DVD-ROM QEMU_DVD-ROM_QM00001 runtime Disk vda 2 43 GB false virtio true ``` -------------------------------- ### Create working directory for KVM setup Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Run these commands from your working directory before starting the KVM cluster setup. Creates the project directory and changes into it. ```bash mkdir -p ~/talos-kvm/configs cd ~/talos-kvm ``` -------------------------------- ### Example output for qemu-launch processes Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Example output showing VMs running with PIDs 157615 and 157617, followed by the kill commands. ```bash ps -elf | grep '[t]alosctl qemu-launch' 0 S root 157615 2835 0 80 0 - 184934 - 07:53 ? 00:00:00 talosctl qemu-launch 0 S root 157617 2835 0 80 0 - 185062 - 07:53 ? 00:00:00 talosctl qemu-launch sudo kill -s SIGTERM 157615 sudo kill -s SIGTERM 157617 ``` -------------------------------- ### Example output for qemu-system processes Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Example output showing VMs running with PIDs 158065 and 158216, followed by the kill commands. ```bash ps -elf | grep qemu-system 2 S root 1061663 1061168 26 80 0 - 1786238 - 14:05 ? 01:53:56 qemu-system-x86_64 -m 2048 -drive format=raw,if=virtio,file=/home/username/.talos/clusters/talos-default/bootstrap-master.disk -smp cpus=2 -cpu max -nographic -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=net0,mac=1e:86:c6:b4:7c:c4 -device virtio-rng-pci -no-reboot -boot order=cn,reboot-timeout=5000 -smbios type=1,uuid=7ec0a73c-826e-4eeb-afd1-39ff9f9160ca -machine q35,accel=kvm 2 S root 1061663 1061170 67 80 0 - 621014 - 21:23 ? 00:00:07 qemu-system-x86_64 -m 2048 -drive format=raw,if=virtio,file=/homeusername/.talos/clusters/talos-default/pxe-1.disk -smp cpus=2 -cpu max -nographic -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=net0,mac=36:f3:2f:c3:9f:06 -device virtio-rng-pci -no-reboot -boot order=cn,reboot-timeout=5000 -smbios type=1,uuid=ce12a0d0-29c8-490f-b935-f6073ab916a6 -machine q35,accel=kvm sudo kill -s SIGTERM 1061663 sudo kill -s SIGTERM 1061663 ``` -------------------------------- ### Example output for loadbalancer-launch process Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Example output showing loadbalancer running with PID 157609, followed by the kill command. ```bash ps -elf | grep '[t]alosctl loadbalancer-launch' 4 S root 157609 2835 0 80 0 - 184998 - 07:53 ? 00:00:07 talosctl loadbalancer-launch --loadbalancer-addr 10.5.0.1 --loadbalancer-upstreams 10.5.0.2 sudo kill -s SIGTERM 157609 ``` -------------------------------- ### Example output for dhcpd-launch process Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Example output showing loadbalancer running with PID 157609, followed by the kill command. ```bash ps -elf | grep '[t]alosctl dhcpd-launch' 4 S root 157609 2835 0 80 0 - 184998 - 07:53 ? 00:00:07 talosctl dhcpd-launch --state-path /home/username/.talos/clusters/talos-default --addr 10.5.0.1 --interface talosbd9c32bc sudo kill -s SIGTERM 157609 ``` -------------------------------- ### Start virtual machine with kubectl virt start Source: https://docs.siderolabs.com/talos/v1.14/advanced-guides/install-kubevirt Starts the previously created VirtualMachine named fedora-vm. KubeVirt then creates a VirtualMachineInstance. ```bash kubectl virt start fedora-vm ``` -------------------------------- ### Start QEMU VM with nocloud ISO Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/nocloud Starts the VM with the cloud-init ISO attached as a CD-ROM. ```bash qemu-system-x86_64 \ ... -cdrom iso/cidata.iso \ ... ``` -------------------------------- ### Start and autostart the KVM network Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Starts the my-talos-net network and configures it to auto-start after reboot. ```bash virsh net-start my-talos-net virsh net-autostart my-talos-net ``` -------------------------------- ### installer section example Source: https://docs.siderolabs.com/talos/v1.14/reference/configuration/runtime/unattendedinstallconfig Example of the installer section. The image field is optional; if not set, Talos runs the installer based on the current Talos version and current schematic (requires booting an Image Factory asset). ```yaml installer: image: factory.talos.dev/metal-installer/376567988ad370138ad8b2698212367b8edcb69b5fd68c80be1f2ec7d603b4ba:latest # Allows for supplying the image used to perform the installation. ``` -------------------------------- ### Example network interface output Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Example output showing the network interface with name `talos` when only one cluster exists. ```bash 46: talos: mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether a6:72:f4:0a:d3:9c brd ff:ff:ff:ff:ff:ff inet 10.5.0.1/24 brd 10.5.0.255 scope global talos17c13299 valid_lft forever preferred_lft forever inet6 fe80::a472:f4ff:fe0a:d39c/64 scope link valid_lft forever preferred_lft forever ``` -------------------------------- ### List installation disks with talosctl get disks Source: https://docs.siderolabs.com/talos/v1.14/getting-started/getting-started Displays all available disks on the control plane node using the --insecure flag and the CONTROL_PLANE_IP variable. Note the disk ID (e.g., sda, vda) for the next step. ```bash talosctl get disks --insecure --nodes $CONTROL_PLANE_IP ``` -------------------------------- ### Check node readiness Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/upcloud Lists Kubernetes nodes to check if they are ready. ```bash kubectl get nodes ``` -------------------------------- ### Install fish completions for every new session Source: https://docs.siderolabs.com/talos/v1.14/reference/cli Run once to install fish completions for every new session. A new shell is required for the setup to take effect. ```fish talosctl completion fish > ~/.config/fish/completions/talosctl.fish ``` -------------------------------- ### View node overview, logs, and metrics dashboard Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/akamai Opens a real-time dashboard showing node overview, logs, and metrics. ```bash talosctl --talosconfig talosconfig dashboard ``` -------------------------------- ### Install VirtualBox on Ubuntu (apt install virtualbox) Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/virtualbox Installs VirtualBox using the system package manager on Ubuntu for x86. ```bash apt install virtualbox ``` -------------------------------- ### Basic VirtualMachine YAML with default CNI Source: https://docs.siderolabs.com/talos/v1.14/advanced-guides/install-kubevirt Defines a Fedora 40 virtual machine using the default CNI (pod network). Includes cloud-init userData that installs and starts httpd, and a DataVolumeTemplate that imports a Fedora cloud image via CDI. The VM is created with running: false, so it must be started manually. ```yaml --- apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: fedora-vm spec: running: false template: metadata: labels: kubevirt.io/vm: fedora-vm annotations: kubevirt.io/allow-pod-bridge-network-live-migration: "true" spec: evictionStrategy: LiveMigrate domain: cpu: cores: 2 resources: requests: memory: 4G devices: disks: - name: fedora-vm-pvc disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - name: podnet masquerade: {} networks: - name: podnet pod: {} volumes: - name: fedora-vm-pvc persistentVolumeClaim: claimName: fedora-vm-pvc - name: cloudinitdisk cloudInitNoCloud: networkData: | network: version: 1 config: - type: physical name: eth0 subnets: - type: dhcp userData: |- #cloud-config users: - name: cloud-user ssh_authorized_keys: - ssh-rsa .... sudo: ['ALL=(ALL) NOPASSWD:ALL'] groups: sudo shell: /bin/bash runcmd: - "sudo touch /root/installed" - "sudo dnf update" - "sudo dnf install httpd fastfetch -y" - "sudo systemctl daemon-reload" - "sudo systemctl enable httpd" - "sudo systemctl start --no-block httpd" dataVolumeTemplates: - metadata: name: fedora-vm-pvc spec: storage: resources: requests: storage: 35Gi accessModes: - ReadWriteMany storageClassName: "nfs-csi" source: http: url: "https://fedora.mirror.wearetriple.com/linux/releases/40/Cloud/x86_64/images/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2" ``` -------------------------------- ### Install bash completions for every new session on Linux Source: https://docs.siderolabs.com/talos/v1.14/reference/cli Run once to install bash completions system-wide on Linux. A new shell is required for the setup to take effect. ```bash talosctl completion bash > /etc/bash_completion.d/talosctl ``` -------------------------------- ### Output of talosctl get manifests Source: https://docs.siderolabs.com/talos/v1.14/troubleshooting/troubleshooting Example output showing the list of bootstrap manifests with their namespace, type, ID, and version. The ID for extra manifests includes the full URL, such as 05-https://docs.projectcalico.org/manifests/calico.yaml. ```text NODE NAMESPACE TYPE ID VERSION 172.20.0.2 controlplane Manifest 00-kubelet-bootstrapping-token 1 172.20.0.2 controlplane Manifest 01-csr-approver-role-binding 1 172.20.0.2 controlplane Manifest 01-csr-node-bootstrap 1 172.20.0.2 controlplane Manifest 01-csr-renewal-role-binding 1 172.20.0.2 controlplane Manifest 02-kube-system-sa-role-binding 1 172.20.0.2 controlplane Manifest 03-default-pod-security-policy 1 172.20.0.2 controlplane Manifest 05-https://docs.projectcalico.org/manifests/calico.yaml 1 172.20.0.2 controlplane Manifest 10-kube-proxy 1 172.20.0.2 controlplane Manifest 11-core-dns 1 172.20.0.2 controlplane Manifest 11-core-dns-svc 1 172.20.0.2 controlplane Manifest 11-kube-config-in-cluster 1 ``` -------------------------------- ### List system extensions with talosctl get extensions Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/system-extensions Use `talosctl get extensions` to list all installed system extensions on a node. The output shows the node, namespace, type, ID, version, name, and version of each extension. ```bash talosctl get extensions ``` ```text NODE NAMESPACE TYPE ID VERSION NAME VERSION 172.20.0.2 runtime ExtensionStatus 000.ghcr.io-talos-systems-gvisor-54b831d 1 gvisor 20220117.0-v1.0.0 172.20.0.2 runtime ExtensionStatus 001.ghcr.io-talos-systems-intel-ucode-54b831d 1 intel-ucode microcode-20210608-v1.0.0 ``` -------------------------------- ### List log files for k8s cluster Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Shows the log files saved under --.log. Example output for a cluster named 'k8s'. ```bash ls -la ~/.talos/clusters/k8s | grep log -rw-r--r--. 1 root root 69415 Apr 26 20:58 k8s-master-1.log -rw-r--r--. 1 root root 68345 Apr 26 20:58 k8s-worker-1.log -rw-r--r--. 1 root root 24621 Apr 26 20:59 lb.log ``` -------------------------------- ### Bring up Vagrant environment with libvirt provider Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/vagrant-libvirt Use `vagrant up --provider=libvirt` to start the Vagrant environment with the libvirt provider. ```bash vagrant up --provider=libvirt ``` -------------------------------- ### UnattendedInstallConfig document example Source: https://docs.siderolabs.com/talos/v1.14/reference/configuration/runtime/unattendedinstallconfig Full example of the UnattendedInstallConfig document. The installer.image is optional; if not set, Talos runs the installer based on the current Talos version and current schematic (requires booting an Image Factory asset). The provisioning.wipe field defaults to true. ```yaml apiVersion: v1alpha1 kind: UnattendedInstallConfig # The installer describes the source of the installation. installer: image: factory.talos.dev/metal-installer/376567988ad370138ad8b2698212367b8edcb69b5fd68c80be1f2ec7d603b4ba:latest # Allows for supplying the image used to perform the installation. # The provisioning describes how the installation disk should be provisioned. provisioning: # Matches disks to initialize as physical volumes. diskSelector: match: disk.dev_path == "/dev/sda" # CEL expression matching a disk. wipe: true # Indicates if the installation disk should be wiped at installation time. ``` -------------------------------- ### Install bash completions for every new session on macOS Source: https://docs.siderolabs.com/talos/v1.14/reference/cli Run once to install bash completions on macOS using Homebrew's prefix. A new shell is required for the setup to take effect. ```bash talosctl completion bash > $(brew --prefix)/etc/bash_completion.d/talosctl ``` -------------------------------- ### List VirtualMachineInstances with kubectl get virtualmachineinstance Source: https://docs.siderolabs.com/talos/v1.14/advanced-guides/install-kubevirt Shows the VirtualMachineInstance created by starting the VM. The example output displays a running instance with IP 10.244.4.92 on node kube1. ```bash kubectl get virtualmachineinstance NAME AGE PHASE IP NODENAME READY fedora-vm 13s Running 10.244.4.92 kube1 True ``` -------------------------------- ### Install talosctl on macOS or Linux via Homebrew Source: https://docs.siderolabs.com/talos/v1.14/getting-started/getting-started Install the talosctl CLI on macOS or Linux using Homebrew. Requires the siderolabs tap and trust before installation. ```bash brew tap siderolabs/tap brew trust siderolabs/tap brew install siderolabs/tap/talosctl ``` -------------------------------- ### Tail node logs Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/vagrant-libvirt Follows the log output of the control plane node to monitor installation progress. ```bash sudo tail -f /tmp/control-plane-node-1.log ``` -------------------------------- ### Explore Talos API with talosctl Source: https://docs.siderolabs.com/talos/v1.14/getting-started/quickstart Displays help information for talosctl to explore the Talos API. ```bash talosctl --help ``` -------------------------------- ### Deploy example workload with kubectl apply Source: https://docs.siderolabs.com/talos/v1.14/getting-started/deploy-first-workload Deploys the example workload and exposes it via a NodePort. Requires a running Talos cluster. ```bash kubectl apply -f https://raw.githubusercontent.com/siderolabs/example-workload/refs/heads/main/deploy/example-svc-nodeport.yaml ``` -------------------------------- ### Get Services with kubectl get svc Source: https://docs.siderolabs.com/talos/v1.14/advanced-guides/install-kubevirt Shows the created LoadBalancer Service. The example output displays the external IP 10.99.50.1 and the mapped ports. ```bash $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE fedora-vm LoadBalancer 10.96.14.253 10.99.50.1 22:31149/TCP,80:31445/TCP 2s ``` -------------------------------- ### Create a Talos dev cluster with talosctl cluster create Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/developing-talos Starts a local QEMU-based Talos cluster for development. Uses custom CIDR, registry mirrors for caching, a locally built installer image, and disables boot from disk for faster iteration. Requires the installer image hash from the build step and the local registry running. ```bash sudo --preserve-env=HOME _out/talosctl- cluster create dev \ --cidr=172.20.0.0/24 \ --registry-mirror docker.io=http://172.20.0.1:5000 \ --registry-mirror registry.k8s.io=http://172.20.0.1:5001 \ --registry-mirror gcr.io=http://172.20.0.1:5003 \ --registry-mirror ghcr.io=http://172.20.0.1:5004 \ --registry-mirror 127.0.0.1:5005=http://172.20.0.1:5005 \ --install-image=127.0.0.1:5005/siderolabs/installer: \ --controlplanes 3 \ --workers 2 \ --with-bootloader=false ``` -------------------------------- ### Tail logs during installation Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Use this command to follow logs in real-time while the installation is running. ```bash tail -f ~/.talos/clusters//*.log ``` -------------------------------- ### kubectl get vmi -owide output Source: https://docs.siderolabs.com/talos/v1.14/advanced-guides/install-kubevirt Shows the expected output after starting the VM, listing the virtual machine instance with its IP address and live-migratable status. ```bash kubectl get vmi -owide NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED fedora-vm 6d9h Running 10.99.101.53 kube1 True True ``` -------------------------------- ### Example layout of Talos root filesystem for extension service Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/extension-services Shows the directory structure for an extension service. The configuration file is placed in /usr/local/etc/containers/hello-world.yaml and the container root filesystem is in /usr/local/lib/containers/hello-world. ```text / └── usr └── local ├── etc │ └── containers │ └── hello-world.yaml └── lib └── containers └── hello-world ├── hello └── config.ini ``` -------------------------------- ### Matchbox group for control-plane-3 Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/bare-metal-platforms/matchbox Creates a Matchbox group that assigns the control-plane profile to machines matching the selector. The selector must be customized for your specific setup. ```json { "id": "control-plane-3", "name": "control-plane-3", "profile": "control-plane", "selector": { ... } } ``` -------------------------------- ### Matchbox group for control-plane-2 Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/bare-metal-platforms/matchbox Creates a Matchbox group that assigns the control-plane profile to machines matching the selector. The selector must be customized for your specific setup. ```json { "id": "control-plane-2", "name": "control-plane-2", "profile": "control-plane", "selector": { ... } } ``` -------------------------------- ### Matchbox group for control-plane-1 Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/bare-metal-platforms/matchbox Creates a Matchbox group that assigns the control-plane profile to machines matching the selector. The selector must be customized for your specific setup. ```json { "id": "control-plane-1", "name": "control-plane-1", "profile": "control-plane", "selector": { ... } } ``` -------------------------------- ### Machine configuration patch for host DNS Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/kubernetes Required patch to enable container runtime DNS. Apply this to the machine configuration generated from the Getting Started guide. ```yaml apiVersion: v1alpha1 kind: ResolverConfig hostDNS: enabled: true forwardKubeDNSToHost: true ``` -------------------------------- ### Example disk resource output from talosctl get disks -o yaml Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/storage-and-disk-management/disk-management/common Shows the fields available on the disk resource for use in diskSelector CEL expressions. The system_disk variable is only populated after Talos installation, so expressions referencing it may error before installation finishes. ```yaml dev_path: /dev/nvme0n1 size: 10485760000 pretty_size: 10 GB io_size: 512 sector_size: 512 readonly: false cdrom: false model: QEMU NVMe Ctrl serial: deadbeef wwid: nvme.1b36-6465616462656566-51454d55204e564d65204374726c-00000001 bus_path: /pci0000:00/0000:00:09.0/nvme sub_system: /sys/class/block transport: nvme symlinks: - /dev/disk/by-diskseq/11 - /dev/disk/by-id/ata-QEMU_HARDDISK_QM00001 - /dev/disk/by-path/pci-0000:00:1f.2-ata-1 - /dev/disk/by-path/pci-0000:00:1f.2-ata-1.0 ``` -------------------------------- ### Find talosctl qemu-launch process Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Find the process of `talosctl qemu-launch` to manually clean up VMs. ```bash ps -elf | grep 'talosctl qemu-launch' ``` -------------------------------- ### Bootstrap the Talos cluster Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Bootstraps the Kubernetes cluster for the first time. May take a couple of seconds to complete. ```bash talosctl -n $CP_IP bootstrap ``` -------------------------------- ### Generate cluster configuration with talosctl gen config Source: https://docs.siderolabs.com/talos/v1.14/getting-started/getting-started Generates controlplane.yaml, worker.yaml, and talosconfig for the cluster. Uses the control plane IP as the Kubernetes API endpoint and the specified disk for installation. ```bash talosctl gen config $CLUSTER_NAME https://$CONTROL_PLANE_IP:6443 --install-disk /dev/$DISK_NAME ``` -------------------------------- ### Verify bridge interface with ip link show vmbr0 Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/proxmox Checks that the Proxmox bridge interface (e.g., vmbr0) exists and is UP before starting VMs. Part of troubleshooting network connectivity issues. ```bash ip link show vmbr0 ``` -------------------------------- ### Get unattendedinstallstatuses with talosctl Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/lifecycle-management/unattended-install Use the unattended install status resource to monitor progress. The phase is one of: pending, installing, installed, waiting-for-reboot, or failed. Once a node is installed to disk, Talos reports the install as complete and does not run the unattended installer again on that boot. ```bash $ talosctl --nodes get unattendedinstallstatuses NODE NAMESPACE TYPE ID VERSION PHASE 172.20.0.5 runtime UnattendedInstallStatus unattended-install 1 installed ``` -------------------------------- ### Verify pods and services with kubectl get Source: https://docs.siderolabs.com/talos/v1.14/getting-started/deploy-first-workload Lists the deployed pods and services to confirm they are running. ```bash kubectl get pods,services # Lists the deployed pods and services ``` -------------------------------- ### Get unattendedinstallstatuses YAML output Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/lifecycle-management/unattended-install Request YAML output to see the installer image and any error message from the unattended install status resource. ```bash talosctl --nodes get unattendedinstallstatuses unattended-install -o yaml ``` -------------------------------- ### Build installer using local registry Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/building-images Uses a local registry running on 127.0.0.1:5005 to avoid pushing/pulling over the network. ```bash make installer REGISTRY=127.0.0.1:5005 ``` -------------------------------- ### Inspect disks with talosctl get disks Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/lifecycle-management/unattended-install Inspect the disks reported by the node before choosing a disk selector for unattended install. ```bash talosctl --nodes get disks -o yaml ``` -------------------------------- ### Install virtctl via krew Source: https://docs.siderolabs.com/talos/v1.14/advanced-guides/install-kubevirt Alternative installation method for virtctl using krew, integrating it into kubectl. ```bash kubectl krew install virt ``` -------------------------------- ### Install talosctl via Homebrew (brew install siderolabs/tap/talosctl) Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/virtualbox Downloads talosctl on macOS and Linux using Homebrew. ```bash brew install siderolabs/tap/talosctl ``` -------------------------------- ### Set up cross-build environment Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/developing-talos Sets up cross-build environment using multiarch/qemu-user-static. Note: static qemu binaries from Ubuntu 21.10 seem to be broken. ```bash docker run --rm --privileged multiarch/qemu-user-static --reset -p yes ``` -------------------------------- ### Extension service configuration file hello-world.yaml Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/extension-services Talos discovers the extension service configuration in /usr/local/etc/containers/hello-world.yaml. The container entrypoint is ./hello with arguments --config config.ini, depends on network addresses, and restarts always. ```yaml name: hello-world container: entrypoint: ./hello args: - --config - config.ini depends: - network: - addresses restart: always ``` -------------------------------- ### talosctl cluster create qemu command synopsis Source: https://docs.siderolabs.com/talos/v1.14/reference/cli Shows the command syntax for creating a local QEMU-based Talos cluster. Exactly one of the 'iso', 'iso-secureboot', 'pxe', or 'disk-image' presets must be specified. ```bash talosctl cluster create qemu [flags] ``` -------------------------------- ### Generate INSTALLER_META_BASE64 for PXE boot Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/bare-metal-platforms/metal-network-configuration For ISO/PXE boot, generate the base64-encoded value for the INSTALLER_META_BASE64 environment variable. The command compresses the network configuration and encodes it. The resulting string is passed as talos.environment=INSTALLER_META_BASE64=. ```bash echo -n "0xa=$(cat network.yaml)" | gzip -9 | base64 ``` -------------------------------- ### Verify VM running state with virsh list Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Lists all VMs to confirm they are running after provisioning. ```bash virsh list ``` -------------------------------- ### Example node annotations output Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/system-configuration/discovery Example output from `kubectl describe node` showing the annotations used by the Kubernetes registry, including `cluster.talos.dev/node-id` and `networking.talos.dev/assigned-prefixes`. ```text Annotations: cluster.talos.dev/node-id: Utoh3O0ZneV0kT2IUBrh7TgdouRcUW2yzaaMl4VXnCd networking.talos.dev/assigned-prefixes: 10.244.0.0/32,10.244.0.1/24 networking.talos.dev/self-ips: 172.20.0.2,fd83:b1f7:fcb5:2802:8c13:71ff:feaf:7c94 ... ``` -------------------------------- ### Upload Talos image to Akamai Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/akamai Downloads the Akamai image from Image Factory and uploads it using the linode-cli. Requires the linode-cli to be installed and authenticated. ```bash export REGION=us-ord linode-cli image-upload --region ${REGION} --label talos akamai-amd64.raw.gz ``` -------------------------------- ### Example workload success output Source: https://docs.siderolabs.com/talos/v1.14/getting-started/deploy-first-workload Expected output from the curl command, indicating the example workload was successfully deployed. ```text 🎉 CONGRATULATIONS! 🎉 ======================================== You successfully deployed the example workload! Resources: ---------- 🔗 Talos Linux: https://talos.dev 🔗 Omni: https://omni.siderolabs.com 🔗 Sidero Labs: https://siderolabs.com ======================================== ``` -------------------------------- ### Verify node registration with kubectl get nodes Source: https://docs.siderolabs.com/talos/v1.14/getting-started/getting-started Confirms that control plane and worker nodes are registered in Kubernetes. Expect nodes to be listed with a Ready status. ```bash kubectl get nodes ``` -------------------------------- ### talosctl remote-provision-launch usage Source: https://docs.siderolabs.com/talos/v1.14/reference/cli Run the remote QEMU provisioner gRPC server. Requires the full QEMU toolchain on PATH and access to /dev/kvm, /dev/net/tun, and /dev/vhost-net. ```bash talosctl remote-provision-launch [flags] ``` -------------------------------- ### Inspect logs directory Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Use this command to view all logs for a specific cluster. Replace with the actual cluster name. ```bash sudo cat ~/.talos/clusters//*.log ``` -------------------------------- ### LinkStatus resource example Source: https://docs.siderolabs.com/talos/v1.14/networking/configuration/aliases Example output of `talosctl get linkstatus enp0s2 -o yaml` showing the LinkStatus resource fields used in CEL expressions for link aliases. ```yaml # talosctl get linkstatus enp0s2 -o yaml ... spec: altNames: - enxb6dce1a4a634 index: 8 type: ether linkIndex: 0 flags: UP,BROADCAST,RUNNING,MULTICAST,LOWER_UP hardwareAddr: b6:dc:e1:a4:a6:34 permanentAddr: b6:dc:e1:a4:a6:34 broadcastAddr: ff:ff:ff:ff:ff:ff mtu: 1500 queueDisc: pfifo_fast operationalState: up kind: "" slaveKind: "" busPath: "0000:00:02.0" driver: virtio_net driverVersion: 1.0.0 productID: "0x1000" vendorID: "0x1af4" product: Virtio network device vendor: Red Hat, Inc. linkState: true speedMbit: 4294967295 port: Other duplex: Unknown ``` -------------------------------- ### Retrieve kubeconfig Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/upcloud Retrieves the admin kubeconfig for the cluster. ```bash talosctl --talosconfig talosconfig kubeconfig ``` -------------------------------- ### Generate UEFI key enrollment database with talosctl gen secureboot database Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/bare-metal-platforms/secureboot Generates UEFI automatic key enrollment database files (db.auth, KEK.auth, PK.auth) from the _out/uki-signing-* files. These files can be used to enroll keys into UEFI firmware automatically when booting from a SecureBoot ISO while firmware is in setup mode. ```bash $ talosctl gen secureboot database writing _out/db.auth writing _out/KEK.auth writing _out/PK.auth ``` -------------------------------- ### Example RAID Status Output Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/storage-and-disk-management/raid Example output from `talosctl get mdarraystatuses` showing a rebuilding raid1 array named `data` on node 172.20.0.5. ```bash $ talosctl --nodes get mdarraystatuses NODE NAMESPACE TYPE ID VERSION LEVEL STATUS SYNC DEVICE 172.20.0.5 storage MDArrayStatus data 1 raid1 rebuilding resync /dev/disk/by-id/md-name-talos:data ``` -------------------------------- ### Show QEMU Cluster State with talosctl cluster show Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Use `talosctl cluster show --provisioner qemu` to display a summary of the cluster state, including the provisioner, network details, and node list. The output shows the default network CIDR 10.5.0.0/24, gateway 10.5.0.1, and MTU 1500. ```bash talosctl cluster show --provisioner qemu PROVISIONER qemu NAME talos-default NETWORK NAME talos-default NETWORK CIDR 10.5.0.0/24 NETWORK GATEWAY 10.5.0.1 NETWORK MTU 1500 NODES: NAME TYPE IP CPU RAM DISK talos-default-controlplane-1 ControlPlane 10.5.0.2 1.00 1.6 GB 4.3 GB talos-default-controlplane-2 ControlPlane 10.5.0.3 1.00 1.6 GB 4.3 GB talos-default-controlplane-3 ControlPlane 10.5.0.4 1.00 1.6 GB 4.3 GB talos-default-worker-1 Worker 10.5.0.5 1.00 1.6 GB 4.3 GB ``` -------------------------------- ### talosctl image cache-create examples Source: https://docs.siderolabs.com/talos/v1.14/reference/cli Provides two usage examples: one with explicit image and path flags, and another piping default images from stdin. ```bash talosctl images cache-create --images=ghcr.io/siderolabs/kubelet:v1.37.0 --image-cache-path=/tmp/talos-image-cache Alternatively, stdin can be piped to the command: talosctl images default | talosctl images cache-create --image-cache-path=/tmp/talos-image-cache --images=- ``` -------------------------------- ### Check installed extensions with talosctl get extensions Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/hardware-and-drivers/hailo Use this command to confirm the Hailo system extension is installed on the node. Replace with the actual node IP address. ```bash talosctl get extensions --nodes ``` -------------------------------- ### Find qemu-system process Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Find the process of `qemu-system` to stop VMs manually. ```bash ps -elf | grep 'qemu-system' ``` -------------------------------- ### Environment setup variables for Azure CLI Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/azure Set environment variables for storage account, container, resource group, location, and connection string used throughout the Azure setup. ```bash # Storage account to use export STORAGE_ACCOUNT="StorageAccountName" # Storage container to upload to export STORAGE_CONTAINER="StorageContainerName" # Resource group name export GROUP="ResourceGroupName" # Location export LOCATION="centralus" # Get storage account connection string based on info above export CONNECTION=$(az storage account show-connection-string \ -n $STORAGE_ACCOUNT \ -g $GROUP \ -o tsv) ``` -------------------------------- ### Find talosctl loadbalancer-launch process Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Find the process of `talosctl loadbalancer-launch` to remove the load balancer. ```bash ps -elf | grep 'talosctl loadbalancer-launch' ``` -------------------------------- ### Build the provision upgrade test binary Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/developing-talos Builds the integration test binary for provision upgrade tests. Run this before preparing test artifacts. ```bash rm -f _out/integration-test-provision-linux-amd64; make _out/integration-test-provision-linux-amd64 ``` -------------------------------- ### Check cluster health with talosctl health Source: https://docs.siderolabs.com/talos/v1.14/getting-started/getting-started Checks the health of the nodes in the cluster. ```bash talosctl --nodes $CONTROL_PLANE_IP --talosconfig=./talosconfig health ``` -------------------------------- ### Prepare cloud-init configs for nocloud ISO Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/nocloud Creates the `iso` directory, moves the controlplane.yaml to `user-data`, writes `meta-data`, and creates `network-config` with static IP configuration. ```bash mkdir -p iso mv _out/controlplane.yaml iso/user-data echo "local-hostname: controlplane-1" > iso/meta-data cat > iso/network-config << EOF version: 1 config: - type: physical name: eth0 mac_address: "52:54:00:12:34:00" subnets: - type: static address: 192.168.1.10 netmask: 255.255.255.0 gateway: 192.168.1.254 EOF ``` -------------------------------- ### Get cluster members Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/vagrant-libvirt Lists the cluster members to verify all nodes have joined. ```bash talosctl -n 192.168.121.203 get members ``` -------------------------------- ### List cluster members with talosctl Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Displays all VMs participating in the cluster after bootstrapping. ```bash talosctl -n $CP_IP get members ``` -------------------------------- ### Watch cluster health Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/akamai Monitors the cluster bootstrap process and health status. ```bash talosctl --talosconfig talosconfig health ``` -------------------------------- ### talosctl get routes output showing blackhole route Source: https://docs.siderolabs.com/talos/v1.14/networking/advanced/blackhole Example output from `talosctl get routes` showing the blackhole route for `169.254.1.1/32` with the `blackhole` type. The route is attached to no interface (for IPv4) and has metric 1024. ```bash $ talosctl get routes NODE NAMESPACE TYPE ID VERSION DESTINATION GATEWAY LINK METRIC 172.20.0.5 network RouteStatus inet4//169.254.1.1/32/1024 1 169.254.1.1/32 1024 ``` -------------------------------- ### Upload OpenStack image Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/openstack Uploads the downloaded OpenStack image to OpenStack with the name 'talos'. ```bash openstack image create --public --disk-format raw --file disk.raw talos ``` -------------------------------- ### Create ISO with metal-iso config Source: https://docs.siderolabs.com/talos/v1.14/reference/kernel Commands to create an ISO filesystem with label 'metal-iso' containing config.yaml, used when talos.config=metal-iso is set. ```bash mkdir iso/ cp config.yaml iso/ mkisofs -joliet -rock -volid 'metal-iso' -output config.iso iso/ ``` -------------------------------- ### Check cluster members Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/cloud-platforms/upcloud Lists the members registered in Talos to verify node registration. ```bash talosctl --talosconfig talosconfig get members ``` -------------------------------- ### List VM disks with talosctl get disks Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/kvm Retrieves disk names from the control plane node using insecure mode. The output shows disk IDs like vda, which is used as the install disk. ```bash talosctl get disks --nodes $CP_IP --insecure ``` -------------------------------- ### UnattendedInstallConfig example installing to /dev/sda Source: https://docs.siderolabs.com/talos/v1.14/configure-your-talos-cluster/lifecycle-management/unattended-install Adds an UnattendedInstallConfig document to the machine configuration. The provisioning.diskSelector.match field is a CEL expression evaluated against discovered disks as 'disk'. Use a selector that matches exactly one intended install target; prefer stable disk properties such as disk.serial, disk.wwid, or disk.symlinks over /dev/sd* names when possible. ```yaml apiVersion: v1alpha1 kind: UnattendedInstallConfig installer: image: factory.talos.dev/metal-installer/: provisioning: diskSelector: match: disk.dev_path == "/dev/sda" wipe: true ``` -------------------------------- ### Prepare test artifacts for upgrade test Source: https://docs.siderolabs.com/talos/v1.14/build-and-extend-talos/custom-images-and-development/developing-talos Creates the release artifacts needed for the upgrade integration test. ```bash make release-artifacts ``` -------------------------------- ### Get bridge name from state.yaml Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/local-platforms/qemu Retrieve the bridge name from the state file if the state folder was not deleted. ```bash sudo cat ~/.talos/clusters//state.yaml | grep bridgename bridgename: talos ``` -------------------------------- ### Bootstrap Kubernetes cluster Source: https://docs.siderolabs.com/talos/v1.14/platform-specific-installations/virtualized-platforms/vagrant-libvirt Bootstraps the Kubernetes cluster from the initial control plane node. ```bash talosctl -n 192.168.121.203 bootstrap ```