Project: Piraeus Datastore (Runtime / Cloud Native Storage)
File: drbd-host-networking.md

This guide shows you how to use the host network for DRBD replication. By default, DRBD will use the container network to replicate volume data. This ensures replication works on a wide range of clusters without further configuration. It also enables use of `NetworkPolicy` to block unauthorized access to DRBD traffic. Since the network interface of the Pod is tied to the lifecycle of the Pod, it also means DRBD will temporarily disrupt replication when the LINSTOR Satellite Pod is restarted. In contrast, using the host network for DRBD replication will cause replication to work independent of the LINSTOR Satellite Pod. The host network might also offer better performance than the container network. As a downside, you will have to manually ensure connectivity between Nodes on the relevant ports. To follow the steps in this guide, you should be familiar with editing `LinstorSatelliteConfiguration` resources. Switching from the default container network to host network is possible at any time. Existing DRBD resources will be reconfigured to use the host network interface. To configure the host network for the LINSTOR Satellite, apply the following configuration: ```yaml apiVersion: piraeus.io/v1 kind: LinstorSatelliteConfiguration metadata: name: host-network spec: podTemplate: spec: hostNetwork: true ``` After the Satellite Pods are recreated, they will use the host network. Any existing DRBD resources are reconfigured to use the new IP Address instead. Switching back from host network to container network involves manually resetting the configured peer addresses used by DRBD. This can either be achieved by rebooting every node, or by manually resetting the address using `drbdadm`. First, you need to remove the `LinstorSatelliteConfiguration` that set `hostNetwork: true`: ``` $ kubectl delete linstorsatelliteconfigurations.piraeus.io host-network linstorsatelliteconfiguration.piraeus.io "host-network" deleted ``` Then, reboot each cluster node, either one by one or multiple at once. In general, replication will not work between rebooted nodes and non-rebooted nodes. The non-rebooted nodes will continue to use the host network addresses, which are generally not reachable from the container network. After all nodes are rebooted, all resources are configured to use the container network, and all DRBD connections should be connected again. During this procedure, ensure no new volumes or snapshots are created: otherwise the migration to the container network might not be applied to all resources. First, you need to temporarily stop all replication and suspend all DRBD volumes using `drbdadm suspend-io all`. The command is executed once on each LINSTOR Satellite Pod. ``` $ kubectl exec ds/linstor-satellite.node1.example.com -- drbdadm suspend-io all $ kubectl exec ds/linstor-satellite.node2.example.com -- drbdadm suspend-io all $ kubectl exec ds/linstor-satellite.node3.example.com -- drbdadm suspend-io all ``` Next, you will need to disconnect all DRBD connections on all nodes. ``` $ kubectl exec ds/linstor-satellite.node1.example.com -- drbdadm disconnect --force all $ kubectl exec ds/linstor-satellite.node2.example.com -- drbdadm disconnect --force all $ kubectl exec ds/linstor-satellite.node3.example.com -- drbdadm disconnect --force all ``` Now, we can safely reset all DRBD connection paths, which frees the connection to be moved to the container network. ``` $ kubectl exec ds/linstor-satellite.node1.example.com -- drbdadm del-path all $ kubectl exec ds/linstor-satellite.node2.example.com -- drbdadm del-path all $ kubectl exec ds/linstor-satellite.node3.example.com -- drbdadm del-path all ``` Finally, removing the `LinstorSatelliteConfiguration` that set `hostNetwork: true` will trigger the creation of new LINSTOR Satellite Pods using the container network: ``` $ kubectl delete linstorsatelliteconfigurations.piraeus.io host-network linstorsatelliteconfiguration.piraeus.io "host-network" deleted ``` After the Pods are recreated and the LINSTOR Satellites are `Online`, the DRBD resource will be reconfigured and resume IO.