Tags: azure, cost


Overview


By default Kublr creates all master and worker instance groups using regular Azure on-demand instances.


At the same time, Azure allow using and Kublr allows customizing the instance group configuration to implement extended use-cases such as using less expensive spot instances.


Virtual Machine Scale Set groups configuration


The following cluster specification snippet shows an example of such customization with both master and worker node groups of VirtualMachineScaleSet type using spot instances.


spec:
  master:
    ...
    locations:
      - locationRef: azure1
        azure:
          groupType: VirtualMachineScaleSet
          ...
          armTemplateExtras:
            scaleSet:
              apiVersion: '2021-07-01'
              properties:
                singlePlacementGroup: false
                virtualMachineProfile:
                  priority: Spot
                  evictionPolicy: Delete
                  billingProfile:
                    maxPrice: -1
                spotRestorePolicy:
                  enabled: true
                  restoreTimeout: P2D
  nodes:
    - name: group1
      ...
      locations:
        - locationRef: azure1
          azure:
            groupType: VirtualMachineScaleSet
            ...
            armTemplateExtras:
              scaleSet:
                apiVersion: '2021-07-01'
                properties:
                  singlePlacementGroup: false
                  virtualMachineProfile:
                    priority: Spot
                    evictionPolicy: Delete
                    billingProfile:
                      maxPrice: -1
                  spotRestorePolicy:
                    enabled: true
                    restoreTimeout: P2D


Virtual Machine groups configuration


For all other (non-VirtualMachineScaleSet) group types - namely VirtualMachine, AvailabilitySet, and AvailabilitySetLegacy - the group customization should be as follows:


spec:
  master:
    ...
    locations:
      - locationRef: azure1
        azure:
          groupType: VirtualMachine
          ...
          armTemplateExtras:
            virtualMachine:
              apiVersion: '2021-07-01'
              properties:
                priority: Spot
                evictionPolicy: Deallocate
                billingProfile:
                  maxPrice: -1
  nodes:
    - name: group1
      ...
      locations:
        - locationRef: azure1
          azure:
            groupType: AvailabilitySet
            ...
            armTemplateExtras:
              virtualMachine:
                apiVersion: '2021-07-01'
                properties:
                  priority: Spot
                  evictionPolicy: Deallocate
                  billingProfile:
                    maxPrice: -1