OpenStackClusterConfiguration
Version: deckhouse.io/v1
Describes the configuration of a cloud cluster in OpenStack.
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 system 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: OpenStackClusterConfiguration
layout: Standard
sshPublicKey: "<SSH_PUBLIC_KEY>"
zones:
- eu-3a
standard:
  internalNetworkDNSServers:
  - 8.8.8.8
  internalNetworkCIDR: 192.168.195.0/24
  internalNetworkSecurity: false
  externalNetworkName: external-network
provider:
  authURL: "<AUTH_URL>"
  domainName: "<DOMAIN_NAME>"
  tenantID: "<TENANT_ID>"
  username: "<USERNAME>"
  password: "<PASSWORD>"
  region: eu-3
masterNodeGroup:
  replicas: 1
  instanceClass:
    rootDiskSize: 50
    flavorName: m1.large
    imageName: debian-11-genericcloud-amd64-20220911-1135
  volumeTypeMap:
    eu-3a: fast.eu-3a
nodeGroups:
- name: front
  replicas: 2
  instanceClass:
    flavorName: m1.large
    imageName: debian-11-genericcloud-amd64-20220911-1135
    rootDiskSize: 50
    configDrive: false
    floatingIPPools:
    - public
    - shared
    additionalSecurityGroups:
    - sec_group_1
    - sec_group_2
  zones:
  - eu-1a
  - eu-1b
- stringapiVersionRequired value Allowed values: deckhouse.io/v1,deckhouse.io/v1alpha1
- stringkindRequired value Allowed values: OpenStackClusterConfiguration
- stringlayoutRequired value The way resources are located in the cloud. Read more about possible provider layouts. 
- masterNodeGroupRequired value The definition of the master’s NodeGroup. For the changes to take effect, run dhctl convergeafter modifying the parameters of themasterNodeGroupsection.- objectmasterNodeGroup.instanceClassRequired value Partial contents of the fields of the OpenStackInstanceClass. - array of stringsmasterNodeGroup.instanceClass.additionalSecurityGroupsSecurity groups that will be applied to VM’s network ports. Default group should also be added to this list. They allow you to set firewall rules for provisioned instances. The SecurityGroupsmay not be supported by the cloud provider.
- objectThe additional tags to attach to the instances created (in addition to those specified in the cloud provider configuration). Example: additionalTags: project: cms-production severity: critical
- integermasterNodeGroup.instanceClass.etcdDiskSizeGbEtcd disk size in gigabytes. Default: 10Example: etcdDiskSizeGb: 10
- stringmasterNodeGroup.instanceClass.flavorNameRequired value Flavor of OpenStack servers. To get a list of all available flavors, run the command: openstack flavor list.For all non-master nodes it is advisable to use flavor’s with a local disk. If cloud provider supports local disks they are usually faster and cheaper. The disadvantage of using such flavors is the inability to migrate nodes between hypervisors. Flavor create example: openstack flavor create c4m8d50 --ram 8192 --disk 50 --vcpus 4
- stringmasterNodeGroup.instanceClass.imageNameRequired value Image to use while provisioning OpenStack servers. Use this command to get a list of available images: openstack image list.The list of OS and their versions supported by Deckhouse can be found in the documentation (take into account the Deckhouse version used). 
- integermasterNodeGroup.instanceClass.rootDiskSizeThe size of a root disk (in gigabytes). This parameter also has influence on type of volume that will be used for root disk; the “How to use rootDiskSize and when it is preferred” section describes how to use it. 
 
- integermasterNodeGroup.replicasRequired 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
- objectmasterNodeGroup.serverGroupObject groups instances together. The instances in the group are placed on the same hypervisor (affinity) or different hypervisors (anti-affinity). This allows you to increase the fault tolerance of the cluster. - objectmasterNodeGroup.serverGroup.manuallyManaged- stringmasterNodeGroup.serverGroup.manuallyManaged.idRequired value The id of the existing ServerGroupobject managed outside of Deckhouse.
 
