Refer to this example to provision a v1beta1 Cluster with custom settings.

v1beta1 Example: Custom Cluster Based on the Default ClusterClass

The following example YAML demonstrates how to use the v1beta1 API to provision a Cluster with several custom settings using variables. This example builds on the v1beta1 Example: Default Cluster.

The example uses variables to persitent volumes on worker nodes for high-churn components such as containerd and kubelet. In addition, vmClass variable is declared twice. The is vmClass variable declared in workers.machineDeployments overwrites the globally declared vmClass variable so that worker nodes are provisioned with a larger VM class.
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
  name: cluster-custom
  namespace: tkg-cluster-ns
spec:
  clusterNetwork:
    services:
      cidrBlocks: ["198.51.100.0/12"]
    pods:
      cidrBlocks: ["192.2.0.0/16"]
    serviceDomain: "cluster.local"
  topology:
    class: tanzukubernetescluster
    version: v1.25.7---vmware.3-fips.1-tkg.1
    controlPlane:
      replicas: 3
    workers:
      machineDeployments:
        - class: node-pool
          name: node-pool-1
          replicas: 3
          variables:
            overrides:
            - name: vmClass
              value: guaranteed-xlarge
    variables:
      - name: vmClass
        value: guaranteed-medium
      - name: storageClass
        value: tkg-storage-profile
      - name: defaultStorageClass
        value: tkg-storage-profile
      - name: nodePoolVolumes
        value:
          - name: containerd
            capacity:
              storage: 50Gi
            mountPath: /var/lib/containerd
            storageClass: tkg-storage-profile
          - name: kubelet
            capacity:
              storage: 50Gi
            mountPath: /var/lib/kubelet
            storageClass: tkg-storage-profile