Scale up as you grow — whether you're running one virtual machine or ten thousand.

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.

I’m managing my k8s deployment using Terraform. I’m trying to change my cluster settings (decreasing the nodes). However when I do this I get an authentication error.
terraform {
# Backend configuration
cloud {
organization = "Clipido"
}
# Plugins configuration
required_providers {
kubectl = {
source = "alekc/kubectl"
version = ">= 2.0.2"
}
infisical = {
source = "infisical/infisical"
}
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
helm = {
source = "hashicorp/helm"
version = "~> 2.0"
}
kubernetes = {
source = "hashicorp/kubernetes"
version = "~> 2.0"
}
}
}
data "digitalocean_kubernetes_cluster" "clipido" {
name = digitalocean_kubernetes_cluster.clipido.name
depends_on = [digitalocean_kubernetes_cluster.clipido]
}
provider "helm" {
# Authentication to get into the cluster
kubernetes {
host = data.digitalocean_kubernetes_cluster.clipido.endpoint
cluster_ca_certificate = base64decode(data.digitalocean_kubernetes_cluster.clipido.kube_config.0.cluster_ca_certificate)
token = data.digitalocean_kubernetes_cluster.clipido.kube_config.0.token
}
}
provider "kubernetes" {
# Authentication to get into the cluster
host = data.digitalocean_kubernetes_cluster.clipido.endpoint
cluster_ca_certificate = base64decode(data.digitalocean_kubernetes_cluster.clipido.kube_config.0.cluster_ca_certificate)
token = data.digitalocean_kubernetes_cluster.clipido.kube_config.0.token
}
resource "digitalocean_kubernetes_cluster" "clipido" {
name = "clipido-${var.infisical_env}"
region = "ams3" # `doctl kubernetes options regions`
version = "1.27.4-do.0" # `doctl kubernetes options versions`
auto_upgrade = true
maintenance_policy {
start_time = "04:00"
day = "sunday"
}
node_pool {
name = "web"
size = "s-1vcpu-2gb" # `doctl kubernetes options sizes`
auto_scale = true
min_nodes = 1
max_nodes = 2
tags = ["frontend", "web"]
labels = {
service = "frontend"
priority = "high"
}
}
}
resource "digitalocean_project_resources" "assign_kubernetes_to_project" {
project = digitalocean_project.project.id
resources = [
digitalocean_kubernetes_cluster.clipido.urn,
]
}
resource "helm_release" "nginx_ingress-helm" {
name = "ingress-nginx"
repository = "https://kubernetes.github.io/ingress-nginx"
chart = "ingress-nginx"
namespace = "terraform-clipido-${var.project_env}"
version = "4.5.2"
timeout = 300
set {
name = "controller.daemonset.useHostPort"
value = "false"
}
set {
name = "controller.ingressClassResource.default"
value = "true"
}
set {
name = "controller.ingressClassResource.name"
value = "nginx"
}
set {
name = "controller.kind"
value = "DaemonSet"
}
set {
name = "controller.publishService.enabled"
value = "true"
}
set {
name = "controller.resources.requests.memory"
value = "140Mi"
}
set {
name = "controller.service.externalTrafficPolicy"
value = "Local"
}
}
Terraform planned the following actions, but then encountered a problem:
# data.digitalocean_kubernetes_cluster.clipido will be read during apply
# (depends on a resource or a module with changes pending)
<= data "digitalocean_kubernetes_cluster" "clipido" {
+ auto_upgrade = (known after apply)
+ cluster_subnet = (known after apply)
+ created_at = (known after apply)
+ endpoint = (known after apply)
+ ha = (known after apply)
+ id = (known after apply)
+ ipv4_address = (known after apply)
+ kube_config = (sensitive value)
+ maintenance_policy = (known after apply)
+ name = "clipido-staging"
+ node_pool = (known after apply)
+ region = (known after apply)
+ service_subnet = (known after apply)
+ status = (known after apply)
+ surge_upgrade = (known after apply)
+ updated_at = (known after apply)
+ urn = (known after apply)
+ version = (known after apply)
+ vpc_uuid = (known after apply)
}
# digitalocean_kubernetes_cluster.clipido will be updated in-place
~ resource "digitalocean_kubernetes_cluster" "clipido" {
id = "60d49a31-xxxx-xxxx-xxxx-xxxxxxxxxx"
name = "clipido-staging"
tags = []
# (16 unchanged attributes hidden)
~ node_pool {
id = "60d49a31-xxxx-xxxx-xxxx-xxxxxxxxxx"
~ max_nodes = 3 -> 2
name = "web"
tags = [
"frontend",
"web",
]
# (7 unchanged attributes hidden)
}
# (1 unchanged block hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
Changes to Outputs:
~ endpoint = "https://60d49a31-xxxx-xxxx-xxxx-xxxxxxxxxx.k8s.ondigitalocean.com" -> (known after apply)
╷
│ Error: Get "http://localhost/api/v1/namespaces/terraform-clipido-staging": dial tcp [::1]:80: connect: connection refused
│
│ with kubernetes_namespace.default,
│ on do-network.tf line 21, in resource "kubernetes_namespace" "default":
│ 21: resource "kubernetes_namespace" "default" {
│
╵
╷
│ Error: Kubernetes cluster unreachable: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
│
│ with helm_release.nginx_ingress-helm,
│ on do-network.tf line 27, in resource "helm_release" "nginx_ingress-helm":
│ 27: resource "helm_release" "nginx_ingress-helm" {
│
╵
Operation failed: failed running terraform plan (exit 1)
72e571841e7f4a6881090a2f3e93c0
dom77a6e2e9d3a2
Christoffer Braathen
Jaimin Joshi
099d155dd62c45078c85bd5b98d003
82488cefb7d74db1ad87250ea4f452
Mrugesh Mohapatra
828c1c19bec3419eb032d05c128960
Rumyana Rumenova
Ben Roberts
garry55441234