Experimental version. The functionality may undergo significant changes. Compatibility with future versions is not guaranteed.

If the cluster control plane is hosted on a virtual machines or bare-metal servers, the cloud provider uses the settings from the cloud-provider-vcd module in the Deckhouse configuration. Otherwise, if the cluster control plane is hosted in a cloud, the cloud provider uses the VCDClusterConfiguration structure for configuration.

VCDClusterConfiguration

Version: deckhouse.io/v1

Describes the configuration of a cloud cluster in VCD.

Used by the cloud provider if a cluster’s control plane is hosted in the cloud.

Run the following command to change the configuration in a running cluster:

d8 p edit provider-cluster-configuration

After updating the node parameters, you need to run the dhctl converge command to apply the changes.

Example:

apiVersion: deckhouse.io/v1
kind: VCDClusterConfiguration
sshPublicKey: "<SSH_PUBLIC_KEY>"
organization: My_Org
virtualDataCenter: My_Org
virtualApplicationName: Cloud
mainNetwork: internal
layout: Standard
internalNetworkCIDR: 172.16.2.0/24
masterNodeGroup:
  replicas: 1
  instanceClass:
    template: Templates/ubuntu-focal-20.04
    sizingPolicy: 4cpu8ram
    rootDiskSizeGb: 20
    etcdDiskSizeGb: 20
    storageProfile: nvme
nodeGroups:
- name: worker
  replicas: 1
  instanceClass:
    template: Org/Templates/ubuntu-focal-20.04
    sizingPolicy: 16cpu32ram
    storageProfile: ssd
