- AADApplication
- AMIConfig
- APIServerConfig
- AWSAutoScalableNodeGroup
- AWSConfig
- AWSControlPlane
- AWSCredentials
- ArgoCDConfig
- AutoScalableNodeGroup
- AzureAutoScalableNodeGroup
- AzureConfig
- AzureControlPlane
- AzureCredentials
- BareMetalConfig
- BareMetalControlPlane
- BareMetalControlPlaneEndpoint
- BareMetalHost
- BareMetalNodeGroup
- BareMetalSSHConfig
- CanonicalUbuntuImage
- CloudConfig
- ClusterConfig
- DeployKeysConfig
- DisasterRecoveryConfig
- FileConfig
- ForksConfig
- GeneralConfig
- GitConfig
- HCloudAutoScalableNodeGroup
- HCloudControlPlane
- HCloudControlPlaneLoadBalancer
- HCloudVPNClusterConfig
- HetznerBareMetalConfig
- HetznerBareMetalControlPlane
- HetznerBareMetalControlPlaneEndpoint
- HetznerBareMetalHost
- HetznerBareMetalNodeGroup
- HetznerBareMetalSSHKeyPair
- HetznerConfig
- HetznerControlPlane
- HetznerCredentials
- HetznerHCloudConfig
- HetznerNodeGroups
- HetznerRobotCredentials
- HostPathMountConfig
- InstallImageConfig
- KubeAidForkConfig
- KubePrometheusConfig
- KubeaidConfigForkConfig
- LocalConfig
- NodeGroup
- ObmondoConfig
- SSHKeyPairConfig
- SSHPrivateKeyConfig
- SecretsConfig
- UserConfig
- VG0Config
- VSwitchConfig
- WorkloadIdentity
- ZFSConfig
| Field | Type | Default | Description |
|---|---|---|---|
| principalID | string |
| Field | Type | Default | Description |
|---|---|---|---|
| id | string |
NOTE : Generally, refer to the KubeadmControlPlane CRD instead of the corresponding GoLang source types linked below. There are some configuration options which appear in the corresponding GoLang source type, but not in the CRD. If you set those fields, then they get removed by the Kubeadm control-plane provider. This causes the capi-cluster ArgoCD App to always be in an OutOfSync state, resulting to KubeAid CLI not making any progress!
| Field | Type | Default | Description |
|---|---|---|---|
| extraArgs | map[string]string |
{} | |
| extraVolumes | []HostPathMountConfig |
[] | |
| files | []FileConfig |
[] |
| Field | Type | Default | Description |
|---|---|---|---|
| ami | AMIConfig |
||
| instanceType | string |
||
| rootVolumeSize | uint32 |
||
| sshKeyName | string |
||
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| minSize | uint |
Minimum number of replicas in the nodegroup. |
|
| maxSize | uint |
Maximum number of replicas in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| region | string |
||
| sshKeyName | string |
||
| vpcID | string |
||
| bastionEnabled | bool |
True | |
| controlPlane | AWSControlPlane |
||
| nodeGroups | []AWSAutoScalableNodeGroup |
| Field | Type | Default | Description |
|---|---|---|---|
| loadBalancerScheme | string |
internet-facing | |
| replicas | uint32 |
||
| instanceType | string |
||
| ami | AMIConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| accessKeyID | string |
||
| secretAccessKey | string |
||
| sessionToken | string |
| Field | Type | Default | Description |
|---|---|---|---|
| deployKeys | DeployKeysConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| minSize | uint |
Minimum number of replicas in the nodegroup. |
|
| maxSize | uint |
Maximum number of replicas in the nodegroup. |
|
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| vmSize | string |
||
| diskSizeGB | uint32 |
||
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| minSize | uint |
Minimum number of replicas in the nodegroup. |
|
| maxSize | uint |
Maximum number of replicas in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| tenantID | string |
||
| subscriptionID | string |
||
| aadApplication | AADApplication |
||
| location | string |
||
| storageAccount | string |
||
| workloadIdentity | WorkloadIdentity |
||
| sshPublicKey | string |
||
| canonicalUbuntuImage | CanonicalUbuntuImage |
||
| controlPlane | AzureControlPlane |
||
| nodeGroups | []AzureAutoScalableNodeGroup |
| Field | Type | Default | Description |
|---|---|---|---|
| loadBalancerType | string |
Public | |
| diskSizeGB | uint32 |
||
| vmSize | string |
||
| replicas | uint32 |
| Field | Type | Default | Description |
|---|---|---|---|
| clientID | string |
||
| clientSecret | string |
| Field | Type | Default | Description |
|---|---|---|---|
| ssh | BareMetalSSHConfig |
||
| controlPlane | BareMetalControlPlane |
||
| nodeGroups | []BareMetalNodeGroup |
| Field | Type | Default | Description |
|---|---|---|---|
| endpoint | BareMetalControlPlaneEndpoint |
||
| hosts | []BareMetalHost |
| Field | Type | Default | Description |
|---|---|---|---|
| host | string |
||
| port | uint |
6443 |
| Field | Type | Default | Description |
|---|---|---|---|
| publicAddress | string |
||
| privateAddress | string |
||
| ssh | BareMetalSSHConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| hosts | []BareMetalHost |
||
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| port | uint |
22 | |
| privateKey | SSHPrivateKeyConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| offer | string |
||
| sku | string |
| Field | Type | Default | Description |
|---|---|---|---|
| aws | AWSConfig |
||
| azure | AzureConfig |
||
| hetzner | HetznerConfig |
||
| bare-metal | BareMetalConfig |
||
| local | LocalConfig |
||
| disasterRecovery | DisasterRecoveryConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| type | string |
workload | |
| name | string |
Name of the Kubernetes cluster. We don't allow using dots in the cluster name, since it can cause issues with tools like ClusterAPI and Cilium : which use the cluster name to generate other configurations. |
|
| k8sVersion | string |
Kubernetes version (>= 1.30.0). |
|
| enableAuditLogging | bool |
True | Whether you would like to enable Kubernetes Audit Logging out of the box. Suitable Kubernetes API configurations will be done for you automatically. And they can be changed using the apiSever struct field. |
| apiServer | APIServerConfig |
Configuration options for the Kubernetes API server. |
|
| additionalUsers | []UserConfig |
Other than the root user, addtional users that you would like to be created in each node. NOTE : Currently, we can't register additional SSH key-pairs against the root user. |
|
| argoCD | ArgoCDConfig |
ArgoCD specific details. |
| Field | Type | Default | Description |
|---|---|---|---|
| kubeaidConfig | SSHPrivateKeyConfig |
||
| kubeaid | SSHPrivateKeyConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| veleroBackupsBucketName | string |
||
| sealedSecretsBackupsBucketName | string |
REFER : "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1".File.
| Field | Type | Default | Description |
|---|---|---|---|
| path | string |
||
| content | string |
KubeAid and KubeAid Config repository specific details. We require the KubeAid and KubeAid Config repositories to be hosted in the same Git server.
| Field | Type | Default | Description |
|---|---|---|---|
| kubeaid | KubeAidForkConfig |
KubeAid repository specific details. |
|
| kubeaidConfig | KubeaidConfigForkConfig |
KubeAid Config repository specific details. |
Non secret configuration options.
| Field | Type | Default | Description |
|---|---|---|---|
| git | GitConfig |
Git server specific details. |
|
| forkURLs | ForksConfig |
KubeAid and KubeAid Config repository specific details. The KubeAid and KubeAid Config repositories must be hosted in the same Git server. |
|
| cluster | ClusterConfig |
Kubernetes specific details. |
|
| cloud | CloudConfig |
Cloud provider specific details. |
|
| kubePrometheus | KubePrometheusConfig |
Kube Prometheus installation specific details. Defaults to Latest Fill this only if you want a specific version |
|
| obmondo | ObmondoConfig |
Obmondo customer specific details. |
Git specific details, used by KubeAid CLI, to clone repositories from and push changes to the Git server. We enforce the user to use SSH, for authenticating to the Git server.
| Field | Type | Default | Description |
|---|---|---|---|
| caBundlePath | string |
||
| sshUsername | string |
git | SSH username. |
| useSSHAgent | bool |
Or, make KubeAid CLI use the SSH Agent. So, you (the one who runs KubeAid CLI) can use your YubiKey. |
|
| privateKeyFilePath | string |
Details about (autoscalable) node-groups in HCloud.
| Field | Type | Default | Description |
|---|---|---|---|
| machineType | string |
HCloud machine type. You can browse all available HCloud machine types here : https://hetzner.com/cloud. |
|
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| minSize | uint |
Minimum number of replicas in the nodegroup. |
|
| maxSize | uint |
Maximum number of replicas in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| machineType | string |
||
| replicas | uint |
||
| loadBalancer | HCloudControlPlaneLoadBalancer |
| Field | Type | Default | Description |
|---|---|---|---|
| enabled | bool |
||
| region | string |
| Field | Type | Default | Description |
|---|---|---|---|
| name | string |
| Field | Type | Default | Description |
|---|---|---|---|
| wipeDisks | bool |
false | |
| installImage | InstallImageConfig |
||
| sshKeyPair | HetznerBareMetalSSHKeyPair |
| Field | Type | Default | Description |
|---|---|---|---|
| endpoint | HetznerBareMetalControlPlaneEndpoint |
||
| bareMetalHosts | []HetznerBareMetalHost |
||
| zfs | ZFSConfig |
ZFS specific configuration. Every node runs a ZFS pool, named primary. We carve out storage for container images, pod logs and pod ephemeral volumes from that ZFS pool, as required. The ZFS pool has RAIDZ-1 enabled, which means it can survive single disk failure. |
| Field | Type | Default | Description |
|---|---|---|---|
| isFailoverIP | bool |
||
| host | string |
| Field | Type | Default | Description |
|---|---|---|---|
| serverID | string |
| Field | Type | Default | Description |
|---|---|---|---|
| bareMetalHosts | []HetznerBareMetalHost |
||
| zfs | ZFSConfig |
ZFS specific configuration. Every node runs a ZFS pool, named primary. We carve out storage for container images, pod logs and pod ephemeral volumes from that ZFS pool, as required. The ZFS pool has RAIDZ-1 enabled, which means it can survive single disk failure. |
|
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| name | string |
||
| publicKeyFilePath | string |
||
| privateKeyFilePath | string |
| Field | Type | Default | Description |
|---|---|---|---|
| mode | string |
hcloud | The Hetzner mode to use : (1) hcloud : Both the control-plane and the nodegroups will be in HCloud. (2) bare-metal : Both the control-plane and the nodegroups will be in Hetzner Bare Metal. (3) hybrid : The control-plane will be in HCloud, and each node-group can be either in HCloud or Hetzner Bare Metal. |
| vswitch | VSwitchConfig |
||
| hcloud | HetznerHCloudConfig |
||
| bareMetal | HetznerBareMetalConfig |
||
| controlPlane | HetznerControlPlane |
||
| nodeGroups | HetznerNodeGroups |
Details about node-groups in Hetzner. |
|
| vpnCluster | HCloudVPNClusterConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| hcloud | HCloudControlPlane |
||
| bareMetal | HetznerBareMetalControlPlane |
||
| regions | []string |
| Field | Type | Default | Description |
|---|---|---|---|
| apiToken | string |
||
| robot | HetznerRobotCredentials |
| Field | Type | Default | Description |
|---|---|---|---|
| zone | string |
||
| imageName | string |
ubuntu-24.04 | |
| sshKeyPairName | string |
Details about node-groups in Hetzner.
| Field | Type | Default | Description |
|---|---|---|---|
| hcloud | []HCloudAutoScalableNodeGroup |
Details about node-groups in HCloud. |
|
| bareMetal | []HetznerBareMetalNodeGroup |
Details about node-groups in Hetzner Bare Metal. |
| Field | Type | Default | Description |
|---|---|---|---|
| user | string |
||
| password | string |
REFER : "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1".HostPathMount
| Field | Type | Default | Description |
|---|---|---|---|
| name | string |
||
| hostPath | string |
||
| mountPath | string |
||
| pathType | k8s.io/api/core/v1.HostPathType |
||
| readOnly | bool |
true | Whether the mount should be read-only. |
| Field | Type | Default | Description |
|---|---|---|---|
| imagePath | string |
/root/.oldroot/nfs/images/Ubuntu-2404-noble-amd64-base.tar.gz | |
| vg0 | VG0Config |
KubeAid repository specific details.
| Field | Type | Default | Description |
|---|---|---|---|
| url | string |
KubeAid repository SSH URL. |
|
| version | string |
KubeAid tag. |
| Field | Type | Default | Description |
|---|---|---|---|
| version | string |
||
| grafanaURL | string |
KubeAid Config repository specific details.
| Field | Type | Default | Description |
|---|---|---|---|
| url | string |
KubeAid Config repository SSH URL. |
|
| directory | string |
Name of the directory inside your KubeAid Config repository's k8s folder, where the KubeAid Config files for this cluster will be contained. When not specified, the directory name will default to the cluster name. So, suppose your cluster name is 'staging'. Then, the directory name will default to 'staging'. Or you can customize it to something like 'staging.qa'. |
Local specific.
| Field | Type | Default | Description |
|---|
| Field | Type | Default | Description |
|---|---|---|---|
| name | string |
Nodegroup name. |
|
| labels | map[string]string |
[] | Labels that you want to be propagated to each node in the nodegroup. Each label should meet one of the following criterias to propagate to each of the nodes : 1. Has node-role.kubernetes.io as prefix. 2. Belongs to node-restriction.kubernetes.io domain. 3. Belongs to node.cluster.x-k8s.io domain. REFER : https://cluster-api.sigs.k8s.io/developer/architecture/controllers/metadata-propagation#machine. |
| taints | []k8s.io/api/core/v1.Taint |
[] | Taints that you want to be propagated to each node in the nodegroup. |
| Field | Type | Default | Description |
|---|---|---|---|
| customerID | string |
||
| monitoring | bool |
| Field | Type | Default | Description |
|---|---|---|---|
| publicKeyFilePath | string |
||
| privateKeyFilePath | string |
| Field | Type | Default | Description |
|---|---|---|---|
| privateKeyFilePath | string |
| Field | Type | Default | Description |
|---|---|---|---|
| aws | AWSCredentials |
||
| azure | AzureCredentials |
||
| hetzner | HetznerCredentials |
| Field | Type | Default | Description |
|---|---|---|---|
| name | string |
||
| sshPublicKey | string |
| Field | Type | Default | Description |
|---|---|---|---|
| size | int |
80 | |
| rootVolumeSize | int |
50 |
| Field | Type | Default | Description |
|---|---|---|---|
| vlanID | int |
||
| name | string |
| Field | Type | Default | Description |
|---|---|---|---|
| openIDProviderSSHKeyPair | SSHKeyPairConfig |
| Field | Type | Default | Description |
|---|---|---|---|
| size | int |
220 | ZFS pool size (in GB), on each node in the corresponding node-group. Must be >= 200 GB : reserving 100 GB for container images, 50 GB for pod logs and 50 GB for pod ephemeral volumes. On top of that, if you want x GB of node-local storage for your workloads (like Redis), the ZFS pool size will be (200 + 2x) GB, keeping in mind that RAIDZ-1 is enabled. |