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.
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:
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:
data-vault-consul-consul-server-0 data-vault-consul-consul-server-1 data-vault-consul-consul-server-2 data-vault-consul-consul-server-3 data-vault-consul-consul-server-4
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:
server: storageClass: your-class
See the Helm reference for that setting for more information.