provider:
  server: "<SERVER>"
  username: "<USERNAME>"
  password: "<PASSWORD>"
  insecure: true
  • apiVersion
    string

    Required value

    Allowed values: deckhouse.io/v1

  • bastion
    object

    Parameters for the bastion host, which is used to access the cluster’s nodes.

    • bastion.instanceClass
      object

      Required value

      Partial contents of the fields of the VCDInstanceClass.

      • bastion.instanceClass.mainNetworkIPAddress
        string

        The IP address of the bastion host in the mainNetwork. If not set, the DHCP client will be enabled.

        Pattern: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

      • bastion.instanceClass.placementPolicy
        string

        Placement policy to be used on this machine.

        If no placement policy is specified, the default placement policy will be used to create the bastion host.

        Length: 1..128

      • bastion.instanceClass.rootDiskSizeGb
        integer

        Root disk size in gigabytes.

        Default: 50

        Allowed values: 0 <= X

        Example:

        rootDiskSizeGb: 50
        
      • bastion.instanceClass.sizingPolicy
        string

        Required value

        Sizing policy to be used on this machine.

        If no sizing policy is specified, the default sizing policy will be used to create the bastion host.

        Length: 1..128

      • bastion.instanceClass.storageProfile
        string

        Required value

        Storage profile to be used on this machine.

        Length: 1..128

      • bastion.instanceClass.template

        Required value

        Path of the template OVA that is to be used.

        Consists of organization (optional), catalog, template name or template identifier. Organization may not match provider.organization (in case of shared templates).

        If you have templates with the same name in multiple catalogs with the same name, you should specify the identifier of the template.

        You can find the template identifier in the URL when you open the template in the VCD UI. For example, if the URL is https://vcd.example.com/tenant/MyOrg/libraries/catalogs/1032506a-4555-43e1-8589-77b0c0522c75/catalog-vapp-templates/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7/general, then the template identifier is 5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7.

        Length: 1..128

  • createDefaultFirewallRules
    boolean

    If enabled, configures the following default firewall rules for the cluster’s main network (mainNetwork):

    • Allows all outgoing connections from mainNetwork.
    • Allows all incoming ICMP packets to mainNetwork.
    • Allows all incoming TCP connections to mainNetwork on port 22 (SSH).
    • Allows all incoming TCP and UDP connections to mainNetwork for NodePorts in the range 30000–32767.

    Attention! Using this option together with an Edge Gateway of type NSX-T implies that only one cluster should be deployed per Edge Gateway, because in this case all existing firewall rules will be overwritten.

    Default: false

  • edgeGateway
    object

    VMware Cloud Director Edge Gateway parameters (belongs to Virtual Data Center).

    • edgeGateway.NSX-V
      object

      Additional parameters required if type is NSX-V.

      • edgeGateway.NSX-V.externalNetworkName
        string

        External network name for build DNAT rule for master node. The external network is the one connected to the Edge Gateway in Gateway Interface and has an external IP address.

        Length: 1..128

      • edgeGateway.NSX-V.externalNetworkType
        string

        External network type for build DNAT rule for master node (one of “org” or “ext”).

        Allowed values: org, ext

    • edgeGateway.externalIP
      string

      Required value

      The IP address accessible from external networks through which incoming SSH connections are forwarded to the master node using DNAT.

      Pattern: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

    • edgeGateway.externalPort
      integer

      The external port mapped by the DNAT rule to forward incoming SSH connections to the master node.

      Default: 22

      Allowed values: 1 <= X <= 65535

      Example:

      externalPort: 22
      
    • edgeGateway.name
      string

      Required value

      VMware Cloud Director Edge Gateway name.

      Length: 1..128

    • edgeGateway.type
      string

      Required value

      Network virtualization platform type providing the VMware Cloud Director Edge Gateway (one of “NSX-V” or “NSX-T”). The type can be obtained from your administrator.

      Allowed values: NSX-V, NSX-T

  • internalNetworkCIDR
    string

    Subnet for master nodes in the internal network.

    Pattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$

  • internalNetworkDHCPPoolStartAddress
    integer

    Specifies the starting address number in the internal network from which the DHCP address pool will begin. Addresses below this number will not be assigned automatically by DHCP and are available for manual allocation. If not set, the default start address is 30.

    For example, in a network 192.168.100.128/27, a value of 10 means the DHCP pool will start with the IP address 192.168.100.138. The pool will end at the address immediately before the broadcast address (192.168.100.159), i.e., the last assignable host address.

    Allowed values: 2 <= X

  • internalNetworkDNSServers
    array of strings

    A list of addresses of the recursive DNSs servers.

    • Element of the array
      string

      Pattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

  • kind
    string

    Required value

    Allowed values: VCDClusterConfiguration

  • layout
    string

    Required value

    The way resources are located in the cloud.

    Read more about possible provider layouts.

  • legacyMode
    boolean

    Support for outdated versions of the VCD API.

    If set to true, the API version below 37.2 will be used.

    The parameter has an effect only when installing a cluster. In the working cluster, the need to enable the support for outdated versions of the VCD API is determined automatically.

    Default: false

  • mainNetwork
    string

    Required value

    Path to the network that VirtualMachines’ primary NICs will connect to (default gateway).

    Example:

    mainNetwork: internal
    
  • masterNodeGroup
    object

    Required value

    The definition of the master’s NodeGroup.

    For the changes to take effect, run dhctl converge after modifying the parameters of the masterNodeGroup section.

    • masterNodeGroup.instanceClass
      object

      Required value

      Partial contents of the fields of the VCDInstanceClass.

      • masterNodeGroup.instanceClass.etcdDiskSizeGb
        integer

        Etcd disk size in gigabytes.

        Default: 10

        Example:

        etcdDiskSizeGb: 10
        
      • masterNodeGroup.instanceClass.mainNetworkIPAddresses
        array of strings

        A list of static IP addresses (with a CIDR prefix) sequentially allocated to nodes in the mainNetwork.

        By default, the DHCP client is enabled.

        Example:

        mainNetworkIPAddresses:
        - 10.1.14.20
        - 10.1.4.21
        
        • Element of the array
          string

          An IP address with a CIDR prefix.

          Pattern: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

      • masterNodeGroup.instanceClass.placementPolicy
        string

        PlacementPolicy is the placement policy to be used on this machine.

        If no placement policy is specified, default placement policy will be used to create the nodes.

        Example:

        placementPolicy: Hypervisor1
        
      • masterNodeGroup.instanceClass.rootDiskSizeGb
        integer

        Root disk size in gigabytes.

        Default: 50

        Example:

        rootDiskSizeGb: 50
        
      • masterNodeGroup.instanceClass.sizingPolicy
        string

        Required value

        SizingPolicy is the sizing policy to be used on this machine.

        If no sizing policy is specified, default sizing policy will be used to create the nodes.

        Example:

        sizingPolicy: 4Cpu8Memory
        
      • masterNodeGroup.instanceClass.storageProfile
        string

        Required value

        StorageProfile is the storage profile to be used on this machine.

        Example:

        storageProfile: ssd
        
      • masterNodeGroup.instanceClass.template
        string

        Required value

        Path of the template OVA that is to be used.

        Consists of organization (optional), catalog, template name or template identifier. Organization may not match provider.organization (in case of shared templates).

        If you have templates with the same name in multiple catalogs with the same name, you should specify the identifier of the template.

        You can find the template identifier in the URL when you open the template in the VCD UI. For example, if the URL is https://vcd.example.com/tenant/MyOrg/libraries/catalogs/1032506a-4555-43e1-8589-77b0c0522c75/catalog-vapp-templates/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7/general, then the template identifier is 5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7.

        Examples:

        template: Linux/ubuntu2204-cloud-ova
        
        template: MyOrg/Linux/ubuntu2204-cloud-ova
        
        template: Linux/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7
        
        template: MyOrg/Linux/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7
        
    • masterNodeGroup.replicas
      integer

      Required value

      The number of master nodes to create. It is important to have an odd number of masters to ensure a quorum.

      Allowed values: 1 <= X

  • nodeGroups
    array of objects

    An array of additional NodeGroups for creating static nodes (e.g., for dedicated front nodes or gateways).

    • nodeGroups.instanceClass
      object

      Required value

      Partial contents of the fields of the VCDInstanceClass.

      • nodeGroups.instanceClass.mainNetworkIPAddresses
        array of strings

        A list of static IP addresses (with a CIDR prefix) sequentially allocated to nodes in the mainNetwork.

        By default, the DHCP client is enabled.

        Example:

        mainNetworkIPAddresses:
        - 10.1.14.20
        - 10.1.4.21
        
        • Element of the array
          string

          An IP address with a CIDR prefix.

          Pattern: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

      • nodeGroups.instanceClass.placementPolicy
        string

        PlacementPolicy is the placement policy to be used on this machine.

        If no placement policy is specified, default placement policy will be used to create the nodes.

        Example:

        placementPolicy: Hypervisor1
        
      • nodeGroups.instanceClass.rootDiskSizeGb
        integer

        Root disk size in gigabytes.

        Default: 50

        Example:

        rootDiskSizeGb: 50
        
      • nodeGroups.instanceClass.sizingPolicy
        string

        Required value

        SizingPolicy is the sizing policy to be used on this machine.

        If no sizing policy is specified, default sizing policy will be used to create the nodes.

        Example:

        sizingPolicy: 4Cpu8Memory
        
      • nodeGroups.instanceClass.storageProfile
        string

        Required value

        StorageProfile is the storage profile to be used on this machine.

        Example:

        storageProfile: ssd
        
      • nodeGroups.instanceClass.template
        string

        Required value

        Path of the template OVA that is to be used.

        Consists of organization (optional), catalog, template name or template identifier. Organization may not match provider.organization (in case of shared templates).

        If you have templates with the same name in multiple catalogs with the same name, you should specify the identifier of the template.

        You can find the template identifier in the URL when you open the template in the VCD UI. For example, if the URL is https://vcd.example.com/tenant/MyOrg/libraries/catalogs/1032506a-4555-43e1-8589-77b0c0522c75/catalog-vapp-templates/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7/general, then the template identifier is 5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7.

        Examples:

        template: Linux/ubuntu2204-cloud-ova
        
        template: MyOrg/Linux/ubuntu2204-cloud-ova
        
        template: Linux/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7
        
        template: MyOrg/Linux/5438c9f2-7e59-4eb3-b37c-cbd7f3e710c7
        
    • nodeGroups.name
      string

      Required value

      The name of the NodeGroup to use for generating node names.

    • nodeGroups.nodeTemplate

      Parameters of Node objects in Kubernetes to add after registering the node.

      • nodeGroups.nodeTemplate.annotations
        object

        The same as the metadata.annotations standard field.

        Example:

        annotations:
          ai.fleet.com/discombobulate: 'true'
        
      • nodeGroups.nodeTemplate.labels
        object

        A list of labels to attach to cluster resources.

        The same as the metadata.labels standard field.

        Example:

        labels:
          environment: production
          app: warp-drive-ai
        
      • nodeGroups.nodeTemplate.taints
        array of objects

        The same as the .spec.taints field of the Node object.

        Available fields: effect, key, and values.

        Example:

        taints:
        - effect: NoExecute
          key: ship-class
          value: frigate
        
        • nodeGroups.nodeTemplate.taints.effect
          string

          Allowed values: NoSchedule, PreferNoSchedule, NoExecute

        • nodeGroups.nodeTemplate.taints.key
          string
        • nodeGroups.nodeTemplate.taints.value
          string
    • nodeGroups.replicas
      integer

      Required value

      The number of nodes to create.

  • organization
    string

    Required value

    VMware Cloud Director Organization name.

  • provider
    object

    Required value

    Parameters for connecting to the VCD.

    • provider.apiToken
      string

      The token for authentication.

      Caution! When using apiToken, leave username and password empty.

    • provider.insecure
      boolean

      Set to true if VCD has a self-signed certificate.

      Default: false

    • provider.password
      string

      The user’s password.

    • provider.server
      string

      Required value

      The host or the IP address of the VCD server.

    • provider.username
      string

      The login ID.

  • sshPublicKey
    string

    Required value

    A public key for accessing nodes.

  • virtualApplicationName
    string

    Required value

    VMware Cloud Director Virtual Application name (belongs to Virtual Data Center).

    Pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$

  • virtualDataCenter
    string

    Required value

    VMware Cloud Director Virtual Data Center name (belongs to Organization).