Scalable Infrastructure · Schema
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. |
JSON Schema
{
"$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"}
}
}
}
}