Before deploying AAP or spinning up K3s, you need a solid foundation. This phase walks through the exact hardware, network layout, and control node setup required to reproduce this lab from scratch.

Architecture Overview

┌─────────────────────────────────────────────────┐
│                 Your Lab Network                │
│                   192.168.5.0/24                │
│                                                 │
│  ┌──────────────┐     ┌───────────────────────┐ │
│  │  AAP Host    │     │    K3s Cluster        │ │
│  │  RHEL 10     │     │    Ubuntu 24.04       │ │
│  │  .49         │     │                       │ │
│  │              │     │  Master:   .40        │ │
│  │  Runs AAP   ─┼────▶│  Worker 1: .41       │ │
│  │  + Ansible   │     │  Worker 2: .42       │ │
│  └──────────────┘     │  Worker 3: .43       │ │
│                       └───────────────────────┘ │
└─────────────────────────────────────────────────┘

You need 5 machines total: 1 RHEL 10 host for AAP and 4 Ubuntu nodes for the K3s cluster.


1. Hardware Requirements

AAP Host (RHEL 10)

ComponentMinimumRecommendedNotes
vCPU24Containerized AAP is CPU-intensive
RAM4 GB8 GBAAP requires 16GB officially; we bypass this (see Phase 1)
Storage20 GB40 GBDocker images and database
NetworkStatic IP192.168.5.49 in this lab

K3s Nodes (Ubuntu 24.04) x4

ComponentMinimumRecommendedNotes
vCPU12K3s is lightweight
RAM1 GB2 GBPer node
Storage10 GB20 GBRoot partition
NetworkStatic IPSee IP plan below

Hypervisor: VMware Workstation (or any hypervisor — VirtualBox, Proxmox, etc.)


2. Network IP Plan

Assign static IPs before installing anything. Consistency here is critical — every script and inventory file references these addresses.

HostnameRoleOSIP Address
ansible-hostAAP Control NodeRHEL 10192.168.5.49
k3s-master-01K3s ServerUbuntu 24.04192.168.5.40
k3s-worker-01K3s AgentUbuntu 24.04192.168.5.41
k3s-worker-02K3s AgentUbuntu 24.04192.168.5.42
k3s-worker-03K3s AgentUbuntu 24.04192.168.5.43

Setting Static IPs on Ubuntu (Netplan)

On each Ubuntu node, edit the netplan config:

sudo nano /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    ens33:
      addresses:
        - 192.168.5.40/24   # Change per node
      routes:
        - to: default
          via: 192.168.5.1   # Your gateway
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
  version: 2
sudo netplan apply

Setting Static IP on RHEL 10

sudo nmcli con mod ens192 ipv4.addresses 192.168.5.49/24
sudo nmcli con mod ens192 ipv4.gateway 192.168.5.1
sudo nmcli con mod ens192 ipv4.dns "8.8.8.8"
sudo nmcli con mod ens192 ipv4.method manual
sudo nmcli con up ens192

3. Hostname Configuration

Set hostnames on each machine to match the IP plan. The AAP installer requires a proper FQDN.

On each Ubuntu node:

# k3s-master-01
sudo hostnamectl set-hostname k3s-master-01
 
# k3s-worker-01
sudo hostnamectl set-hostname k3s-worker-01
 
# (repeat for worker-02, worker-03)

On the AAP host (RHEL):

sudo hostnamectl set-hostname ansible-host
echo "192.168.5.49 ansible-host.local" | sudo tee -a /etc/hosts

4. SSH Key Setup

Ansible connects to remote hosts via SSH. Set up key-based auth so you never need to type passwords during playbook runs.

Generate a Key Pair (on the AAP host)

ssh-keygen -t ed25519 -C "ansible-lab" -f ~/.ssh/id_ansible

Copy the Key to All Nodes

for ip in 192.168.5.40 192.168.5.41 192.168.5.42 192.168.5.43; do
  ssh-copy-id -i ~/.ssh/id_ansible.pub jmartinez@$ip
done

Verify Connectivity

for ip in 192.168.5.40 192.168.5.41 192.168.5.42 192.168.5.43; do
  ssh -i ~/.ssh/id_ansible jmartinez@$ip "hostname && echo 'OK'"
done

5. Validate the Setup

Before moving to Phase 1, confirm SSH connectivity works to all nodes.

Ping All Nodes via SSH

for ip in 192.168.5.40 192.168.5.41 192.168.5.42 192.168.5.43; do
  ssh -i ~/.ssh/id_ansible jmartinez@$ip "hostname && echo 'OK'" || echo "FAILED: $ip"
done

Expected output:

k3s-master-01
OK
k3s-worker-01
OK
k3s-worker-02
OK
k3s-worker-03
OK

Check Sudo Access

ssh -i ~/.ssh/id_ansible jmartinez@192.168.5.40 "sudo whoami"

Should return root.


What’s Next

With the foundation in place, you now have:

  • 5 VMs with static IPs and proper hostnames
  • SSH key-based access from the control node to all hosts

Two paths from here:

  • With AAP: Continue to Phase 1 to deploy AAP 2.6, then Phase 2 to orchestrate K3s from the web UI.
  • Without AAP: Skip to Phase 2 and use the Vanilla Ansible commands to deploy the cluster from the CLI.