Documentation
¶
Index ¶
- Variables
- func ControlPlaneInHCloud() bool
- func ControlPlaneInHetznerBareMetal() bool
- func GetGeneralConfigFilePath() string
- func GetSecretsConfigFilePath() string
- func UsingHCloud() bool
- func UsingHetznerBareMetal() bool
- type AADApplication
- type AMIConfig
- type APIServerConfig
- type AWSAutoScalableNodeGroup
- type AWSConfig
- type AWSControlPlane
- type AWSCredentials
- type ArgoCDConfig
- type AutoScalableNodeGroup
- type AzureAutoScalableNodeGroup
- type AzureConfig
- type AzureControlPlane
- type AzureCredentials
- type BareMetalConfig
- type BareMetalControlPlane
- type BareMetalControlPlaneEndpoint
- type BareMetalHost
- type BareMetalNodeGroup
- type BareMetalSSHConfig
- type CanonicalUbuntuImage
- type CloudConfig
- type ClusterConfig
- type DeployKeysConfig
- type DisasterRecoveryConfig
- type FileConfig
- type ForksConfig
- type GeneralConfig
- type GitConfig
- type HCloudAutoScalableNodeGroup
- type HCloudControlPlane
- type HCloudControlPlaneLoadBalancer
- type HCloudVPNClusterConfig
- type HetznerBareMetalConfig
- type HetznerBareMetalControlPlane
- type HetznerBareMetalControlPlaneEndpoint
- type HetznerBareMetalHost
- type HetznerBareMetalNodeGroup
- type HetznerBareMetalSSHKeyPair
- type HetznerConfig
- type HetznerControlPlane
- type HetznerCredentials
- type HetznerHCloudConfig
- type HetznerNodeGroups
- type HetznerRobotCredentials
- type HostPathMountConfig
- type InstallImageConfig
- type KubeAidForkConfig
- type KubePrometheusConfig
- type KubeaidConfigForkConfig
- type LocalConfig
- type NodeGroup
- type ObmondoConfig
- type ReleaseDetails
- type SSHKeyPairConfig
- type SSHPrivateKeyConfig
- type SecretsConfig
- type UserConfig
- type VG0Config
- type VSwitchConfig
- type WorkloadIdentity
- type ZFSConfig
Constants ¶
This section is empty.
Variables ¶
var ( GeneralConfigFileContents []byte ParsedGeneralConfig = &GeneralConfig{} ParsedSecretsConfig = &SecretsConfig{} )
Functions ¶
func ControlPlaneInHCloud ¶ added in v0.15.0
func ControlPlaneInHCloud() bool
Returns whether the control-plane is in HCloud.
func ControlPlaneInHetznerBareMetal ¶ added in v0.15.0
func ControlPlaneInHetznerBareMetal() bool
Returns whether the control-plane is in Hetzner Bare Metal.
func GetGeneralConfigFilePath ¶ added in v0.14.0
func GetGeneralConfigFilePath() string
func GetSecretsConfigFilePath ¶ added in v0.14.0
func GetSecretsConfigFilePath() string
func UsingHetznerBareMetal ¶ added in v0.15.0
func UsingHetznerBareMetal() bool
Returns whether we're using Hetzner Bare Metal.
Types ¶
type AADApplication ¶
type AADApplication struct {
PrincipalID string `yaml:"principalID" validate:"notblank"`
}
Azure specific.
type APIServerConfig ¶
type APIServerConfig struct {
ExtraArgs map[string]string `yaml:"extraArgs" default:"{}"`
ExtraVolumes []HostPathMountConfig `yaml:"extraVolumes" default:"[]"`
Files []FileConfig `yaml:"files" default:"[]"`
}
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!
type AWSAutoScalableNodeGroup ¶ added in v0.12.0
type AWSAutoScalableNodeGroup struct {
AutoScalableNodeGroup `yaml:",inline"`
AMI AMIConfig `yaml:"ami" validate:"required"`
InstanceType string `yaml:"instanceType" validate:"notblank"`
RootVolumeSize uint32 `yaml:"rootVolumeSize" validate:"required"`
SSHKeyName string `yaml:"sshKeyName" validate:"notblank"`
}
AWS specific.
type AWSConfig ¶
type AWSConfig struct {
Region string `yaml:"region" validate:"notblank"`
SSHKeyName string `yaml:"sshKeyName" validate:"notblank"`
VPCID *string `yaml:"vpcID"`
BastionEnabled bool `yaml:"bastionEnabled" default:"True"`
ControlPlane AWSControlPlane `yaml:"controlPlane" validate:"required"`
NodeGroups []AWSAutoScalableNodeGroup `yaml:"nodeGroups"`
}
AWS specific.
type AWSControlPlane ¶
type AWSControlPlane struct {
LoadBalancerScheme string `yaml:"loadBalancerScheme" default:"internet-facing" validate:"notblank"`
Replicas uint32 `yaml:"replicas" validate:"required"`
InstanceType string `yaml:"instanceType" validate:"notblank"`
AMI AMIConfig `yaml:"ami" validate:"required"`
}
AWS specific.
type AWSCredentials ¶
type ArgoCDConfig ¶ added in v0.15.2
type ArgoCDConfig struct {
DeployKeys DeployKeysConfig `yaml:"deployKeys" validate:"required"`
}
type AutoScalableNodeGroup ¶ added in v0.12.0
type AutoScalableNodeGroup struct {
NodeGroup `yaml:",inline"`
CPU uint32 `validate:"required"`
Memory uint32 `validate:"required"`
// Minimum number of replicas in the nodegroup.
MinSize uint `yaml:"minSize" validate:"required"`
// Maximum number of replicas in the nodegroup.
Maxsize uint `yaml:"maxSize" validate:"required"`
}
type AzureAutoScalableNodeGroup ¶ added in v0.12.0
type AzureAutoScalableNodeGroup struct {
AutoScalableNodeGroup `yaml:",inline"`
VMSize string `yaml:"vmSize" validate:"notblank"`
DiskSizeGB uint32 `yaml:"diskSizeGB" validate:"required"`
}
Azure specific.
type AzureConfig ¶
type AzureConfig struct {
TenantID string `yaml:"tenantID" validate:"notblank"`
SubscriptionID string `yaml:"subscriptionID" validate:"notblank"`
AADApplication AADApplication `yaml:"aadApplication" validate:"required"`
Location string `yaml:"location" validate:"notblank"`
StorageAccount string `yaml:"storageAccount" validate:"notblank"`
WorkloadIdentity WorkloadIdentity `yaml:"workloadIdentity" validate:"required"`
SSHPublicKey string `yaml:"sshPublicKey" validate:"notblank"`
CanonicalUbuntuImage CanonicalUbuntuImage `yaml:"canonicalUbuntuImage" validate:"required"`
ControlPlane AzureControlPlane `yaml:"controlPlane" validate:"required"`
NodeGroups []AzureAutoScalableNodeGroup `yaml:"nodeGroups"`
}
Azure specific.
type AzureControlPlane ¶
type AzureControlPlane struct {
LoadBalancerType string `yaml:"loadBalancerType" validate:"notblank" default:"Public"`
DiskSizeGB uint32 `yaml:"diskSizeGB" validate:"required,gt=100"`
VMSize string `yaml:"vmSize" validate:"notblank"`
Replicas uint32 `yaml:"replicas" validate:"required,gt=0"`
}
Azure specific.
type AzureCredentials ¶ added in v0.7.2
type BareMetalConfig ¶ added in v0.12.0
type BareMetalConfig struct {
SSH BareMetalSSHConfig `yaml:"ssh"`
ControlPlane BareMetalControlPlane `yaml:"controlPlane" validate:"required"`
NodeGroups []BareMetalNodeGroup `yaml:"nodeGroups"`
}
Bare Metal specific.
type BareMetalControlPlane ¶ added in v0.12.0
type BareMetalControlPlane struct {
Endpoint BareMetalControlPlaneEndpoint `yaml:"endpoint" validate:"required"`
Hosts []*BareMetalHost `yaml:"hosts" validate:"required"`
}
Bare Metal specific.
type BareMetalControlPlaneEndpoint ¶ added in v0.12.0
type BareMetalControlPlaneEndpoint struct {
Host string `yaml:"host" validate:"notblank"`
Port uint `yaml:"port" validate:"required" default:"6443"`
}
Bare Metal specific.
type BareMetalHost ¶ added in v0.12.0
type BareMetalHost struct {
PublicAddress *string `yaml:"publicAddress" validate:"notblank"`
PrivateAddress *string `yaml:"privateAddress" validate:"notblank"`
SSH *BareMetalSSHConfig `yaml:"ssh"`
}
Bare Metal specific.
type BareMetalNodeGroup ¶ added in v0.12.0
type BareMetalNodeGroup struct {
NodeGroup `yaml:",inline"`
Hosts []*BareMetalHost `yaml:"hosts" validate:"required"`
}
Bare Metal specific.
type BareMetalSSHConfig ¶ added in v0.12.0
type BareMetalSSHConfig struct {
Port uint `yaml:"port" validate:"required" default:"22"`
PrivateKey *SSHPrivateKeyConfig `yaml:"privateKey"`
}
Bare Metal specific.
type CanonicalUbuntuImage ¶ added in v0.12.2
type CanonicalUbuntuImage struct {
Offer string `yaml:"offer" validate:"notblank"`
SKU string `yaml:"sku" validate:"notblank"`
}
Azure specific.
type CloudConfig ¶
type CloudConfig struct {
AWS *AWSConfig `yaml:"aws"`
Azure *AzureConfig `yaml:"azure"`
Hetzner *HetznerConfig `yaml:"hetzner"`
BareMetal *BareMetalConfig `yaml:"bare-metal"`
Local *LocalConfig `yaml:"local"`
DisasterRecovery *DisasterRecoveryConfig `yaml:"disasterRecovery"`
}
type ClusterConfig ¶
type ClusterConfig struct {
Type string `yaml:"type" validate:"notblank,oneof=vpn workload" default:"workload"`
// 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.
Name string `yaml:"name" validate:"notblank"`
// Kubernetes version (>= 1.30.0).
K8sVersion string `yaml:"k8sVersion" validate:"notblank"`
// 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.
EnableAuditLogging bool `yaml:"enableAuditLogging" default:"True"`
// Configuration options for the Kubernetes API server.
APIServer APIServerConfig `yaml:"apiServer"`
// 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.
AdditionalUsers []UserConfig `yaml:"additionalUsers"`
// ArgoCD specific details.
ArgoCD ArgoCDConfig `yaml:"argoCD" validate:"required"`
}
type DeployKeysConfig ¶ added in v0.19.0
type DeployKeysConfig struct {
KubeaidConfig SSHPrivateKeyConfig `yaml:"kubeaidConfig" validate:"required"`
Kubeaid *SSHPrivateKeyConfig `yaml:"kubeaid"`
}
type DisasterRecoveryConfig ¶ added in v0.9.0
type FileConfig ¶
type FileConfig struct {
Path string `yaml:"path" validate:"notblank"`
Content string `yaml:"content" validate:"notblank"`
}
REFER : "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1".File.
type ForksConfig ¶
type ForksConfig struct {
// KubeAid repository specific details.
KubeaidFork KubeAidForkConfig `yaml:"kubeaid" validate:"required"`
// KubeAid Config repository specific details.
KubeaidConfigFork KubeaidConfigForkConfig `yaml:"kubeaidConfig" validate:"required"`
}
KubeAid and KubeAid Config repository specific details. We require the KubeAid and KubeAid Config repositories to be hosted in the same Git server.
type GeneralConfig ¶ added in v0.7.2
type GeneralConfig struct {
// Git server specific details.
Git GitConfig `yaml:"git"`
// KubeAid and KubeAid Config repository specific details.
// The KubeAid and KubeAid Config repositories must be hosted in the same Git server.
Forks ForksConfig `yaml:"forkURLs" validate:"required"`
// Kubernetes specific details.
Cluster ClusterConfig `yaml:"cluster" validate:"required"`
// Cloud provider specific details.
Cloud CloudConfig `yaml:"cloud" validate:"required"`
// Kube Prometheus installation specific details. Defaults to Latest
// Fill this only if you want a specific version
KubePrometheus KubePrometheusConfig `yaml:"kubePrometheus"`
// Obmondo customer specific details.
Obmondo *ObmondoConfig `yaml:"obmondo"`
}
Non secret configuration options.
type GitConfig ¶
type GitConfig struct {
CABundlePath string `yaml:"caBundlePath"`
CABundle []byte
// SSH username.
SSHUsername string `yaml:"sshUsername" validate:"notblank" default:"git"`
// Either make KubeAid CLI use the given SSH private key.
*SSHPrivateKeyConfig `yaml:",inline"`
// Or, make KubeAid CLI use the SSH Agent.
// So, you (the one who runs KubeAid CLI) can use your YubiKey.
UseSSHAgent bool `yaml:"useSSHAgent"`
// Additional SSH known host entries.
// Merged with the bundled known hosts for
// GitHub, GitLab, Bitbucket and Azure DevOps.
KnownHosts []string `yaml:"knownHosts"`
}
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.
type HCloudAutoScalableNodeGroup ¶ added in v0.12.0
type HCloudAutoScalableNodeGroup struct {
AutoScalableNodeGroup `yaml:",inline"`
// HCloud machine type.
// You can browse all available HCloud machine types here : https://hetzner.com/cloud.
MachineType string `yaml:"machineType" validate:"notblank"`
// The root volume size for each HCloud machine.
RootVolumeSize uint32 `validate:"required"`
}
Details about (autoscalable) node-groups in HCloud.
type HCloudControlPlane ¶
type HCloudControlPlane struct {
MachineType string `yaml:"machineType" validate:"notblank"`
Replicas uint `yaml:"replicas" validate:"notblank"`
LoadBalancer HCloudControlPlaneLoadBalancer `yaml:"loadBalancer" validate:"required"`
}
Hetzner specific.
type HCloudControlPlaneLoadBalancer ¶ added in v0.11.0
type HCloudControlPlaneLoadBalancer struct {
Enabled bool `yaml:"enabled" validate:"required"`
Region string `yaml:"region" validate:"notblank"`
}
Hetzner specific.
type HCloudVPNClusterConfig ¶ added in v0.20.0
type HCloudVPNClusterConfig struct {
Name string `yaml:"name" validate:"notblank"`
}
Hetzner specific.
type HetznerBareMetalConfig ¶ added in v0.12.0
type HetznerBareMetalConfig struct {
WipeDisks bool `yaml:"wipeDisks" default:"false"`
InstallImage InstallImageConfig `yaml:"installImage"`
SSHKeyPair HetznerBareMetalSSHKeyPair `yaml:"sshKeyPair" validate:"required"`
}
Hetzner specific.
type HetznerBareMetalControlPlane ¶
type HetznerBareMetalControlPlane struct {
Endpoint HetznerBareMetalControlPlaneEndpoint `yaml:"endpoint" validate:"required"`
BareMetalHosts []*HetznerBareMetalHost `yaml:"bareMetalHosts" validate:"required,gt=0"`
// 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.
ZFS ZFSConfig `yaml:"zfs" validate:"required"`
StoragePlan storageplan.StoragePlan
}
Hetzner specific.
type HetznerBareMetalControlPlaneEndpoint ¶ added in v0.12.0
type HetznerBareMetalControlPlaneEndpoint struct {
IsFailoverIP bool `yaml:"isFailoverIP"`
Host string `yaml:"host" validate:"ip"`
}
Hetzner specific.
type HetznerBareMetalHost ¶ added in v0.12.0
type HetznerBareMetalHost struct {
ServerID string `yaml:"serverID" validate:"notblank"`
WWNs []string
}
Hetzner specific.
type HetznerBareMetalNodeGroup ¶
type HetznerBareMetalNodeGroup struct {
NodeGroup `yaml:",inline"`
BareMetalHosts []*HetznerBareMetalHost `yaml:"bareMetalHosts" validate:"required,gt=0"`
// 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.
ZFS ZFSConfig `yaml:"zfs" validate:"required"`
StoragePlan storageplan.StoragePlan
}
Hetzner specific.
type HetznerBareMetalSSHKeyPair ¶ added in v0.12.0
type HetznerBareMetalSSHKeyPair struct {
Name string `yaml:"name" validate:"notblank"`
SSHKeyPairConfig ` yaml:",inline"`
}
Hetzner specific.
type HetznerConfig ¶
type HetznerConfig struct {
/*
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.
*/
Mode string `yaml:"mode" default:"hcloud" validate:"notblank,oneof=bare-metal hcloud hybrid"`
VSwitch *VSwitchConfig `yaml:"vswitch"`
HCloud *HetznerHCloudConfig `yaml:"hcloud"`
BareMetal *HetznerBareMetalConfig `yaml:"bareMetal"`
ControlPlane HetznerControlPlane `yaml:"controlPlane" validate:"required"`
// Details about node-groups in Hetzner.
NodeGroups HetznerNodeGroups `yaml:"nodeGroups"`
VPNCluster *HCloudVPNClusterConfig `yaml:"vpnCluster"`
}
Hetzner specific.
type HetznerControlPlane ¶ added in v0.11.0
type HetznerControlPlane struct {
HCloud *HCloudControlPlane `yaml:"hcloud"`
BareMetal *HetznerBareMetalControlPlane `yaml:"bareMetal"`
Regions []string `yaml:"regions" validate:"required"`
}
Hetzner specific.
type HetznerCredentials ¶
type HetznerCredentials struct {
APIToken string `yaml:"apiToken" validate:"notblank"`
Robot *HetznerRobotCredentials `yaml:"robot"`
}
type HetznerHCloudConfig ¶ added in v0.12.0
type HetznerHCloudConfig struct {
Zone string `yaml:"zone" validate:"notblank"`
ImageName string `yaml:"imageName" validate:"notblank" default:"ubuntu-24.04"`
SSHKeyPairName string `yaml:"sshKeyPairName" validate:"notblank"`
}
Hetzner specific.
type HetznerNodeGroups ¶ added in v0.11.0
type HetznerNodeGroups struct {
// Details about node-groups in HCloud.
HCloud []HCloudAutoScalableNodeGroup `yaml:"hcloud"`
// Details about node-groups in Hetzner Bare Metal.
BareMetal []*HetznerBareMetalNodeGroup `yaml:"bareMetal"`
}
Details about node-groups in Hetzner.
type HetznerRobotCredentials ¶ added in v0.12.0
type HostPathMountConfig ¶
type HostPathMountConfig struct {
Name string `yaml:"name" validate:"notblank"`
HostPath string `yaml:"hostPath" validate:"notblank"`
MountPath string `yaml:"mountPath" validate:"notblank"`
PathType coreV1.HostPathType `yaml:"pathType" validate:"required"`
// Whether the mount should be read-only.
ReadOnly bool `yaml:"readOnly" default:"true"`
}
REFER : "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1".HostPathMount
type InstallImageConfig ¶ added in v0.17.0
type InstallImageConfig struct {
ImagePath string `yaml:"imagePath" default:"/root/.oldroot/nfs/images/Ubuntu-2404-noble-amd64-base.tar.gz" validate:"notblank"`
VG0 VG0Config `yaml:"vg0"`
}
Hetzner specific.
type KubeAidForkConfig ¶ added in v0.17.0
type KubeAidForkConfig struct {
// KubeAid repository SSH URL.
URL string `yaml:"url" validate:"required"`
ParsedURL gogiturl.IGitURL
// KubeAid tag.
Version string `yaml:"version" validate:"notblank"`
}
KubeAid repository specific details.
type KubePrometheusConfig ¶ added in v0.12.0
type KubeaidConfigForkConfig ¶ added in v0.17.0
type KubeaidConfigForkConfig struct {
// KubeAid Config repository SSH URL.
URL string `yaml:"url" validate:"required"`
ParsedURL gogiturl.IGitURL
// 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'.
Directory string `yaml:"directory"`
}
KubeAid Config repository specific details.
type NodeGroup ¶
type NodeGroup struct {
// Nodegroup name.
Name string `yaml:"name" validate:"notblank"`
// 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.
Labels map[string]string `yaml:"labels" default:"[]"`
// Taints that you want to be propagated to each node in the nodegroup.
Taints []*coreV1.Taint `yaml:"taints" default:"[]"`
}
type ObmondoConfig ¶ added in v0.12.0
type ReleaseDetails ¶ added in v0.14.0
type ReleaseDetails struct {
TagName string `json:"tag_name"`
}
type SSHKeyPairConfig ¶
type SSHKeyPairConfig struct {
SSHPrivateKeyConfig `yaml:",inline"`
PublicKeyFilePath string `yaml:"publicKeyFilePath" validate:"notblank"`
PublicKey string ` validate:"notblank"`
}
type SSHPrivateKeyConfig ¶ added in v0.12.0
type SecretsConfig ¶ added in v0.7.2
type SecretsConfig struct {
AWS *AWSCredentials `yaml:"aws"`
Azure *AzureCredentials `yaml:"azure"`
Hetzner *HetznerCredentials `yaml:"hetzner"`
}
type UserConfig ¶
type VG0Config ¶ added in v0.16.0
type VG0Config struct {
Size int `yaml:"size" validate:"notblank" default:"80"`
RootVolumeSize int `yaml:"rootVolumeSize" validate:"notblank" default:"50"`
}
Hetzner specific.
type VSwitchConfig ¶ added in v0.16.0
type VSwitchConfig struct {
VLANID int `yaml:"vlanID"`
Name string `yaml:"name" validate:"notblank"`
}
Hetzner specific.
type WorkloadIdentity ¶
type WorkloadIdentity struct {
OpenIDProviderSSHKeyPair SSHKeyPairConfig `yaml:"openIDProviderSSHKeyPair" validate:"notblank"`
}
Azure specific.
type ZFSConfig ¶ added in v0.20.0
type ZFSConfig struct {
// 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.
Size int `yaml:"size" validate:"required,gt=200" default:"220"`
}
Hetzner specific.