- stringmasterNodeGroup.serverGroup.policyRequired value The policy that determines how instances are distributed among hypervisors. - AntiAffinity— instances are placed on different hypervisors. This policy is managed by Deckhouse.
- ManuallyManaged— instances are placed on different hypervisors. This policy is managed outside of Deckhouse.
 Allowed values: AntiAffinity,ManuallyManaged
 
- objectmasterNodeGroup.volumeTypeMapRequired value A dictionary of disk types for storing etcd data and Kubernetes configuration files. Format of dictionary elements: <AVAILABILITY ZONE>: <VOLUME TYPE>(see the example).If the rootDiskSizeparameter is specified, the same disk type will be used for the VM’s boot drive.We recommend using the fastest disks provided by the provider in all cases. If the value specified in replicasexceeds the number of elements in the dictionary, the master nodes whose number exceeds the length of the dictionary get the values starting from the beginning of the dictionary. For example, ifreplicas: 5, then master-0, master-2, master-4 will have thefast-eu-1adisk type, while master-1, master-3 will have thefast-eu-1bdisk type.Master nodes will be created in zones specified at this param following by alphabetical order. Based on the example below, master-0will be created in zoneeu-1a,master-1will be created in zoneeu-1b, andmaster-2will be created in zoneeu-1a.Useful commands: - openstack availability zone list— get list of availability zones.
- openstack volume type list— get list of volume types.
 Example: volumeTypeMap: eu-1a: fast-eu-1a eu-1b: fast-eu-1b
 
- array of objectsnodeGroupsAn array of additional NodeGroups for creating static nodes (e.g., for dedicated front nodes or gateways). - array of stringsnodeGroups.instanceClass.additionalNetworksPaths to networks that VirtualMachines secondary NICs will connect to. To get a list of all available networks, run the command: openstack network list.Example: additionalNetworks: - BGP-network-VLAN-3894 - External-VLAN-3699
- array of stringsnodeGroups.instanceClass.additionalSecurityGroupsSecurity groups that will be applied to VM’s network ports. Default group should also be added to this list. They allow you to set firewall rules for provisioned instances. The SecurityGroupsmay not be supported by the cloud provider.
- objectThe additional tags to attach to the instances created (in addition to those specified in the cloud provider configuration). Example: additionalTags: project: cms-production severity: critical
- booleannodeGroups.instanceClass.configDriveNot required value. Specifies whether an additional disk containing the bootstrapping configuration will be mounted to the node. You must set it if DHCP is disabled in the mainNetwork.Default: false
- stringnodeGroups.instanceClass.flavorNameRequired value Flavor of OpenStack servers. To get a list of all available flavors, run the command: openstack flavor list.For all non-master nodes it is advisable to use flavor’s with a local disk. If cloud provider supports local disks they are usually faster and cheaper. The disadvantage of using such flavors is the inability to migrate nodes between hypervisors. Flavor create example: openstack flavor create c4m8d50 --ram 8192 --disk 50 --vcpus 4
- array of stringsnodeGroups.instanceClass.floatingIPPoolsA list of networks to assign Floating IPs to nodes. 
- stringnodeGroups.instanceClass.imageNameRequired value Image to use while provisioning OpenStack servers. Use this command to get a list of available images: openstack image list.The list of OS and their versions supported by Deckhouse can be found in the documentation (take into account the Deckhouse version used). 
- stringnodeGroups.instanceClass.mainNetworkRequired value Path to the network that VirtualMachines primary NICs will connect to (default gateway). To get a list of all available networks, run the command: openstack network list.
- array of stringsnodeGroups.instanceClass.networksWithSecurityDisabledA list of mainNetworkandadditionalNetworksin whichSecurityGroupsandAllowedAddressPairson ports cannot be configured.
- integernodeGroups.instanceClass.rootDiskSizeThe size of a root disk (in gigabytes). This parameter also has influence on type of volume that will be used for root disk; the “How to use rootDiskSize and when it is preferred” section describes how to use it. 
 
