Incus-compose storage volume not found

I’m playing with an incus cluster, validating what I’m hoping to do with incus in the future. What I’m hoping is to be able to use incus-compose as lightweight configuration as code and define the services, volumes, and networks that’ll be in my cluster through compose.

I have a 3 node cluster with identical hardware, each one with a btrfs storage pool.

I’ve got this compose:

services:
  server:
    image: codeberg.org/forgejo/forgejo:16
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - forgejo-data:/data
    ports:
      - '3000:3000'
      - '222:22'

volumes:
  forgejo-data:
    x-incus-compose:
      pool: default

networks:
  default:
    x-incus-compose:
      network: incusbr0

and what i’m getting running incus-compose from my laptop:

22:09 ERR Ensuring resources project=forgejo error="in an operation: instance(forgejo): Failed creating instance record: Failed initializing instance: Failed add validation for device \"vol-forgejo-data\": Failed loading custom volume: Storage volume not found"
ensure   image              codeberg.org/forgejo/forgejo:16        [done]
ensure   image              ghcr.io/lxc/incus-compose/ic-healthd:~ [done]
ensure   network            default                                [done]
ensure   storage-volume     ic-healthd                             [done]
ensure   storage-volume     forgejo-data                           [done]
ensure   instance           forgejo-ic-healthd                     [done]
ensure   instance           forgejo                                [warn: in an operation: Failed creating instance record: Failed initializing instance: ~

Based on the amount of documentation I’m finding, this seems like an unusual configuration?

Hey!

Thanks for the first standalone incus-compose related Forum support Post! Ohh and welcome in the forums!

services:
  server:
    image: codeberg.org/forgejo/forgejo:16
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - forgejo-data:/data
    ports:
      - "3000:3000"
      - "222:22"

volumes:
  forgejo-data:

networks:
  default:
    external: true
    x-incus-compose:
      network: incusbr0

Note the exterrnal: true for external networks is important else you get weired results.

r3j0@server01 ~/forgejo> incus remote add --protocol oci codeberg.org https://codeberg.org
r3j0@server01 ~/forgejo> incus-compose up
ensure   image              codeberg.org/forgejo/forgejo:16        [done]
ensure   image              ghcr.io/lxc/incus-compose/ic-healthd:~ [done]
ensure   network            default                                [done]
ensure   storage-volume     forgejo-data                           [done]
ensure   storage-volume     ic-healthd                             [done]
ensure   instance           forgejo-ic-healthd                     [done]
ensure   instance           forgejo                                [done]
start    instance           forgejo-ic-healthd                     [done]
start    instance           forgejo                                [done]

I removed the pool: default as it is not needed here. Having it in doesn’t change my result.

Please give the output of incus storage list

r3j0@server01 ~/forgejo> incus storage list
+---------+--------+-------------+---------+---------+
|  NAME   | DRIVER | DESCRIPTION | USED BY |  STATE  |
+---------+--------+-------------+---------+---------+
| default | btrfs  |             | 129     | CREATED |
+---------+--------+-------------+---------+---------+
| ext1    | btrfs  |             | 4       | CREATED |
+---------+--------+-------------+---------+---------+

As a workaround you could try to create the volume on your own in advance.

incus-compose incus storage volume create default vol-forgejo-data shifted=true
@ incus storage list
+---------+--------+-------------+---------+---------+
|  NAME   | DRIVER | DESCRIPTION | USED BY |  STATE  |
+---------+--------+-------------+---------+---------+
| default | btrfs  |             | 12      | CREATED |
+---------+--------+-------------+---------+---------+

the default pool is the root btrfs and spans all three cluster members.

yeah, all the x-incus options are less there for intention and more there for flailing

I have no clue, please try to run the project with --debug and give the full log.

Shouldn’t contain any sensitive information’s.

Let me try some variations

No x-incus
services:
  server:
    image: codeberg.org/forgejo/forgejo:16
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - forgejo-data:/data
    ports:
      - '3000:3000'
      - '222:22'

volumes:
  forgejo-data:


networks:
  default:
@ incus-compose --debug up
13:30 DBG Connected url=https://apollo.lan:8443
13:30 DBG Got project name=default incus_name=default
13:30 DBG Got project name=forgejo incus_name=forgejo
13:30 DBG Ensure project=forgejo incus_project=forgejo resources="[instance(forgejo) image(codeberg.org/forgejo/forgejo:16) network(ic-pmtqrmf4x7) storage-volume(vol-forgejo-data) image(ghcr.io/lxc/incus-compose/ic-healthd:1.0.0) storage-volume(vol-ic-healthd) instance(forgejo-ic-healthd)]"
13:30 DBG Running action=ensure kind=image name=codeberg.org/forgejo/forgejo:16 incus_name=codeberg.org/forgejo/forgejo:16
13:30 DBG Running action=ensure kind=image name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 incus_name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0
13:30 DBG Run action=ensure kind=image name=codeberg.org/forgejo/forgejo:16 incus_name=codeberg.org/forgejo/forgejo:16 created=false
13:30 DBG Run action=ensure kind=image name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 incus_name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 created=false
13:30 DBG Running action=ensure kind=network name=default incus_name=ic-pmtqrmf4x7
13:30 WRN Result with error action=ensure kind=network name=default incus_name=ic-pmtqrmf4x7 created=false error="creating network \"default\": Network not pending on any node (use --target <node> first)"
13:30 ERR Ensuring resources project=forgejo incus_project=forgejo error="unknown: network(ic-pmtqrmf4x7): creating network \"default\": Network not pending on any node (use --target <node> first)"
External network
services:
  server:
    image: codeberg.org/forgejo/forgejo:16
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - forgejo-data:/data
    ports:
      - '3000:3000'
      - '222:22'

volumes:
  forgejo-data:


networks:
  default:
    # This is different from default
    external: true
    x-incus-compose:
      network: incusbr0
@ incus-compose --debug up
13:34 DBG Connected url=https://apollo.lan:8443
13:34 DBG Got project name=default incus_name=default
13:34 DBG Got project name=forgejo incus_name=forgejo
13:34 DBG Ensure project=forgejo incus_project=forgejo resources="[instance(forgejo) image(codeberg.org/forgejo/forgejo:16) network(incusbr0) storage-volume(vol-forgejo-data) image(ghcr.io/lxc/incus-compose/ic-healthd:1.0.0) storage-volume(vol-ic-healthd) instance(forgejo-ic-healthd)]"
13:34 DBG Running action=ensure kind=image name=codeberg.org/forgejo/forgejo:16 incus_name=codeberg.org/forgejo/forgejo:16
13:34 DBG Running action=ensure kind=image name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 incus_name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0
13:34 DBG Run action=ensure kind=image name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 incus_name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 created=false
13:34 DBG Run action=ensure kind=image name=codeberg.org/forgejo/forgejo:16 incus_name=codeberg.org/forgejo/forgejo:16 created=false
13:34 DBG Running action=ensure kind=network name=default incus_name=incusbr0
13:34 DBG Run action=ensure kind=network name=default incus_name=incusbr0 created=false
13:34 DBG Running action=ensure kind=storage-volume name=ic-healthd incus_name=vol-ic-healthd
13:34 DBG Running action=ensure kind=storage-volume name=forgejo-data incus_name=vol-forgejo-data
13:34 DBG Run action=ensure kind=storage-volume name=forgejo-data incus_name=vol-forgejo-data created=false
13:34 DBG Run action=ensure kind=storage-volume name=ic-healthd incus_name=vol-ic-healthd created=false
13:34 DBG Running action=ensure kind=instance name=forgejo-ic-healthd incus_name=forgejo-ic-healthd
13:34 DBG Running action=ensure kind=network name=default incus_name=incusbr0
13:34 DBG Run action=ensure kind=network name=default incus_name=incusbr0 created=false
13:34 DBG Run action=ensure kind=instance name=forgejo-ic-healthd incus_name=forgejo-ic-healthd created=false
13:34 DBG Running action=ensure kind=instance name=forgejo incus_name=forgejo
13:34 WRN Result with error action=ensure kind=instance name=forgejo incus_name=forgejo created=false error="in an operation: Failed creating instance record: Failed initializing instance: Failed add validation for device \"vol-forgejo-data\": Failed loading custom volume: Storage volume not found"
13:34 ERR Ensuring resources project=forgejo incus_project=forgejo error="in an operation: instance(forgejo): Failed creating instance record: Failed initializing instance: Failed add validation for device \"vol-forgejo-data\": Failed loading custom volume: Storage volume not found"
Specified network and volume
services:
  server:
    image: codeberg.org/forgejo/forgejo:16
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - forgejo-data:/data
    ports:
      - '3000:3000'
      - '222:22'

volumes:
  forgejo-data:
    # This is different from default
    x-incus-compose:
      pool: default

networks:
  default:
    # This is different from default
    external: true
    x-incus-compose:
      network: incusbr0
@ incus-compose --debug up
13:35 DBG Connected url=https://apollo.lan:8443
13:35 DBG Got project name=default incus_name=default
13:35 DBG Got project name=forgejo incus_name=forgejo
13:35 DBG Ensure project=forgejo incus_project=forgejo resources="[instance(forgejo) image(codeberg.org/forgejo/forgejo:16) network(incusbr0) storage-volume(vol-forgejo-data) image(ghcr.io/lxc/incus-compose/ic-healthd:1.0.0) storage-volume(vol-ic-healthd) instance(forgejo-ic-healthd)]"
13:35 DBG Running action=ensure kind=image name=codeberg.org/forgejo/forgejo:16 incus_name=codeberg.org/forgejo/forgejo:16
13:35 DBG Running action=ensure kind=image name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 incus_name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0
13:35 DBG Run action=ensure kind=image name=codeberg.org/forgejo/forgejo:16 incus_name=codeberg.org/forgejo/forgejo:16 created=false
13:35 DBG Run action=ensure kind=image name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 incus_name=ghcr.io/lxc/incus-compose/ic-healthd:1.0.0 created=false
13:35 DBG Running action=ensure kind=network name=default incus_name=incusbr0
13:35 DBG Run action=ensure kind=network name=default incus_name=incusbr0 created=false
13:35 DBG Running action=ensure kind=storage-volume name=ic-healthd incus_name=vol-ic-healthd
13:35 DBG Running action=ensure kind=storage-volume name=forgejo-data incus_name=vol-forgejo-data
13:35 DBG Run action=ensure kind=storage-volume name=ic-healthd incus_name=vol-ic-healthd created=false
13:35 DBG Run action=ensure kind=storage-volume name=forgejo-data incus_name=vol-forgejo-data created=false
13:35 DBG Running action=ensure kind=instance name=forgejo-ic-healthd incus_name=forgejo-ic-healthd
13:35 DBG Running action=ensure kind=network name=default incus_name=incusbr0
13:35 DBG Run action=ensure kind=network name=default incus_name=incusbr0 created=false
13:35 DBG Run action=ensure kind=instance name=forgejo-ic-healthd incus_name=forgejo-ic-healthd created=false
13:35 DBG Running action=ensure kind=instance name=forgejo incus_name=forgejo
13:35 WRN Result with error action=ensure kind=instance name=forgejo incus_name=forgejo created=false error="in an operation: Failed creating instance record: Failed initializing instance: Failed add validation for device \"vol-forgejo-data\": Failed loading custom volume: Storage volume not found"
13:35 ERR Ensuring resources project=forgejo incus_project=forgejo error="in an operation: instance(forgejo): Failed creating instance record: Failed initializing instance: Failed add validation for device \"vol-forgejo-data\": Failed loading custom volume: Storage volume not found"

Hmm what server and client version do you have?

incus info ← might contain sensitive data, depends on version.

Btw you’r the first one with a cluster trying incus-compose I know of. even faster than me you are :slight_smile:

Would love to debug this with screensharing and voice if you have the time.
Write me a PM if, we will update this thread with results ofc.

My client is the Fedora main repo (6.23), the servers are debian using the zabbly repo (7.0.1).

config:
  cluster.https_address: 10.84.72.2
  core.https_address: '[::]:8443'
  core.storage_buckets_address: apollo.lan:8555
api_extensions:
- storage_zfs_remove_snapshots
- container_host_shutdown_timeout
- container_stop_priority
- container_syscall_filtering
- auth_pki
- container_last_used_at
- etag
- patch
- usb_devices
- https_allowed_credentials
- image_compression_algorithm
- directory_manipulation
- container_cpu_time
- storage_zfs_use_refquota
- storage_lvm_mount_options
- network
- profile_usedby
- container_push
- container_exec_recording
- certificate_update
- container_exec_signal_handling
- gpu_devices
- container_image_properties
- migration_progress
- id_map
- network_firewall_filtering
- network_routes
- storage
- file_delete
- file_append
- network_dhcp_expiry
- storage_lvm_vg_rename
- storage_lvm_thinpool_rename
- network_vlan
- image_create_aliases
- container_stateless_copy
- container_only_migration
- storage_zfs_clone_copy
- unix_device_rename
- storage_lvm_use_thinpool
- storage_rsync_bwlimit
- network_vxlan_interface
- storage_btrfs_mount_options
- entity_description
- image_force_refresh
- storage_lvm_lv_resizing
- id_map_base
- file_symlinks
- container_push_target
- network_vlan_physical
- storage_images_delete
- container_edit_metadata
- container_snapshot_stateful_migration
- storage_driver_ceph
- storage_ceph_user_name
- resource_limits
- storage_volatile_initial_source
- storage_ceph_force_osd_reuse
- storage_block_filesystem_btrfs
- resources
- kernel_limits
- storage_api_volume_rename
- network_sriov
- console
- restrict_dev_incus
- migration_pre_copy
- infiniband
- dev_incus_events
- proxy
- network_dhcp_gateway
- file_get_symlink
- network_leases
- unix_device_hotplug
- storage_api_local_volume_handling
- operation_description
- clustering
- event_lifecycle
- storage_api_remote_volume_handling
- nvidia_runtime
- container_mount_propagation
- container_backup
- dev_incus_images
- container_local_cross_pool_handling
- proxy_unix
- proxy_udp
- clustering_join
- proxy_tcp_udp_multi_port_handling
- network_state
- proxy_unix_dac_properties
- container_protection_delete
- unix_priv_drop
- pprof_http
- proxy_haproxy_protocol
- network_hwaddr
- proxy_nat
- network_nat_order
- container_full
- backup_compression
- nvidia_runtime_config
- storage_api_volume_snapshots
- storage_unmapped
- projects
- network_vxlan_ttl
- container_incremental_copy
- usb_optional_vendorid
- snapshot_scheduling
- snapshot_schedule_aliases
- container_copy_project
- clustering_server_address
- clustering_image_replication
- container_protection_shift
- snapshot_expiry
- container_backup_override_pool
- snapshot_expiry_creation
- network_leases_location
- resources_cpu_socket
- resources_gpu
- resources_numa
- kernel_features
- id_map_current
- event_location
- storage_api_remote_volume_snapshots
- network_nat_address
- container_nic_routes
- cluster_internal_copy
- seccomp_notify
- lxc_features
- container_nic_ipvlan
- network_vlan_sriov
- storage_cephfs
- container_nic_ipfilter
- resources_v2
- container_exec_user_group_cwd
- container_syscall_intercept
- container_disk_shift
- storage_shifted
- resources_infiniband
- daemon_storage
- instances
- image_types
- resources_disk_sata
- clustering_roles
- images_expiry
- resources_network_firmware
- backup_compression_algorithm
- ceph_data_pool_name
- container_syscall_intercept_mount
- compression_squashfs
- container_raw_mount
- container_nic_routed
- container_syscall_intercept_mount_fuse
- container_disk_ceph
- virtual-machines
- image_profiles
- clustering_architecture
- resources_disk_id
- storage_lvm_stripes
- vm_boot_priority
- unix_hotplug_devices
- api_filtering
- instance_nic_network
- clustering_sizing
- firewall_driver
- projects_limits
- container_syscall_intercept_hugetlbfs
- limits_hugepages
- container_nic_routed_gateway
- projects_restrictions
- custom_volume_snapshot_expiry
- volume_snapshot_scheduling
- trust_ca_certificates
- snapshot_disk_usage
- clustering_edit_roles
- container_nic_routed_host_address
- container_nic_ipvlan_gateway
- resources_usb_pci
- resources_cpu_threads_numa
- resources_cpu_core_die
- api_os
- container_nic_routed_host_table
- container_nic_ipvlan_host_table
- container_nic_ipvlan_mode
- resources_system
- images_push_relay
- network_dns_search
- container_nic_routed_limits
- instance_nic_bridged_vlan
- network_state_bond_bridge
- usedby_consistency
- custom_block_volumes
- clustering_failure_domains
- resources_gpu_mdev
- console_vga_type
- projects_limits_disk
- network_type_macvlan
- network_type_sriov
- container_syscall_intercept_bpf_devices
- network_type_ovn
- projects_networks
- projects_networks_restricted_uplinks
- custom_volume_backup
- backup_override_name
- storage_rsync_compression
- network_type_physical
- network_ovn_external_subnets
- network_ovn_nat
- network_ovn_external_routes_remove
- tpm_device_type
- storage_zfs_clone_copy_rebase
- gpu_mdev
- resources_pci_iommu
- resources_network_usb
- resources_disk_address
- network_physical_ovn_ingress_mode
- network_ovn_dhcp
- network_physical_routes_anycast
- projects_limits_instances
- network_state_vlan
- instance_nic_bridged_port_isolation
- instance_bulk_state_change
- network_gvrp
- instance_pool_move
- gpu_sriov
- pci_device_type
- storage_volume_state
- network_acl
- migration_stateful
- disk_state_quota
- storage_ceph_features
- projects_compression
- projects_images_remote_cache_expiry
- certificate_project
- network_ovn_acl
- projects_images_auto_update
- projects_restricted_cluster_target
- images_default_architecture
- network_ovn_acl_defaults
- gpu_mig
- project_usage
- network_bridge_acl
- warnings
- projects_restricted_backups_and_snapshots
- clustering_join_token
- clustering_description
- server_trusted_proxy
- clustering_update_cert
- storage_api_project
- server_instance_driver_operational
- server_supported_storage_drivers
- event_lifecycle_requestor_address
- resources_gpu_usb
- clustering_evacuation
- network_ovn_nat_address
- network_bgp
- network_forward
- custom_volume_refresh
- network_counters_errors_dropped
- metrics
- image_source_project
- clustering_config
- network_peer
- linux_sysctl
- network_dns
- ovn_nic_acceleration
- certificate_self_renewal
- instance_project_move
- storage_volume_project_move
- cloud_init
- network_dns_nat
- database_leader
- instance_all_projects
- clustering_groups
- ceph_rbd_du
- instance_get_full
- qemu_metrics
- gpu_mig_uuid
- event_project
- clustering_evacuation_live
- instance_allow_inconsistent_copy
- network_state_ovn
- storage_volume_api_filtering
- image_restrictions
- storage_zfs_export
- network_dns_records
- storage_zfs_reserve_space
- network_acl_log
- storage_zfs_blocksize
- metrics_cpu_seconds
- instance_snapshot_never
- certificate_token
- instance_nic_routed_neighbor_probe
- event_hub
- agent_nic_config
- projects_restricted_intercept
- metrics_authentication
- images_target_project
- images_all_projects
- cluster_migration_inconsistent_copy
- cluster_ovn_chassis
- container_syscall_intercept_sched_setscheduler
- storage_lvm_thinpool_metadata_size
- storage_volume_state_total
- instance_file_head
- instances_nic_host_name
- image_copy_profile
- container_syscall_intercept_sysinfo
- clustering_evacuation_mode
- resources_pci_vpd
- qemu_raw_conf
- storage_cephfs_fscache
- network_load_balancer
- vsock_api
- instance_ready_state
- network_bgp_holdtime
- storage_volumes_all_projects
- metrics_memory_oom_total
- storage_buckets
- storage_buckets_create_credentials
- metrics_cpu_effective_total
- projects_networks_restricted_access
- storage_buckets_local
- loki
- acme
- internal_metrics
- cluster_join_token_expiry
- remote_token_expiry
- init_preseed
- storage_volumes_created_at
- cpu_hotplug
- projects_networks_zones
- network_txqueuelen
- cluster_member_state
- instances_placement_scriptlet
- storage_pool_source_wipe
- zfs_block_mode
- instance_generation_id
- disk_io_cache
- amd_sev
- storage_pool_loop_resize
- migration_vm_live
- ovn_nic_nesting
- oidc
- network_ovn_l3only
- ovn_nic_acceleration_vdpa
- cluster_healing
- instances_state_total
- auth_user
- security_csm
- instances_rebuild
- numa_cpu_placement
- custom_volume_iso
- network_allocations
- zfs_delegate
- storage_api_remote_volume_snapshot_copy
- operations_get_query_all_projects
- metadata_configuration
- syslog_socket
- event_lifecycle_name_and_project
- instances_nic_limits_priority
- disk_initial_volume_configuration
- operation_wait
- image_restriction_privileged
- cluster_internal_custom_volume_copy
- disk_io_bus
- storage_cephfs_create_missing
- instance_move_config
- ovn_ssl_config
- certificate_description
- disk_io_bus_virtio_blk
- loki_config_instance
- instance_create_start
- clustering_evacuation_stop_options
- boot_host_shutdown_action
- agent_config_drive
- network_state_ovn_lr
- image_template_permissions
- storage_bucket_backup
- storage_lvm_cluster
- shared_custom_block_volumes
- auth_tls_jwt
- oidc_claim
- device_usb_serial
- numa_cpu_balanced
- image_restriction_nesting
- network_integrations
- instance_memory_swap_bytes
- network_bridge_external_create
- network_zones_all_projects
- storage_zfs_vdev
- container_migration_stateful
- profiles_all_projects
- instances_scriptlet_get_instances
- instances_scriptlet_get_cluster_members
- instances_scriptlet_get_project
- network_acl_stateless
- instance_state_started_at
- networks_all_projects
- network_acls_all_projects
- storage_buckets_all_projects
- resources_load
- instance_access
- project_access
- projects_force_delete
- resources_cpu_flags
- disk_io_bus_cache_filesystem
- instance_oci
- clustering_groups_config
- instances_lxcfs_per_instance
- clustering_groups_vm_cpu_definition
- disk_volume_subpath
- projects_limits_disk_pool
- network_ovn_isolated
- qemu_raw_qmp
- network_load_balancer_health_check
- oidc_scopes
- network_integrations_peer_name
- qemu_scriptlet
- instance_auto_restart
- storage_lvm_metadatasize
- ovn_nic_promiscuous
- ovn_nic_ip_address_none
- instances_state_os_info
- network_load_balancer_state
- instance_nic_macvlan_mode
- storage_lvm_cluster_create
- network_ovn_external_interfaces
- instances_scriptlet_get_instances_count
- cluster_rebalance
- custom_volume_refresh_exclude_older_snapshots
- storage_initial_owner
- storage_live_migration
- instance_console_screenshot
- image_import_alias
- authorization_scriptlet
- console_force
- network_ovn_state_addresses
- network_bridge_acl_devices
- instance_debug_memory
- init_preseed_storage_volumes
- init_preseed_profile_project
- instance_nic_routed_host_address
- instance_smbios11
- api_filtering_extended
- acme_dns01
- security_iommu
- network_ipv4_dhcp_routes
- network_state_ovn_ls
- network_dns_nameservers
- acme_http01_port
- network_ovn_ipv4_dhcp_expiry
- instance_state_cpu_time
- network_io_bus
- disk_io_bus_usb
- storage_driver_linstor
- instance_oci_entrypoint
- network_address_set
- server_logging
- network_forward_snat
- memory_hotplug
- instance_nic_routed_host_tables
- instance_publish_split
- init_preseed_certificates
- custom_volume_sftp
- network_ovn_external_nic_address
- network_physical_gateway_hwaddr
- backup_s3_upload
- snapshot_manual_expiry
- resources_cpu_address_sizes
- disk_attached
- limits_memory_hotplug
- disk_wwn
- server_logging_webhook
- storage_driver_truenas
- container_disk_tmpfs
- instance_limits_oom
- backup_override_config
- network_ovn_tunnels
- init_preseed_cluster_groups
- usb_attached
- backup_iso
- instance_systemd_credentials
- cluster_group_usedby
- bpf_token_delegation
- file_storage_volume
- network_hwaddr_pattern
- storage_volume_full
- storage_bucket_full
- device_pci_firmware
- resources_serial
- ovn_nic_limits
- storage_lvmcluster_qcow2
- oidc_allowed_subnets
- file_delete_force
- nic_sriov_select_ext
- network_zones_dns_contact
- nic_attached_connected
- nic_sriov_security_trusted
- direct_backup
- instance_snapshot_disk_only_restore
- unix_hotplug_pci
- cluster_evacuating_restoring
- projects_restricted_image_servers
- storage_lvmcluster_size
- authorization_scriptlet_cert
- lvmcluster_remove_snapshots
- daemon_storage_logs
- instances_debug_repair
- network_io_bus_ovn
- dependent
- metrics_project_resources
- storage_volume_nbd
- projects_restricted_storage_pool_access
- server_shutdown_action
- instances_placement_scriptlet_rebalance
- network_bridge_multicast_snooping
- storage_create_options
- instances_tpm_platform_cert
- linstor_raw
- network_address_set_ip_ranges
- storage_volumes_rebuild
- api_fragments
- instance_limits_cpu_topology
- instance_nbd
- network_bridge_bgp_instances
- core_https_allowed_websocket_origin
- storage_btrfs_compression
- oci_network_config
- infiniband_sriov_guid
- instance_selinux
api_status: stable
api_version: "1.0"
auth: trusted
public: false
auth_methods:
- tls
auth_user_name: [REDACTED]
auth_user_method: tls
environment:
  addresses:
  - 10.84.72.2:8443
  - '[fd6c:3c71:ec87::2]:8443'
  - '[fd6c:3c71:ec87:0:d027:bdb7:2e29:3e88]:8443'
  - 10.187.164.1:8443
  - '[fd42:596:cb79:eebd::1]:8443'
  - 10.187.122.1:8443
  - '[fd42:a4e7:10cd:d9a9::1]:8443'
  architectures:
  - x86_64
  - i686
  certificate: [REDACTED]
  certificate_fingerprint: [REDACTED]
  driver: lxc | qemu
  driver_version: 7.0.0 | 11.0.2
  firewall: nftables
  kernel: Linux
  kernel_architecture: x86_64
  kernel_features: {}
  kernel_version: 6.12.96+deb13-amd64
  lxc_features: {}
  os_name: Debian GNU/Linux
  os_version: "13"
  project: default
  server: incus
  server_clustered: true
  server_event_mode: full-mesh
  server_name: apollo
  server_pid: 830
  server_version: 7.0.1
  storage: btrfs
  storage_version: "6.14"
  storage_supported_drivers:
  - name: dir
    version: "1"
    remote: false
  - name: truenas
    version: 0.7.7
    remote: true
  - name: btrfs
    version: "6.14"
    remote: false

(I don’t think I needed to actually redact anything, but figured it wouldn’t hurt.)

We had a talk incus-compose and clusters aren’t friends.

for prosperity, the cluster above is:

  • 3 identical computers with network and one drive
  • debian trixie using btrfs on a single partition
  • incus & ui from zabbly
  • Ran incus admin init on each of the boxes per the clustering getting started

I figured this was a minimal, basic cluster suitable for evaluation: no ceph, no ovn, no linstor. I figured this was good enough for my needs since I’m not going for high availability, just hardware redundancy and load balancing on somewhat anemic nodes.

incus-compose should handle that, I’ll setup 3 nested nodes and cluster them to test this scenario.