Getting Started
This guide lets you quickly evaluate Tinkerbell. We’ll walk you through setting up the Tinkerbell stack and provisioning a sample machine. See the install guide for details on setting up Tinkerbell in a production environment.
There are couple of ways to get started with Tinkerbell, pick the one that suits you best.
Follow these steps to create the stack on a Libvirt VM using Vagrant. Then deploy a VM and provision an OS onto it.
- Vagrant is installed
- Libvirt is installed
- Vagrant Libvirt plugin is installed:
vagrant plugin install vagrant-libvirt
- A connection to the public internet (air gapped and proxied environments are not supported)
-
Clone this repository
git clone https://github.com/tinkerbell/playground.git cd playground
-
Start the stack
cd stack/vagrant vagrant up # This process will take about 5-10 minutes depending on your internet connection. # Hook is about 400MB in size and the Ubuntu jammy image is about 500MB
expected output
Bringing machine 'stack' up with 'libvirt' provider... ==> stack: Checking if box 'generic/ubuntu2204' version '4.3.4' is up to date... ==> stack: Creating image (snapshot of base box volume). ==> stack: Creating domain with the following settings... ==> stack: -- Name: vagrant_stack ==> stack: -- Description: Source: /home/tink/repos/tinkerbell/sandbox/vagrant/Vagrantfile ==> stack: -- Domain type: kvm ==> stack: -- Cpus: 2 ==> stack: -- Feature: acpi ==> stack: -- Feature: apic ==> stack: -- Feature: pae ==> stack: -- Clock offset: utc ==> stack: -- Memory: 2048M ==> stack: -- Base box: generic/ubuntu2204 ==> stack: -- Storage pool: default ==> stack: -- Image(vda): /var/lib/libvirt/images/vagrant_stack.img, virtio, 128G ==> stack: -- Disk driver opts: cache='default' ==> stack: -- Graphics Type: vnc ==> stack: -- Video Type: cirrus ==> stack: -- Video VRAM: 256 ==> stack: -- Video 3D accel: false ==> stack: -- Keymap: en-us ==> stack: -- TPM Backend: passthrough ==> stack: -- INPUT: type=mouse, bus=ps2 ==> stack: Creating shared folders metadata... ==> stack: Starting domain. ==> stack: Domain launching with graphics connection settings... ==> stack: -- Graphics Port: 5900 ==> stack: -- Graphics IP: 127.0.0.1 ==> stack: -- Graphics Password: Not defined ==> stack: -- Graphics Websocket: 5700 ==> stack: Waiting for domain to get an IP address... ==> stack: Waiting for machine to boot. This may take a few minutes... stack: SSH address: 192.168.121.127:22 stack: SSH username: vagrant stack: SSH auth method: private key stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: Warning: Connection refused. Retrying... stack: stack: Vagrant insecure key detected. Vagrant will automatically replace stack: this with a newly generated keypair for better security. stack: stack: Inserting generated public key within guest... stack: Removing insecure key from the guest if it's present... stack: Key inserted! Disconnecting and reconnecting using new SSH key... ==> stack: Machine booted and ready! ==> stack: Rsyncing folder: /home/tink/repos/tinkerbell/sandbox/vagrant/ => /sandbox/stack ==> stack: Configuring and enabling network interfaces... ==> stack: Running provisioner: shell... stack: Running: /tmp/vagrant-shell20231031-285946-1krhzm0.sh stack: + main 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 1.28.3 v5.6.0 '' stack: + local host_ip=192.168.56.4 stack: + local worker_ip=192.168.56.43 stack: + local worker_mac=08:00:27:9e:f5:3a stack: + local manifests_dir=/sandbox/stack/ stack: + local loadbalancer_ip=192.168.56.5 stack: + local helm_chart_version=0.4.2 stack: + local loadbalancer_interface=eth1 stack: + local kubectl_version=1.28.3 stack: + local k3d_version=v5.6.0 stack: + update_apt stack: + apt-get update stack: + DEBIAN_FRONTEND=noninteractive stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease stack: Get:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease [119 kB] stack: Get:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease [109 kB] stack: Get:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease [110 kB] stack: Get:5 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages [1,148 kB] stack: Get:6 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main Translation-en [245 kB] stack: Get:7 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 c-n-f Metadata [16.1 kB] stack: Get:8 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 Packages [1,103 kB] stack: Get:9 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted Translation-en [179 kB] stack: Get:10 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 c-n-f Metadata [536 B] stack: Get:11 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 Packages [998 kB] stack: Get:12 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe Translation-en [218 kB] stack: Get:13 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 c-n-f Metadata [22.0 kB] stack: Get:14 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 Packages [64.2 kB] stack: Get:15 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 c-n-f Metadata [388 B] stack: Get:16 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 Packages [27.8 kB] stack: Get:17 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 c-n-f Metadata [644 B] stack: Get:18 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 Packages [938 kB] stack: Get:19 https://mirrors.edge.kernel.org/ubuntu jammy-security/main Translation-en [185 kB] stack: Get:20 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 c-n-f Metadata [11.4 kB] stack: Get:21 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 Packages [1,079 kB] stack: Get:22 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted Translation-en [175 kB] stack: Get:23 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 c-n-f Metadata [536 B] stack: Get:24 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 Packages [796 kB] stack: Get:25 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe Translation-en [146 kB] stack: Get:26 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 c-n-f Metadata [16.8 kB] stack: Fetched 7,709 kB in 2s (4,266 kB/s) stack: Reading package lists... stack: + install_docker stack: + curl -fsSL https://download.docker.com/linux/ubuntu/gpg stack: + sudo apt-key add - stack: Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). stack: OK stack: ++ lsb_release -cs stack: + add-apt-repository 'deb https://download.docker.com/linux/ubuntu jammy stable' stack: Get:1 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB] stack: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [22.7 kB] stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy InRelease stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease stack: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease stack: Hit:6 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease stack: Fetched 71.5 kB in 6s (11.8 kB/s) stack: Reading package lists... stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. stack: Repository: 'deb https://download.docker.com/linux/ubuntu jammy stable' stack: Description: stack: Archive for codename: jammy components: stable stack: More info: https://download.docker.com/linux/ubuntu stack: Adding repository. stack: Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list stack: Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list stack: + update_apt stack: + apt-get update stack: + DEBIAN_FRONTEND=noninteractive stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease stack: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease stack: Hit:5 https://download.docker.com/linux/ubuntu jammy InRelease stack: Reading package lists... stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. stack: + apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli stack: + DEBIAN_FRONTEND=noninteractive stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes install --no-install-recommends containerd.io docker-ce docker-ce-cli stack: Reading package lists... stack: Building dependency tree... stack: Reading state information... stack: Suggested packages: stack: aufs-tools cgroupfs-mount | cgroup-lite stack: Recommended packages: stack: docker-ce-rootless-extras libltdl7 pigz docker-buildx-plugin stack: docker-compose-plugin stack: The following NEW packages will be installed: stack: containerd.io docker-ce docker-ce-cli stack: 0 upgraded, 3 newly installed, 0 to remove and 29 not upgraded. stack: Need to get 64.5 MB of archives. stack: After this operation, 249 MB of additional disk space will be used. stack: Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.6.24-1 [28.6 MB] stack: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:24.0.7-1~ubuntu.22.04~jammy [13.3 MB] stack: Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:24.0.7-1~ubuntu.22.04~jammy [22.6 MB] stack: Fetched 64.5 MB in 1s (77.3 MB/s) stack: Selecting previously unselected package containerd.io. (Reading database ... 76025 files and directories currently installed.) stack: Preparing to unpack .../containerd.io_1.6.24-1_amd64.deb ... stack: Unpacking containerd.io (1.6.24-1) ... stack: Selecting previously unselected package docker-ce-cli. stack: Preparing to unpack .../docker-ce-cli_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... stack: Unpacking docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Selecting previously unselected package docker-ce. stack: Preparing to unpack .../docker-ce_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... stack: Unpacking docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Setting up containerd.io (1.6.24-1) ... stack: Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service. stack: Setting up docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Setting up docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. stack: Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket. stack: Processing triggers for man-db (2.10.2-1) ... stack: NEEDRESTART-VER: 3.5 stack: NEEDRESTART-KCUR: 5.15.0-86-generic stack: NEEDRESTART-KEXP: 5.15.0-86-generic stack: NEEDRESTART-KSTA: 1 stack: + gpasswd -a vagrant docker stack: Adding user vagrant to group docker stack: + sudo ethtool -K eth1 tx off sg off tso off stack: Actual changes: stack: tx-scatter-gather: off stack: tx-checksum-ip-generic: off stack: tx-generic-segmentation: off [not requested] stack: tx-tcp-segmentation: off stack: tx-tcp-ecn-segmentation: off stack: tx-tcp6-segmentation: off stack: + install_kubectl 1.28.3 stack: + local kubectl_version=1.28.3 stack: + curl -LO https://dl.k8s.io/v1.28.3/bin/linux/amd64/kubectl stack: % Total % Received % Xferd Average Speed Time Time Time Current stack: Dload Upload Total Spent Left Speed 100 138 100 138 0 0 410 0 --:--:-- --:--:-- --:--:-- 410 100 47.5M 100 47.5M 0 0 24.8M 0 0:00:01 0:00:01 --:--:-- 37.9M stack: + chmod +x ./kubectl stack: + mv ./kubectl /usr/local/bin/kubectl stack: + run_helm 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 v5.6.0 stack: + local host_ip=192.168.56.4 stack: + local worker_ip=192.168.56.43 stack: + local worker_mac=08:00:27:9e:f5:3a stack: + local manifests_dir=/sandbox/stack/ stack: + local loadbalancer_ip=192.168.56.5 stack: + local helm_chart_version=0.4.2 stack: + local loadbalancer_interface=eth1 stack: + local k3d_version=v5.6.0 stack: + local namespace=tink-system stack: + install_k3d v5.6.0 stack: + local k3d_Version=v5.6.0 stack: + wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh stack: + TAG=v5.6.0 stack: + bash stack: Preparing to install k3d into /usr/local/bin stack: k3d installed into /usr/local/bin/k3d stack: Run 'k3d --help' to see what you can do with it. stack: + start_k3d stack: + k3d cluster create --network host --no-lb --k3s-arg --disable=traefik,servicelb --k3s-arg --kube-apiserver-arg=feature-gates=MixedProtocolLBService=true --host-pid-mode stack: INFO[0000] [SimpleConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default stack: WARN[0000] No node filter specified stack: WARN[0000] No node filter specified stack: INFO[0000] [ClusterConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default stack: INFO[0000] Prep: Network stack: INFO[0000] Re-using existing network 'host' (2ecf52da28c15a6bbe026b5e71f3af288fefbbb222b2762bafc29e9b1791ff8b) stack: INFO[0000] Created image volume k3d-k3s-default-images stack: INFO[0000] Starting new tools node... stack: INFO[0001] Creating node 'k3d-k3s-default-server-0' stack: INFO[0001] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.6.0' stack: INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.27.4-k3s1' stack: INFO[0003] Starting Node 'k3d-k3s-default-tools' stack: INFO[0010] Using the k3d-tools node to gather environment information stack: INFO[0011] Starting cluster 'k3s-default' stack: INFO[0011] Starting servers... stack: INFO[0011] Starting Node 'k3d-k3s-default-server-0' stack: INFO[0014] All agents already running. stack: INFO[0014] All helpers already running. stack: INFO[0014] Cluster 'k3s-default' created successfully! stack: INFO[0014] You can now use it like this: stack: kubectl cluster-info stack: + mkdir -p /root/.kube/ stack: + k3d kubeconfig get -a stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: node/k3d-k3s-default-server-0 condition met stack: + install_helm stack: + helm_ver=v3.9.4 stack: + curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 stack: + chmod 700 get_helm.sh stack: + ./get_helm.sh --version v3.9.4 stack: Downloading https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz stack: Verifying checksum... Done. stack: Preparing to install helm into /usr/local/bin stack: helm installed into /usr/local/bin/helm stack: + helm_install_tink_stack tink-system 0.4.2 eth1 192.168.56.5 stack: + local namespace=tink-system stack: + local version=0.4.2 stack: + local interface=eth1 stack: + local loadbalancer_ip=192.168.56.5 stack: + trusted_proxies= stack: + '[' '' '!=' '' ']' stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' stack: ++ tr ' ' , stack: + trusted_proxies= stack: + '[' '' '!=' '' ']' stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' stack: ++ tr ' ' , stack: + trusted_proxies=10.42.0.0/24 stack: + '[' 10.42.0.0/24 '!=' '' ']' stack: + helm install tink-stack oci://ghcr.io/tinkerbell/charts/stack --version 0.4.2 --create-namespace --namespace tink-system --wait --set 'smee.trustedProxies={10.42.0.0/24}' --set 'hegel.trustedProxies={10.42.0.0/24}' --set stack.kubevip.interface=eth1 --set stack.relay.sourceInterface=eth1 --set stack.loadBalancerIP=192.168.56.5 --set smee.publicIP=192.168.56.5 stack: NAME: tink-stack stack: LAST DEPLOYED: Tue Oct 31 21:56:58 2023 stack: NAMESPACE: tink-system stack: STATUS: deployed stack: REVISION: 1 stack: TEST SUITE: None stack: + apply_manifests 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 tink-system stack: + local worker_ip=192.168.56.43 stack: + local worker_mac=08:00:27:9e:f5:3a stack: + local manifests_dir=/sandbox/stack/ stack: + local host_ip=192.168.56.5 stack: + local namespace=tink-system stack: + disk_device=/dev/sda stack: + lsblk stack: + grep -q vda stack: + disk_device=/dev/vda stack: + export DISK_DEVICE=/dev/vda stack: + DISK_DEVICE=/dev/vda stack: + export TINKERBELL_CLIENT_IP=192.168.56.43 stack: + TINKERBELL_CLIENT_IP=192.168.56.43 stack: + export TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a stack: + TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a stack: + export TINKERBELL_HOST_IP=192.168.56.5 stack: + TINKERBELL_HOST_IP=192.168.56.5 stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} stack: + envsubst stack: + echo -e --- stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} stack: + envsubst stack: + echo -e --- stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} stack: + envsubst stack: + echo -e --- stack: + kubectl apply -n tink-system -f /tmp/manifests.yaml stack: hardware.tinkerbell.org/machine1 created stack: template.tinkerbell.org/ubuntu-jammy created stack: workflow.tinkerbell.org/sandbox-workflow created stack: + kubectl apply -n tink-system -f /sandbox/stack//ubuntu-download.yaml stack: configmap/download-image created stack: job.batch/download-ubuntu-jammy created stack: + kubectl_for_vagrant_user stack: + runuser -l vagrant -c 'mkdir -p ~/.kube/' stack: + runuser -l vagrant -c 'k3d kubeconfig get -a > ~/.kube/config' stack: + chmod 600 /home/vagrant/.kube/config stack: + echo 'export KUBECONFIG="/home/vagrant/.kube/config"' stack: all done! stack: + echo 'all done!'
-
Wait for HookOS and Ubuntu image to be downloaded
vagrant ssh stack kubectl get jobs -n tink-system --watch exit # There are 2 Kubernetes jobs that run to download HookOS and the Ubuntu image. # Once both jobs are complete exit the stack VM.
example output
NAME COMPLETIONS DURATION AGE download-hook 1/1 27s 72s download-ubuntu-jammy 0/1 49s 49s download-ubuntu-jammy 0/1 70s 70s download-ubuntu-jammy 0/1 72s 72s download-ubuntu-jammy 1/1 72s 72s
-
Start the machine to be provisioned
vagrant up machine1 # This will start a VM to pxe boot. # The `vagrant up machine1` command will exit quickly and show the following message. This is expected. # Once the command line control is returned to you, you can move on to the next step.
expected output
Bringing machine 'machine1' up with 'libvirt' provider... ==> machine1: Creating domain with the following settings... ==> machine1: -- Name: vagrant_machine1 ==> machine1: -- Description: Source: /home/tink/repos/tinkerbell/sandbox/vagrant/Vagrantfile ==> machine1: -- Domain type: kvm ==> machine1: -- Cpus: 2 ==> machine1: -- Feature: acpi ==> machine1: -- Feature: apic ==> machine1: -- Feature: pae ==> machine1: -- Clock offset: utc ==> machine1: -- Memory: 4096M ==> machine1: -- Storage pool: default ==> machine1: -- Disk driver opts: cache='default' ==> machine1: -- Graphics Type: vnc ==> machine1: -- Video Type: cirrus ==> machine1: -- Video VRAM: 16384 ==> machine1: -- Video 3D accel: false ==> machine1: -- Keymap: en-us ==> machine1: -- TPM Backend: passthrough ==> machine1: -- Boot device: hd ==> machine1: -- Boot device: network ==> machine1: -- Disk(vda): /var/lib/libvirt/images/vagrant_machine1-vda.qcow2, virtio, 20G ==> machine1: -- INPUT: type=mouse, bus=ps2 ==> machine1: Starting domain. ==> machine1: Domain launching with graphics connection settings... ==> machine1: -- Graphics Port: 5901 ==> machine1: -- Graphics IP: 0.0.0.0 ==> machine1: -- Graphics Password: Not defined ==> machine1: -- Graphics Websocket: 5701
-
Watch the provision complete
# log in to the stack VM vagrant ssh stack # watch for the workflow to complete # once the workflow is complete (see the expected output below for completion), move on to the next step kubectl get -n tink-system workflow sandbox-workflow --watch
expected output
NAME TEMPLATE STATE sandbox-workflow ubuntu-jammy STATE_PENDING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_SUCCESS
-
Login to the machine
The machine has been provisioned with Ubuntu. You can now SSH into the machine.
ssh tink@192.168.56.43 # user/pass => tink/tink
Follow these steps to create the stack on a Virtualbox VM using Vagrant. Then deploy a VM and provision an OS onto it.
- Vagrant is installed
- VirtualBox is installed
- A connection to the public internet (air gapped and proxied environments are not supported)
-
Clone this repository
git clone https://github.com/tinkerbell/sandbox.git cd sandbox
-
Start the stack
cd stack/vagrant vagrant up # This process will take up to 10 minutes depending on your internet connection. # It will download HookOS, which is a couple hundred megabytes in size, and an Ubuntu cloud image, which is about 600MB.
example output
Bringing machine 'stack' up with 'virtualbox' provider... ==> stack: Importing base box 'generic/ubuntu2204'... ==> stack: Matching MAC address for NAT networking... ==> stack: Checking if box 'generic/ubuntu2204' version '4.1.14' is up to date... ==> stack: Setting the name of the VM: vagrant_stack_1698780219785_94529 ==> stack: Clearing any previously set network interfaces... ==> stack: Preparing network interfaces based on configuration... stack: Adapter 1: nat stack: Adapter 2: hostonly ==> stack: Forwarding ports... stack: 22 (guest) => 2222 (host) (adapter 1) ==> stack: Running 'pre-boot' VM customizations... ==> stack: Booting VM... ==> stack: Waiting for machine to boot. This may take a few minutes... stack: SSH address: 127.0.0.1:2222 stack: SSH username: vagrant stack: SSH auth method: private key stack: Warning: Connection reset. Retrying... stack: stack: Vagrant insecure key detected. Vagrant will automatically replace stack: this with a newly generated keypair for better security. stack: stack: Inserting generated public key within guest... stack: Removing insecure key from the guest if it's present... stack: Key inserted! Disconnecting and reconnecting using new SSH key... ==> stack: Machine booted and ready! ==> stack: Checking for guest additions in VM... stack: The guest additions on this VM do not match the installed version of stack: VirtualBox! In most cases this is fine, but in rare cases it can stack: prevent things such as shared folders from working properly. If you see stack: shared folder errors, please make sure the guest additions within the stack: virtual machine match the version of VirtualBox you have installed on stack: your host and reload your VM. stack: stack: Guest Additions Version: 6.1.38 stack: VirtualBox Version: 7.0 ==> stack: Configuring and enabling network interfaces... ==> stack: Mounting shared folders... stack: /sandbox/stack => ~/tinkerbell/sandbox/vagrant ==> stack: Running provisioner: shell... stack: Running: /var/folders/xt/8w5g0fv54tj4njvjhk_0_25r0000gr/T/vagrant-shell20231031-54683-k09nai.sh stack: + main 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 1.28.3 v5.6.0 '' stack: + local host_ip=192.168.56.4 stack: + local worker_ip=192.168.56.43 stack: + local worker_mac=08:00:27:9e:f5:3a stack: + local manifests_dir=/sandbox/stack/ stack: + local loadbalancer_ip=192.168.56.5 stack: + local helm_chart_version=0.4.2 stack: + local loadbalancer_interface=eth1 stack: + local kubectl_version=1.28.3 stack: + local k3d_version=v5.6.0 stack: + update_apt stack: + apt-get update stack: + DEBIAN_FRONTEND=noninteractive stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease stack: Get:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease [119 kB] stack: Get:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease [109 kB] stack: Get:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease [110 kB] stack: Get:5 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages [1,148 kB] stack: Get:6 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main Translation-en [245 kB] stack: Get:7 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 c-n-f Metadata [16.1 kB] stack: Get:8 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 Packages [1,103 kB] stack: Get:9 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted Translation-en [179 kB] stack: Get:10 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 c-n-f Metadata [536 B] stack: Get:11 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 Packages [998 kB] stack: Get:12 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe Translation-en [218 kB] stack: Get:13 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 c-n-f Metadata [22.0 kB] stack: Get:14 https://mirrors.edge.kernel.org/ubuntu jammy-updates/multiverse amd64 Packages [41.6 kB] stack: Get:15 https://mirrors.edge.kernel.org/ubuntu jammy-updates/multiverse Translation-en [9,768 B] stack: Get:16 https://mirrors.edge.kernel.org/ubuntu jammy-updates/multiverse amd64 c-n-f Metadata [472 B] stack: Get:17 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 Packages [64.2 kB] stack: Get:18 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main Translation-en [10.5 kB] stack: Get:19 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 c-n-f Metadata [388 B] stack: Get:20 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 Packages [27.8 kB] stack: Get:21 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe Translation-en [16.4 kB] stack: Get:22 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 c-n-f Metadata [644 B] stack: Get:23 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 Packages [938 kB] stack: Get:24 https://mirrors.edge.kernel.org/ubuntu jammy-security/main Translation-en [185 kB] stack: Get:25 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 c-n-f Metadata [11.4 kB] stack: Get:26 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 Packages [1,079 kB] stack: Get:27 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted Translation-en [175 kB] stack: Get:28 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 c-n-f Metadata [536 B] stack: Get:29 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 Packages [796 kB] stack: Get:30 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe Translation-en [146 kB] stack: Get:31 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 c-n-f Metadata [16.8 kB] stack: Get:32 https://mirrors.edge.kernel.org/ubuntu jammy-security/multiverse amd64 Packages [36.5 kB] stack: Get:33 https://mirrors.edge.kernel.org/ubuntu jammy-security/multiverse Translation-en [7,060 B] stack: Get:34 https://mirrors.edge.kernel.org/ubuntu jammy-security/multiverse amd64 c-n-f Metadata [260 B] stack: Fetched 7,831 kB in 2s (3,321 kB/s) stack: Reading package lists... stack: + install_docker stack: + curl -fsSL https://download.docker.com/linux/ubuntu/gpg stack: + sudo apt-key add - stack: Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). stack: OK stack: ++ lsb_release -cs stack: + add-apt-repository 'deb https://download.docker.com/linux/ubuntu jammy stable' stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease stack: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease stack: Get:5 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB] stack: Get:6 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [22.7 kB] stack: Fetched 71.5 kB in 1s (72.5 kB/s) stack: Reading package lists... stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. stack: Repository: 'deb https://download.docker.com/linux/ubuntu jammy stable' stack: Description: stack: Archive for codename: jammy components: stable stack: More info: https://download.docker.com/linux/ubuntu stack: Adding repository. stack: Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list stack: Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list stack: + update_apt stack: + apt-get update stack: + DEBIAN_FRONTEND=noninteractive stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update stack: Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease stack: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy InRelease stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease stack: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease stack: Reading package lists... stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. stack: + apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli stack: + DEBIAN_FRONTEND=noninteractive stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes install --no-install-recommends containerd.io docker-ce docker-ce-cli stack: Reading package lists... stack: Building dependency tree... stack: Reading state information... stack: Suggested packages: stack: aufs-tools cgroupfs-mount | cgroup-lite stack: Recommended packages: stack: docker-ce-rootless-extras libltdl7 pigz docker-buildx-plugin stack: docker-compose-plugin stack: The following NEW packages will be installed: stack: containerd.io docker-ce docker-ce-cli stack: 0 upgraded, 3 newly installed, 0 to remove and 195 not upgraded. stack: Need to get 64.5 MB of archives. stack: After this operation, 249 MB of additional disk space will be used. stack: Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.6.24-1 [28.6 MB] stack: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:24.0.7-1~ubuntu.22.04~jammy [13.3 MB] stack: Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:24.0.7-1~ubuntu.22.04~jammy [22.6 MB] stack: Fetched 64.5 MB in 1s (53.8 MB/s) stack: Selecting previously unselected package containerd.io. (Reading database ... 75348 files and directories currently installed.) stack: Preparing to unpack .../containerd.io_1.6.24-1_amd64.deb ... stack: Unpacking containerd.io (1.6.24-1) ... stack: Selecting previously unselected package docker-ce-cli. stack: Preparing to unpack .../docker-ce-cli_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... stack: Unpacking docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Selecting previously unselected package docker-ce. stack: Preparing to unpack .../docker-ce_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... stack: Unpacking docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Setting up containerd.io (1.6.24-1) ... stack: Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service. stack: Setting up docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Setting up docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... stack: Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. stack: Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket. stack: Processing triggers for man-db (2.10.2-1) ... stack: NEEDRESTART-VER: 3.5 stack: NEEDRESTART-KCUR: 5.15.0-48-generic stack: NEEDRESTART-KEXP: 5.15.0-48-generic stack: NEEDRESTART-KSTA: 1 stack: + gpasswd -a vagrant docker stack: Adding user vagrant to group docker stack: + sudo ethtool -K eth1 tx off sg off tso off stack: Actual changes: stack: tx-scatter-gather: off stack: tx-checksum-ip-generic: off stack: tx-generic-segmentation: off [not requested] stack: tx-tcp-segmentation: off stack: + install_kubectl 1.28.3 stack: + local kubectl_version=1.28.3 stack: + curl -LO https://dl.k8s.io/v1.28.3/bin/linux/amd64/kubectl stack: % Total % Received % Xferd Average Speed Time Time Time Current stack: Dload Upload Total Spent Left Speed 100 138 100 138 0 0 242 0 --:--:-- --:--:-- --:--:-- 242 100 47.5M 100 47.5M 0 0 21.3M 0 0:00:02 0:00:02 --:--:-- 31.6M stack: + chmod +x ./kubectl stack: + mv ./kubectl /usr/local/bin/kubectl stack: + run_helm 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 v5.6.0 stack: + local host_ip=192.168.56.4 stack: + local worker_ip=192.168.56.43 stack: + local worker_mac=08:00:27:9e:f5:3a stack: + local manifests_dir=/sandbox/stack/ stack: + local loadbalancer_ip=192.168.56.5 stack: + local helm_chart_version=0.4.2 stack: + local loadbalancer_interface=eth1 stack: + local k3d_version=v5.6.0 stack: + local namespace=tink-system stack: + install_k3d v5.6.0 stack: + local k3d_Version=v5.6.0 stack: + wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh stack: + TAG=v5.6.0 stack: + bash stack: Preparing to install k3d into /usr/local/bin stack: k3d installed into /usr/local/bin/k3d stack: Run 'k3d --help' to see what you can do with it. stack: + start_k3d stack: + k3d cluster create --network host --no-lb --k3s-arg --disable=traefik,servicelb --k3s-arg --kube-apiserver-arg=feature-gates=MixedProtocolLBService=true --host-pid-mode stack: INFO[0000] [SimpleConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default stack: WARN[0000] No node filter specified stack: WARN[0000] No node filter specified stack: INFO[0000] [ClusterConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default stack: INFO[0000] Prep: Network stack: INFO[0000] Re-using existing network 'host' (0dfc7dbbdde7db0b7a7a5eba280e71248bb0cf010603bfaa0a0a09928df8d555) stack: INFO[0000] Created image volume k3d-k3s-default-images stack: INFO[0000] Starting new tools node... stack: INFO[0001] Creating node 'k3d-k3s-default-server-0' stack: INFO[0001] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.6.0' stack: INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.27.4-k3s1' stack: INFO[0002] Starting Node 'k3d-k3s-default-tools' stack: INFO[0008] Using the k3d-tools node to gather environment information stack: INFO[0008] Starting cluster 'k3s-default' stack: INFO[0008] Starting servers... stack: INFO[0008] Starting Node 'k3d-k3s-default-server-0' stack: INFO[0013] All agents already running. stack: INFO[0013] All helpers already running. stack: INFO[0013] Cluster 'k3s-default' created successfully! stack: INFO[0013] You can now use it like this: stack: kubectl cluster-info stack: + mkdir -p /root/.kube/ stack: + k3d kubeconfig get -a stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: error: no matching resources found stack: + sleep 1 stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s stack: node/k3d-k3s-default-server-0 condition met stack: + install_helm stack: + helm_ver=v3.9.4 stack: + curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 stack: + chmod 700 get_helm.sh stack: + ./get_helm.sh --version v3.9.4 stack: Downloading https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz stack: Verifying checksum... Done. stack: Preparing to install helm into /usr/local/bin stack: helm installed into /usr/local/bin/helm stack: + helm_install_tink_stack tink-system 0.4.2 eth1 192.168.56.5 stack: + local namespace=tink-system stack: + local version=0.4.2 stack: + local interface=eth1 stack: + local loadbalancer_ip=192.168.56.5 stack: + trusted_proxies= stack: + '[' '' '!=' '' ']' stack: ++ tr ' ' , stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' stack: + trusted_proxies= stack: + '[' '' '!=' '' ']' stack: + trusted_proxies= stack: + '[' '' '!=' '' ']' stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' stack: ++ tr ' ' , stack: + trusted_proxies=10.42.0.0/24 stack: + '[' 10.42.0.0/24 '!=' '' ']' stack: + helm install tink-stack oci://ghcr.io/tinkerbell/charts/stack --version 0.4.2 --create-namespace --namespace tink-system --wait --set 'smee.trustedProxies={10.42.0.0/24}' --set 'hegel.trustedProxies={10.42.0.0/24}' --set stack.kubevip.interface=eth1 --set stack.relay.sourceInterface=eth1 --set stack.loadBalancerIP=192.168.56.5 --set smee.publicIP=192.168.56.5 stack: NAME: tink-stack stack: LAST DEPLOYED: Tue Oct 31 19:25:06 2023 stack: NAMESPACE: tink-system stack: STATUS: deployed stack: REVISION: 1 stack: TEST SUITE: None stack: + apply_manifests 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 tink-system stack: + local worker_ip=192.168.56.43 stack: + local worker_mac=08:00:27:9e:f5:3a stack: + local manifests_dir=/sandbox/stack/ stack: + local host_ip=192.168.56.5 stack: + local namespace=tink-system stack: + disk_device=/dev/sda stack: + lsblk stack: + grep -q vda stack: + export DISK_DEVICE=/dev/sda stack: + DISK_DEVICE=/dev/sda stack: + export TINKERBELL_CLIENT_IP=192.168.56.43 stack: + TINKERBELL_CLIENT_IP=192.168.56.43 stack: + export TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a stack: + TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a stack: + export TINKERBELL_HOST_IP=192.168.56.5 stack: + TINKERBELL_HOST_IP=192.168.56.5 stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} stack: + envsubst stack: + echo -e --- stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} stack: + envsubst stack: + echo -e --- stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} stack: + envsubst stack: + echo -e --- stack: + kubectl apply -n tink-system -f /tmp/manifests.yaml stack: hardware.tinkerbell.org/machine1 created stack: template.tinkerbell.org/ubuntu-jammy created stack: workflow.tinkerbell.org/sandbox-workflow created stack: + kubectl apply -n tink-system -f /sandbox/stack//ubuntu-download.yaml stack: configmap/download-image created stack: job.batch/download-ubuntu-jammy created stack: + kubectl_for_vagrant_user stack: + runuser -l vagrant -c 'mkdir -p ~/.kube/' stack: + runuser -l vagrant -c 'k3d kubeconfig get -a > ~/.kube/config' stack: + chmod 600 /home/vagrant/.kube/config stack: + echo 'export KUBECONFIG="/home/vagrant/.kube/config"' stack: all done! stack: + echo 'all done!'
-
Wait for HookOS and Ubuntu image to be downloaded
vagrant ssh stack kubectl get jobs -n tink-system --watch exit # There are 2 Kubernetes jobs that run to download HookOS and the Ubuntu image. # Once both jobs are complete exit the stack VM.
example output
NAME COMPLETIONS DURATION AGE download-hook 1/1 27s 72s download-ubuntu-jammy 0/1 49s 49s download-ubuntu-jammy 0/1 70s 70s download-ubuntu-jammy 0/1 72s 72s download-ubuntu-jammy 1/1 72s 72s
-
Start the machine to be provisioned
vagrant up machine1 # This will start a VM to pxe boot. A GUI window of this machines console will be opened. # The `vagrant up machine1` command will exit quickly and show the following error message. This is expected. # Once the command line control is returned to you, you can move on to the next step.
example output
Bringing machine 'machine1' up with 'virtualbox' provider... ==> machine1: Importing base box 'jtyr/pxe'... ==> machine1: Matching MAC address for NAT networking... ==> machine1: Checking if box 'jtyr/pxe' version '2' is up to date... ==> machine1: Setting the name of the VM: vagrant_machine1_1626365105119_9800 ==> machine1: Fixed port collision for 22 => 2222. Now on port 2200. ==> machine1: Clearing any previously set network interfaces... ==> machine1: Preparing network interfaces based on configuration... machine1: Adapter 1: hostonly ==> machine1: Forwarding ports... machine1: 22 (guest) => 2200 (host) (adapter 1) machine1: VirtualBox adapter #1 not configured as "NAT". Skipping port machine1: forwards on this adapter. ==> machine1: Running 'pre-boot' VM customizations... ==> machine1: Booting VM... ==> machine1: Waiting for machine to boot. This may take a few minutes... machine1: SSH address: 127.0.0.1:22 machine1: SSH username: vagrant machine1: SSH auth method: private key machine1: Warning: Authentication failure. Retrying... Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. If you look above, you should be able to see the error(s) that Vagrant had when attempting to connect to the machine. These errors are usually good hints as to what may be wrong. If you're using a custom box, make sure that networking is properly working and you're able to connect to the machine. It is a common problem that networking isn't setup properly in these boxes. Verify that authentication configurations are also setup properly, as well. If the box appears to be booting properly, you may want to increase the timeout ("config.vm.boot_timeout") value.
-
Watch the provision complete
# log in to the stack VM vagrant ssh stack # watch for the workflow to complete # once the workflow is complete (see the example output below for completion), move on to the next step kubectl get -n tink-system workflow sandbox-workflow --watch
example output
NAME TEMPLATE STATE sandbox-workflow ubuntu-jammy STATE_PENDING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_RUNNING sandbox-workflow ubuntu-jammy STATE_SUCCESS
-
Login to the machine
The machine has been provisioned with Ubuntu. You can now SSH into the machine.
ssh tink@192.168.56.43 # user/pass => tink/tink
Need a little help getting started? We’re here!
- Check out the FAQs - When there are questions, we document the answers.
- Join the CNCF Community Slack. Look for the #tinkerbell channel.
- Submit an issue on Github.