Skip to content

Cluster API - Bootstrap provider#

k0smotron serves as a Cluster API Bootstrap provider. Given that k0smotron runs the cluster control plane within the management cluster, the Bootstrap provider currently concentrates on worker node bootstrapping.

Just like with any other Cluster API provider, you have the flexibility to create either a Machine or MachineDeployment object. While MachineDeployment objects are scalable, certain use-cases necessitate the use of Machine.

Machines#

To configure the machine, you first need to create a Machine object with a reference to a bootstrap provider and configuration for the bootstrapping K0sWorkerConfig:

apiVersion: cluster.x-k8s.io/v1beta1
kind: Machine
metadata:
  name: machine-test-0
  namespace: default
spec:
  clusterName: cp-test
  bootstrap:
    configRef: # This triggers our controller to create cloud-init secret
      apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
      kind: K0sWorkerConfig
      name: machine-test-config
  infrastructureRef: # This references the infrastructure provider machine object
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: AWSMachine
    name: machine-test-0
---
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: K0sWorkerConfig
metadata:
  name: machine-test-config
  namespace: default
spec:
  version: v1.27.2+k0s.0
  # Details of the worker configuration can be set here

This configuration sets up a Machine object that will trigger the k0smotron controller to create a cloud-init secret and prepare the machine for bootstrapping. Note that the specific parameters in the K0sWorkerConfig spec will depend on your worker node configuration requirements.

For reference on what can be configured via K0sWorkerConfig see the reference docs.

The infrastructureRef in the Machine object specifies a reference to the provider-specific infrastructure required for the operation of the machine. In the above example, the kind AWSMachine indicates that the machine will be run on AWS. The parameters within infrastructureRef will be provider-specific and vary based on your chosen infrastructure.

apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSMachine
metadata:
  name: machine-test-0
  namespace: default
spec:
  # More details about the aws machine can be set here

MachineDeployments#

To leverage k0smotron as a Bootstrap provider for MachineDeployment utilize the K0sWorkerConfigTemplate type:

apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
  name: md-test
  namespace: default
spec:
  replicas: 2
  clusterName: cp-test
  selector:
    matchLabels:
      cluster.x-k8s.io/cluster-name: cp-test
      pool: worker-pool-1
  template:
    metadata:
      labels:
        cluster.x-k8s.io/cluster-name: cp-test
        pool: worker-pool-1
    spec:
      clusterName: cp-test
      bootstrap:
        configRef:
          apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
          kind: K0sWorkerConfigTemplate
          name: md-test-config
      infrastructureRef:
        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
        kind: AWSMachineTemplate
        name: mt-test
---
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: K0sWorkerConfigTemplate
metadata:
  name: md-test-config
  namespace: default
spec:
  template:
    spec:
      version: v1.27.2+k0s.0
      # More details of the worker configuration can be set here

The MachineDeployment configuration must be associated with the appropriate infrastructure provider's machine template type. In this example, AWS is used as the infrastructure provider, hence a AWSMachineTemplate is utilized:

apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSMachineTemplate
metadata:
  name: mt-test
  namespace: default
spec:
  template:
    spec:
    # More details about the aws machine template can be set here

This example creates a MachineDeployment with 2 replicas, using k0smotron as the bootstrap provider. The infrastructureRef is used to specify the infrastructure requirements for the machines, in this case, AWS.

Check the examples pages for more detailed examples how k0smotron can be used with various Cluster API infrastructure providers.