HAcluster

HAcluster is a Juju subordinate charm that encapsulates corosync and pacemaker for floating virtual IP or DNS addresses and is similar to keepalived. It differentiates itself in that it allows servers to span subnets via the DNS option, which communicates directly with MAAS. It also has the ability to shoot the other node in the head(STONITH) via MAAS to prevent issues in a split-brain scenario.

Charmed Kubernetes supports HAcluster via a relation and the configuration options ha-cluster-vip and ha-cluster-dns. Relations to the kubernetes-control-plane and kubeapi-load-balancer charms are supported. These options are mutually exclusive.

Deploying

In order to use HAcluster, the first decision is if a load balancer is desired. This depends on the size of the cluster and the expected control plane load. Note that it is recommended to run HAcluster on a minimum of 3 units for a reliable quorum, so you will need 3 kubeapi-load-balancer or 3 kubernetes-control-plane units to use HAcluster.

With Load Balancer

juju deploy charmed-kubernetes
juju add-unit -n 2 kubeapi-load-balancer
juju deploy hacluster
juju config kubeapi-load-balancer ha-cluster-vip="192.168.0.1 192.168.0.2"
juju integrate kubeapi-load-balancer hacluster

Without Load Balancer

juju deploy kubernetes-core
juju add-unit -n 2 kubernetes-control-plane
juju deploy hacluster
juju config kubernetes-control-plane ha-cluster-vip="192.168.0.1 192.168.0.2"
juju integrate kubernetes-control-plane hacluster

Validation

Once things settle, the virtual IP addresses should be pingable. A new kubeconfig file will be created containing the virtual IP addresses. You will need to replace your kubeconfig with the new one:

juju ssh kubernetes-control-plane/leader -- cat config > ~/.kube/config

We appreciate your feedback on the documentation. You can edit this page or file a bug here.

See the guide to contributing or discuss these docs in our public Mattermost channel.