MetalK8s clusters require machines running CentOS/RHEL 7.6 or higher as their operating system. These machines may be virtual or physical, with no difference in setup procedure. The number of machines to set up depends on the architecture you chose in Choosing a Deployment Architecture.

Machines must not be managed by any configuration management system, such as SaltStack or Puppet.


The distribution must be left intact as much as possible (do not tune, tweak, or configure it, or install any software).


For nodes operating behind a proxy, see Configuration.

Linux Kernel Version

Linux kernels shipped with CentOS/RHEL 7 and earlier are affected by a cgroups memory leak bug.

This bug was fixed in kernel 3.10.0-1062.4.1. Use this kernel version or later.

The version can be retrieved using:

$ uname -r

If the installed version is lower than the one above, upgrade it with:

$ yum upgrade -y kernel-3.10.0-1062.4.1.el7
$ reboot

These commands may require sudo or root access.



Each machine must be accessible through SSH from the host. Bootstrap node deployment generates a new SSH identity for the Bootstrap node and shares it with other nodes in the cluster. You can also do this manually beforehand.


Each machine must be a member of both the control plane and workload plane networks described in Networks. However, these networks can overlap, and nodes do not need distinct IP addresses for each plane.

For the host to reach the cluster-provided UIs, it must be able to connect to the machines’ control plane IP addresses.


Each machine must have properly configured repositories with access to basic repository packages (depending on the operating system).


  • base

  • extras

  • updates


  • rhel-7-server-rpms

  • rhel-7-server-extras-rpms

  • rhel-7-server-optional-rpms


  • rhel-8-for-x86_64-baseos-rpms

  • rhel-8-for-x86_64-appstream-rpms


RHEL instances must be registered.


Repository names and configurations do not need to be the same as the official ones, but all packages must be made available.

To enable an existing repository:


yum-config-manager --enable <repo_name>


subscription-manager repos --enable=<repo_name>

To add a new repository:

yum-config-manager --add-repo <repo_url>


repo_url can be set to a remote URL using the prefix http://, https://, ftp://, etc., or to a local path using file://.

For more, review the official Red Hat documentation:


For production environments, a block device dedicated to etcd is recommended for better performance and stability. With lower write latency and less variance than spinning disks, SSDs are recommended to improve reliability.

The device must be formatted and mounted on /var/lib/etcd, on Nodes intended to bear the etcd role.

For more on etcd’s hardware requirements, see the official documentation.