Vultr Kubernetes Engine (VKE) is a fully managed Kubernetes product with predictable pricing. When you deploy VKE, you'll get a managed Kubernetes control plane that includes our Cloud Controller Manager (CCM) and the Container Storage Interface (CSI). In addition, you can configure block storage and load balancers or install add-ons such as Vultr's ExternalDNS and Cert Manager. We've made Kubernetes hosting easy, so you can focus on scaling your application.
This quickstart guide explains how to deploy a VKE cluster and assumes you have experience using Kubernetes. If you have comments about this guide, please use the Suggest an Update button at the bottom of the page.
Please see our changelog for information about supported versions of Kubernetes.
You can deploy a new VKE cluster in a few clicks. Here's how to get started.
Create a Node Pool.
About Node Pools
When creating a VKE cluster, you can assign one or more Node Pools with multiple nodes per pool. For each Node Pool, you'll need to make a few selections.
The monthly rate for the node pool is calculated as you make your selections. If you want to deploy more than one, click Add Another Node Pool.
When ready, click Deploy Now.
Kubernetes requires some time to inventory and configure the nodes. When VKE completes the configuration the cluster status will report Running. To verify the status of your cluster, you can download your
kubeconfig
file (as described in the next section) and run:
$ kubectl --kubeconfig={PATH TO THE FILE} cluster-info
After deploying your VKE cluster, you need to gather some information and manage it.
Click the Manage button to the right of the desired cluster.
On the Overview tab, you'll see your cluster's IP address and Endpoint information.
Click the Download Configuration button in the upper-right to download your kubeconfig
file, which has credentials and endpoint information to control your cluster. Use this file with kubectl
as shown:
$ kubectl --kubeconfig={PATH TO THE FILE} get nodes
kubectl
uses a configuration file, known as the kubeconfig, to access your Kubernetes cluster.
A kubeconfig file has information about the cluster, such as users, namespaces, and authentication mechanisms. The kubectl
command uses the kubeconfig to find a cluster and communicate with it. The default kubeconfig is ~/.kube/config
unless you override that location on the command line or with an environment variable. The order of precedence is:
--kubeconfig
flag, kubectl loads only that file. You may use only one flag, and no merging occurs.$KUBECONFIG
environment variable, it is parsed as a list of filesystem paths according to the normal path delimiting rules for your system.~/.kube/config
file, and no merging occurs.Please see the Kubernetes documentation for more details.
To manage Node Pools, click the Nodes tab on the Manage Cluster page.
You have several controls available:
X
icon to the right of the pool the destroy the pool.Important: You must use VKE Dashboard or the Kubernetes endpoints of the Vultr API to delete VKE worker nodes. If you delete a worker node from elsewhere in the customer portal or with Instance endpoints of the Vultr API, Vultr will redeploy the worker node to preserve the defined VKE Cluster node pool configuration.
To manage the resources linked to VKE, such as Block Storage and Load Balancers, click the Linked Resources tab on the Manage Cluster page.
When you deploy VKE, you automatically get several managed components. Although you don't need to deploy or configure them yourself, here are brief descriptions with links to more information.
Vultr Cloud Controller Manager (CCM) is part of the managed control plane that connects Vultr features to your Kubernetes cluster. The CCM monitors the node's state, assigns their IP addresses, and automatically deploys managed Load Balancers as needed for your Kubernetes Load Balancer/Ingress services. Learn more about the CCM on GitHub.
If your application persists data, you'll need storage. VKE's managed control plane automatically deploys Vultr Container Storage Interface (CSI) to connect your Kubernetes cluster with Vultr's high-speed block storage by default. Learn more about the CSI on GitHub.
NOTE: You should use Block Storage volumes for persistent data. The local disk storage on worker nodes is transient and will be lost during Kubernetes upgrades.
Vultr offers two block storage technologies: HDD and NVMe.
HDD is an affordable option that uses traditional rotating hard drives and supports volumes larger than 10 TB.
vultr-block-storage-hdd
NVMe is a higher performance option for workloads that require rapid I/O.
vultr-block-storage
Use the /v2/regions
API endpoint to discover which storage classes are available at your location.
block_storage_storage_opt
indicates HDD storage is available.block_storage_high_perf
indicates NVMe storage is available.Some locations support both storage classes. If NVMe block storage is available in a location, our CSI uses that class by default.
To use block storage with VKE, deploy a Persistent Volume Claim (PVC). For example, to deploy a 10Gi block on your account for VKE with NMVe-backed storage, use a PersistentVolumeClaim template like this:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: vultr-block-storage
To attach this PVC to a Pod, define a volume node in your Pod template. Note the claimName
below is csi-pvc, referencing the PersistentVolumeClaim in the example above.
kind: Pod
apiVersion: v1
metadata:
name: readme-app
spec:
containers:
- name: readme-app
image: busybox
volumeMounts:
- mountPath: "/data"
name: vultr-volume
command: [ "sleep", "1000000" ]
volumes:
- name: vultr-volume
persistentVolumeClaim:
claimName: csi-pvc
To learn more about Persistent Volumes, see the Kubernetes documentation. If you'd like to learn more about Vultr CSI, see our GitHub repository.
Load Balancers in VKE offer all the same features and capabilities as standalone managed Load Balancers. To deploy a VKE load balancer for your application, add a LoadBalancer
type to your service configuration file and use metadata annotations to tell the CCM how to configure VKE load balancer. VKE will deploy the Kubernetes service load balancer according to your service configuration and attach it to the cluster.
Here's an example service configuration file that declares a load balancer for HTTP traffic on port 80. The app selector app-name
matches an existing service set of pods on your cluster.
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/vultr-loadbalancer-protocol: "http"
name: vultr-lb-http
spec:
type: LoadBalancer
selector:
app: app-name
ports:
- port: 80
name: "http"
Notice the annotations in the metadata section. Annotations are how you configure the load balancer, and you'll find the complete list of available annotations in our GitHub repository.
Here is another load balancer example that listens on HTTP port 80, and HTTPS port 443. The SSL certificate is declared as a Kubernetes TLS secret named ssl-secret
, which this example assumes was already deployed. See the TLS Secrets documentation to learn how to deploy a TLS secret.
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/vultr-loadbalancer-protocol: "http"
service.beta.kubernetes.io/vultr-loadbalancer-https-ports: "443"
# You will need to have created a TLS Secret and pass in the name as the value
service.beta.kubernetes.io/vultr-loadbalancer-ssl: "ssl-secret"
name: vultr-lb-https
spec:
type: LoadBalancer
selector:
app: app-name
ports:
- port: 80
name: "http"
- port: 443
name: "https"
As you increase or decrease the number of cluster worker nodes, VKE manages their attachment to the load balancer. If you'd like to learn general information about Kubernetes load balancers, see the documentation at kubernetes.io.
VKE Cert Manager adds certificates and certificate issuers as resource types in VKE and simplifies the process of obtaining, renewing, and using those certificates. Our Cert Manager documentation is on GitHub, and you can use Vultr's Helm chart to install Cert Manager.
ExternalDNS makes Kubernetes resources discoverable via public DNS servers. For more information, see our tutorial to set up ExternalDNS with Vultr DNS.
Vultr Kubernetes Engine is a fully-managed product offering with predictable pricing that makes Kubernetes easy to use. Vultr manages the control plane and worker nodes and provides integration with other managed services such as Load Balancers, Block Storage, and DNS.
Please see our changelog for information about supported versions of Kubernetes.
Vultr Kubernetes Engine includes the managed control plane free of charge. You pay for the Worker Nodes, Load Balancers, and Block Storage resources you deploy. Worker nodes and Load Balancers run on Vultr cloud server instances of your choice with 2 GB of RAM or more. See our hourly rates.
Yes, the minimum size for a Block Storage volume is 10GB.
Kubernetes uses Vultr cloud servers. It does not support Bare Metal servers.
No, VKE does not come with an ingress controller preconfigured. Vultr Load Balancers will work with any ingress controller you deploy. Popular ingress controllers include Nginx, HAProxy, and Traefik.
VKE uses Calico.