--- layout: docs page_title: Install Consul on Self-Hosted Kubernetes Clusters description: >- The process for installing Consul on Kubernetes is the same as installing it on cloud-hosted k8s platforms, but requires additional configuration. Learn how to pre-define Persistent Volume Claims (PVCs) and a default storage class for server agents. --- # 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](/docs/k8s/installation/install) 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: ```text data---consul-server- ``` 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: ```text 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 ``` ## 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: ```yaml server: storageClass: your-class ``` See the [Helm reference](/docs/k8s/helm#v-server-storageclass) for that setting for more information.