- stringnodeGroups.nameThe name of the NodeGroup to use for generating node names. 
- nodeGroups.nodeTemplateParameters of Node objects in Kubernetes to add after registering the node. - objectnodeGroups.nodeTemplate.annotationsThe same as the metadata.annotationsstandard field.Example: annotations: ai.fleet.com/discombobulate: 'true'
- objectnodeGroups.nodeTemplate.labelsA list of labels to attach to cluster resources. The same as the metadata.labelsstandard field.Note that you have to re-create all the machines to add new tags if tags were modified in the running cluster. Example: labels: environment: production app: warp-drive-ai
- array of objectsnodeGroups.nodeTemplate.taintsThe same as the .spec.taintsfield of the Node object.Available fields: effect,key, andvalues.Example: taints: - effect: NoExecute key: ship-class value: frigate- stringnodeGroups.nodeTemplate.taints.effectAllowed values: NoSchedule,PreferNoSchedule,NoExecute
- stringnodeGroups.nodeTemplate.taints.key
- stringnodeGroups.nodeTemplate.taints.value
 
 
- integernodeGroups.replicasThe number of nodes to create. 
- objectnodeGroups.volumeTypeMapA dictionary of disk types for root drive. Format of dictionary elements: <AVAILABILITY ZONE>: <VOLUME TYPE>(see the example).If the value specified in replicasexceeds the number of elements in the dictionary, the nodes whose number exceeds the length of the dictionary get the values starting from the beginning of the dictionary. For example, ifreplicas: 5, then worker-0, worker-2, worker-4 will have thefast-eu-1adisk type, while worker-1, worker-3 will have thefast-eu-1bdisk type.Caution. Limits by availability zones works only when using the zonesparameter (nodeGroups.zones). Ifzonesparameter is not specified, all availability zones will be used.Useful commands: - openstack availability zone list— get list of availability zones.
- openstack volume type list— get list of volume types.
 Example: volumeTypeMap: eu-1a: fast-eu-1a eu-1b: fast-eu-1b
- array of stringsnodeGroups.zonesNot required value. A limited set of zones in which nodes can be created. 
 
- objectproviderRequired value Contains settings to connect to the OpenStack API. These settings are the same as those in the connectionfield of the cloud-provider-openstack module.- stringprovider.authURLAn OpenStack Identity API URL. 
- stringprovider.caCertSpecify the CA x509 certificate used for signing if the OpenStack API has a self-signed certificate. Certificate should be passed in PEM format as multiline string. Example: caCert: | -----BEGIN CERTIFICATE----- MIIFyDCCBLCgAwIBAgIQBwDIWH1asdaKNaALUa4NUzANBgkqhkiG9w0BAQsFADBc ... -----END CERTIFICATE-----
- stringprovider.domainNameThe domain name. OS_USER_DOMAIN_NAMEvariable from the openrc file.
- stringprovider.passwordThe user’s password. 
- stringprovider.regionThe OpenStack region where the cluster will be deployed. 
- stringprovider.tenantIDThe project id. Cannot be used together with tenantName.
- stringprovider.tenantNameThe project name. Cannot be used together with tenantID.
- stringprovider.usernameThe name of the user that has full project privileges. 
 
- booleansimple.externalNetworkDHCPThis parameter defines if DHCP is enabled in the external network. Default: true
- stringsimple.externalNetworkNameRequired value The name of the network for external connections. To get a list of all available networks, run the command: openstack network list.
- stringsimple.podNetworkModeSets the traffic mode for the network that the pods use to communicate with each other (usually, it is an internal network; however, there can be exceptions): - DirectRouting— nodes are directly routed (SecurityGroups are disabled in this mode).
- VXLAN— direct routing does NOT work between nodes, VXLAN must be used (SecurityGroups are disabled in this mode).
 Caution. After changing this parameter, you need to run dhctl convergecommand for the changes to take effect.Caution. All cluster nodes must be rebooted after switching work mode from/to VXLAN. Default: VXLANAllowed values: VXLAN,DirectRouting
 
