Kubernetes Cluster

Describes a managed Kubernetes cluster configuration across AWS EKS, Google GKE, Azure AKS, and DigitalOcean DOKS. Covers node pools, networking, autoscaling, and access control.

Cloud InfrastructureComputeDevOpsInfrastructure as CodeKubernetesNetworkingScalabilityStorage

Properties

Name Type Description
id string Provider-assigned unique cluster identifier.
name string Human-readable cluster name.
provider string Cloud provider hosting the managed Kubernetes cluster.
region string Cloud region where the cluster control plane resides.
version string Kubernetes version (e.g., 1.29, 1.30).
status string Current operational status of the cluster.
endpoint string API server endpoint URL for kubectl and client access.
nodePools array Node pools (worker node groups) in the cluster.
networking object
autoscaling object
addons array Managed cluster add-ons or extensions enabled.
tags object Key-value metadata labels.
createdAt string Cluster creation timestamp.
View JSON Schema on GitHub

JSON Schema

scalable-infrastructure-kubernetes-cluster-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/scalable-infrastructure/main/json-schema/scalable-infrastructure-kubernetes-cluster-schema.json",
  "title": "Kubernetes Cluster",
  "description": "Describes a managed Kubernetes cluster configuration across AWS EKS, Google GKE, Azure AKS, and DigitalOcean DOKS. Covers node pools, networking, autoscaling, and access control.",
  "type": "object",
  "required": ["name", "provider", "region", "version"],
  "properties": {
    "id": {
      "type": "string",
      "description": "Provider-assigned unique cluster identifier.",
      "example": "cluster-abc123"
    },
    "name": {
      "type": "string",
      "description": "Human-readable cluster name.",
      "pattern": "^[a-z][a-z0-9-]*$",
      "minLength": 1,
      "maxLength": 63
    },
    "provider": {
      "type": "string",
      "description": "Cloud provider hosting the managed Kubernetes cluster.",
      "enum": ["aws-eks", "google-gke", "azure-aks", "digitalocean-doks", "self-managed"]
    },
    "region": {
      "type": "string",
      "description": "Cloud region where the cluster control plane resides.",
      "examples": ["us-east-1", "us-central1", "eastus", "nyc3"]
    },
    "version": {
      "type": "string",
      "description": "Kubernetes version (e.g., 1.29, 1.30).",
      "pattern": "^\\d+\\.\\d+(\\.\\d+)?$",
      "example": "1.30"
    },
    "status": {
      "type": "string",
      "description": "Current operational status of the cluster.",
      "enum": ["provisioning", "running", "upgrading", "degraded", "deleting", "deleted"],
      "default": "provisioning"
    },
    "endpoint": {
      "type": "string",
      "description": "API server endpoint URL for kubectl and client access.",
      "format": "uri"
    },
    "nodePools": {
      "type": "array",
      "description": "Node pools (worker node groups) in the cluster.",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/NodePool"
      }
    },
    "networking": {
      "$ref": "#/$defs/ClusterNetworking"
    },
    "autoscaling": {
      "$ref": "#/$defs/ClusterAutoscaling"
    },
    "addons": {
      "type": "array",
      "description": "Managed cluster add-ons or extensions enabled.",
      "items": {
        "type": "object",
        "required": ["name"],
        "properties": {
          "name": {
            "type": "string",
            "examples": ["coredns", "kube-proxy", "vpc-cni", "metrics-server", "cluster-autoscaler"]
          },
          "version": {"type": "string"},
          "enabled": {"type": "boolean", "default": true}
        }
      }
    },
    "tags": {
      "type": "object",
      "description": "Key-value metadata labels.",
      "additionalProperties": {"type": "string"}
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "description": "Cluster creation timestamp."
    }
  },
  "$defs": {
    "NodePool": {
      "type": "object",
      "description": "A pool of homogeneous worker nodes with shared configuration.",
      "required": ["name", "instanceType", "minCount", "maxCount"],
      "properties": {
        "name": {"type": "string", "description": "Node pool name."},
        "instanceType": {
          "type": "string",
          "description": "VM instance type/machine type.",
          "examples": ["t3.xlarge", "n2-standard-4", "Standard_D4s_v3", "s-4vcpu-8gb"]
        },
        "minCount": {"type": "integer", "minimum": 0, "description": "Minimum node count."},
        "maxCount": {"type": "integer", "minimum": 1, "description": "Maximum node count."},
        "desiredCount": {"type": "integer", "minimum": 0, "description": "Desired node count."},
        "diskSizeGB": {"type": "integer", "minimum": 20, "default": 100},
        "labels": {
          "type": "object",
          "additionalProperties": {"type": "string"},
          "description": "Kubernetes node labels."
        },
        "taints": {
          "type": "array",
          "description": "Kubernetes node taints for workload scheduling.",
          "items": {
            "type": "object",
            "properties": {
              "key": {"type": "string"},
              "value": {"type": "string"},
              "effect": {"type": "string", "enum": ["NoSchedule", "PreferNoSchedule", "NoExecute"]}
            }
          }
        },
        "spotEnabled": {
          "type": "boolean",
          "description": "Whether to use spot/preemptible instances for cost savings.",
          "default": false
        }
      }
    },
    "ClusterNetworking": {
      "type": "object",
      "description": "Cluster networking configuration.",
      "properties": {
        "vpcId": {"type": "string", "description": "VPC or network ID."},
        "podCidr": {"type": "string", "description": "CIDR block for pod IP addresses.", "example": "10.244.0.0/16"},
        "serviceCidr": {"type": "string", "description": "CIDR block for service cluster IPs.", "example": "10.96.0.0/12"},
        "cni": {
          "type": "string",
          "description": "Container Network Interface plugin.",
          "enum": ["vpc-cni", "calico", "cilium", "flannel", "weave"],
          "default": "vpc-cni"
        },
        "privateCluster": {
          "type": "boolean",
          "description": "Whether the API server is accessible only from within the VPC.",
          "default": false
        }
      }
    },
    "ClusterAutoscaling": {
      "type": "object",
      "description": "Cluster-level autoscaling settings.",
      "properties": {
        "enabled": {"type": "boolean", "default": true},
        "minNodes": {"type": "integer", "minimum": 1},
        "maxNodes": {"type": "integer", "minimum": 1},
        "scaleDownEnabled": {"type": "boolean", "default": true},
        "scaleDownDelayAfterAdd": {"type": "string", "description": "Delay after node addition before scale-down.", "example": "10m"},
        "scaleDownUnneededTime": {"type": "string", "description": "Time a node must be unneeded before removal.", "example": "10m"}
      }
    }
  }
}