Install Consul on Self-Hosted Kubernetes Clusters

Except for creating persistent volumes and ensuring there is a storage class configured (see below), installing Consul on your self-hosted Kubernetes cluster is the same process as installing Consul on a cloud-hosted Kubernetes cluster. See the Installation Overview for install instructions.

Predefined Persistent Volume Claims (PVCs)

If running a self-hosted Kubernetes installation, you may need to pre-create the persistent volumes for the stateful set that the Consul servers run in.

The only way to use a pre-created PVC is to name them in the format Kubernetes expects:

  1. data-<kubernetes namespace>-<helm release name>-consul-server-<ordinal>

The Kubernetes namespace you are installing into, Helm release name, and ordinal must match between your Consul servers and your pre-created PVCs. You only need as many PVCs as you have Consul servers. For example, given a Kubernetes namespace of “vault,” a release name of “consul,” and 5 servers, you would need to create PVCs with the following names:

  1. data-vault-consul-consul-server-0
  2. data-vault-consul-consul-server-1
  3. data-vault-consul-consul-server-2
  4. data-vault-consul-consul-server-3
  5. data-vault-consul-consul-server-4

Storage Class

Your Kubernetes installation must either have a default storage class specified (see https://kubernetes.io/docs/concepts/storage/storage-classes/ and https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/) or you must specify the storage class for the Consul servers:

  1. server:
  2. storageClass: your-class

See the Helm reference for that setting for more information.