Kubernetes node ports are another option for providing external access to the VoltDB cluster for replication. Node ports are similar to load balancers in that they provide an externally accessible network address for individual ports. Node ports are different in that the addresses are transitory — the address and/or port number will change as pods come and go. So node ports are less practical for the Network Discovery phase. However, they can be a cheap alternative for providing external access during the replication phase, since the cluster can advertise the new addresses as its topology changes.
It is also possible to mix and match solutions. So a single load balancer can be used to provide the Network Discovery service for a cluster, while node ports provide per pod network addresses for the replication phase, as described next.
Again, you start by assigning the DR
role as Helm properties and, if
known in advance, the
source for the remote cluster:
cluster: config: deployment: dr: id: 1 role: xdcr connection: enabled: true source: "chicago-dc-2" # Remote cluster
You then define the load balancer for Network Discovery by setting the values of the
enabled to true and
type to LoadBalancer.
cluster: serviceSpec: dr: enabled: true type: LoadBalancer
Finally, define the replication phase as using node ports by configuring
type to NodePort and
true. You can also use the
dr.startReplicationNodePort property to specify the
starting port number for the externally accessible ports assigned to the node ports.
cluster: serviceSpec: perpod: type: NodePort dr: enabled: true startReplicationNodePort: 33111