- booleansimpleWithInternalNetwork.externalNetworkDHCPThis parameter defines if DHCP is enabled in the external network. Default: true
- stringsimpleWithInternalNetwork.externalNetworkNameThe name of the network for external connections. To get a list of all available networks, run the command: openstack network list.
- stringsimpleWithInternalNetwork.internalSubnetNameRequired value The name of the subnet in which the cluster nodes will run. 
- booleansimpleWithInternalNetwork.masterWithExternalFloatingIPDefines if Floating IP must be assigned to master nodes. Default: true
- stringsimpleWithInternalNetwork.podNetworkModeSets the traffic mode for the network that the pods use to communicate with each other (usually, it is an internal network; however, there can be exceptions): - DirectRouting— nodes are directly routed (SecurityGroups are disabled in this mode).
- DirectRoutingWithPortSecurityEnabled— direct routing is enabled between the nodes, but only if the range of addresses of the internal network is explicitly allowed in OpenStack for Ports:- Caution. Make sure that the usernamecan editAllowedAddressPairson Ports connected to theinternalNetworkNamenetwork. Usually, an OpenStack user doesn’t have such a privilege if the network has thesharedflag set.
 
- Caution. Make sure that the 
- VXLAN— direct routing does NOT work between nodes, VXLAN must be used (- SecurityGroupsare disabled in this mode).
 Caution. After changing this parameter, you need to run dhctl convergecommand for the changes to take effect.Caution. All cluster nodes must be rebooted after switching work mode from/to VXLAN. Default: DirectRoutingWithPortSecurityEnabledAllowed values: VXLAN,DirectRouting,DirectRoutingWithPortSecurityEnabled
 
- array of stringssshAllowListA list of CIDR’s allowed to connect to nodes via SSH. By default, 0.0.0.0/0.
- stringsshPublicKeyRequired value A public key for accessing nodes. 
- objectstandard.bastionThe definition of the bastion instance. - objectThe additional tags to attach to the instance created (in addition to those specified in the cloud provider configuration). Example: additionalTags: project: cms-production severity: critical
- stringstandard.bastion.instanceClass.flavorNameRequired value Flavor of OpenStack servers. To get a list of all available flavors, run the command: openstack flavor list.
- stringstandard.bastion.instanceClass.imageNameRequired value Image to use while provisioning OpenStack servers. Use this command to get a list of available images: openstack image list.The list of OS and their versions supported by Deckhouse can be found in the documentation (take into account the Deckhouse version used). 
- integerstandard.bastion.instanceClass.rootDiskSizeThe size of a root disk (in gigabytes). This parameter also has influence on type of volume that will be used for root disk; the “How to use rootDiskSize and when it is preferred” section describes how to use it. Default: 50
 
- stringstandard.bastion.volumeTypeRoot disk type. 
- stringstandard.bastion.zoneThe zone to create an instance for the bastion node. 
 
- stringstandard.externalNetworkNameRequired value The name of the network for external connections. To get a list of all available networks, run the command: openstack network list.
- stringstandard.internalNetworkCIDRRequired value Routing for the internal cluster 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]))$
- array of stringsstandard.internalNetworkDNSServersRequired value A list of addresses of the recursive DNSs of the internal cluster network. - stringElement of the arrayPattern: ^(([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])$
 
- booleanstandard.internalNetworkSecurityDefines whether SecurityGroups and AllowedAddressPairs must be configured for ports of the internal network. Default: true
 
- booleanstandardWithNoRouter.externalNetworkDHCPThis parameter defines if DHCP is enabled in the external network. Default: true
- stringstandardWithNoRouter.externalNetworkNameRequired value The name of the network for external connections. To get a list of all available networks, run the command: openstack network list.
- stringstandardWithNoRouter.internalNetworkCIDRRequired value Routing for the internal cluster 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]))$
- booleanstandardWithNoRouter.internalNetworkSecurityDefines whether SecurityGroups and AllowedAddressPairs must be configured for ports of the internal network. Default: true
 
- objectNot required value. A dictionary of tags to create on all resources that support this feature. You have to re-create all the machines to add new tags if tags were modified in the running cluster. 
- array of stringszonesNot required value. The globally restricted set of zones that this Cloud Provider works with.