Provision the Hosts
Before you start
You should have already reviewed Requirements and sizing and Networking, firewalls, and DNS, and decided on a topology, a private network CIDR, and the three external addresses.
Provision the machines
Provision x86-64 machines according to the topology you selected in Requirements and sizing.
Record the hostname and private IP of every host. Hostnames must be unique and
resolvable consistently, either through internal DNS or /etc/hosts.
Configure the private network
Place all machines on one private routed network, for example 10.10.0.0/20. Any
non-overlapping private CIDR is suitable if the same CIDR is recorded as
ceph.nodesSubnet in the install configuration.
Provide unrestricted communication between Codesphere hosts on the private network. Kubernetes, Ceph, PostgreSQL, container registry, and SSH traffic all cross this network. If internal firewalls must be restrictive, derive and test an explicit port matrix for the selected Kubernetes and Ceph versions before installation.
Hosts without public addresses need outbound access through NAT or an HTTP proxy. They must be able to reach package repositories, the selected container registry, certificate endpoints, and any source URLs referenced by the installer.
Avoid CIDR overlap between the host network, Kubernetes pod network, Kubernetes service network, connected corporate networks, and VPNs.
Prepare the Ceph block devices
Ceph data and DB/WAL disks must be presented as distinct, unused block devices — do not format or mount them.
If a disk was used before, wipe it before installation. This destroys all data on the disk — double-check the device identifier before running these commands on each Ceph data/DB disk on each Ceph node:
sudo dd if=/dev/zero of=/dev/sdx bs=1M count=100 conv=fsync # sdx is your target disk, e.g. sdb, sdc
sudo wipefs -a /dev/sdx
A reboot may be necessary afterward for the OS to fully recognize the change:
sudo reboot
Establish administrative SSH access
Configure the jumpbox as the only public SSH entry point. The jumpbox must be able to connect as an administrative user to every private host, and the hosts must be able to connect to one another where required by Ceph and k0s installation.
The installation workflow uses direct root SSH and SSH agent forwarding. If organizational policy forbids root SSH, provide an equivalent privileged automation path and verify it with the installer before proceeding. Protect the private key, restrict ingress to trusted source ranges, and use host-key verification in a production workflow.
From the jumpbox, verify every host:
ssh root@<postgres-private-ip> hostname
ssh root@<ceph-private-ip> hostname
ssh root@<k0s-private-ip> hostname
Tune every installation host
Apply and persist the following kernel settings on the PostgreSQL, Ceph, and k0s hosts:
cat >/etc/sysctl.d/99-codesphere.conf <<'EOF'
fs.inotify.max_user_watches=1048576
fs.inotify.max_user_instances=8192
vm.max_map_count=262144
EOF
sysctl --system
Verify the active values:
sysctl fs.inotify.max_user_watches
sysctl fs.inotify.max_user_instances
sysctl vm.max_map_count
Synchronize time
Keep time synchronized on every host, for example with chrony:
sudo apt update
sudo apt install chrony -y
sudo systemctl enable chrony --now
sudo chronyc sources
Confirm that hostnames, private addresses, attached disks, DNS resolution, outbound connectivity, and SSH access survive a reboot before installing Codesphere.
What you should have now
- Every host provisioned, on the private network, with recorded hostname and IP.
- Ceph data/DB disks empty and unmounted.
- Passwordless root SSH from the jumpbox to every host.
- Kernel tuning applied and verified on PostgreSQL, Ceph, and k0s hosts.
- Time synchronized across all hosts.
Next
Continue to Prepare the jumpbox and generate the install configuration.