Als cloudbeheerder kunt u gebruikmaken van de VMware Avi Load Balancer-resources om uw infrastructuur op te bouwen. U kunt ook toewijzingshelpers gebruiken om toewijzingslogica voor uw Avi Load Balancer-resources te leveren.

Voordat u begint

Voordat u aan de slag gaat met een van de sjabloonvoorbeelden, moet u uw Avi Load Balancer-cloudaccount in Automation Assembler maken, een project maken en de cloudzone toevoegen. Zie Een VMware Avi Load Balancer-cloudaccount maken voor instructies.

Eenvoudige LBaaS-sjabloon

Deze voorbeeldsjabloon toont hoe u een virtuele service, pool en virtuele IP-resources maakt met minimale invoer.

Alle Avi Load Balancer-resources die in dit voorbeeld worden gebruikt, verwijzen naar Avi Load Balancer-constructs met een verwijzing naar de Avi Load Balancer Controller.

Er zijn geen machines of servers ingericht in deze sjabloon. U krijgt de lijst met servers, die continu kan worden bijgewerkt.

De sjabloon wordt standaard ingesteld op een lege pool, maar het formulier en de invoer zijn ingesteld zodat u echte IP-adressen kunt invoeren en een normale pool wordt gemaakt.

formatVersion: 1
name: ALB - LBaaS Demo - Simple
version: 1
inputs:
  port:
    type: integer
    title: Port
    description: Traffic sent to servers will use this destination server port unless overridden by the server's specific port attribute.
    default: 80
  servers:
    type: array
    title: Servers
    description: The pool directs load balanced traffic to this list of destination servers. The servers can be configured by IP address, name, network or via IP Address Group. Leaving 0.0.0.0 will result in an empty pool being created.
    items:
      type: string
    minItems: 0
    default:
      - 0.0.0.0
resources:
  VIP:
    type: Idem.AVILB.APPLICATIONS.VS_VIP
    properties:
      name: vip-${uuid()}
      account: avi-account
      description: Managed by Aria Automation
      vip:
        - vip_id: 0
          auto_allocate_ip: true
          ipam_network_subnet:
            network_ref: VMNetwork-PortGroup
  VirtualService:
    type: Idem.AVILB.APPLICATIONS.VIRTUAL_SERVICE
    properties:
      name: vs-${uuid()}
      account: avi-account
      description: Managed by Aria Automation
      services:
        - port: ${input.port}
      pool_ref: ${resource.Pool.name}
      vsvip_ref: ${resource.VIP.name}
  Pool:
    type: Idem.AVILB.APPLICATIONS.POOL
    properties:
      name: pool-${uuid()}
      account: avi-account
      description: Managed by Aria Automation
      default_server_port: ${input.port}
      servers: '${input.servers[0] == "0.0.0.0" ? null :map_by(input.servers, address => {"ip": {"addr": address, "type" : "V4"}})}'

Geavanceerde LBaaS-sjabloon

Deze voorbeeldsjabloon toont hoe u een virtuele service, pool en virtuele IP-resources maakt die zijn verbonden met een bestaand netwerk, samen met een helper voor de toewijzing van cloudzones. Daarnaast wordt de pool geconfigureerd met de HTTP-statusmonitor voor het systeem.

formatVersion: 1
name: ALB - LBaaS Demo
version: 1
inputs:
  env:
    type: string
    title: Environment
    description: Select Dev or Prod ALB environment
    default: env:dev
    oneOf:
      - title: Dev ALB
        const: env:dev
      - title: Prod ALB
        const: env:prod
  port:
    type: integer
    title: Port
    description: Input the server ip's to add to the pool.
    default: 80
  servers:
    type: array
    title: Servers
    description: Input the server ip's to add to the pool. Leaving 0.0.0.0 will result in an empty pool being created.
    items:
      type: string
    minItems: 0
    default:
      - 0.0.0.0
resources:
  Allocations_CloudZone_1:
    type: Allocations.CloudZone
    properties:
      accountType: avilb
      constraints:
        - tag: ${input.env}
  VIP:
    type: Idem.AVILB.APPLICATIONS.VS_VIP
    properties:
      name: vip-${uuid()}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      description: Managed by Aria Automation
      vip:
        - vip_id: 0
          auto_allocate_ip: true
          ipam_network_subnet:
            network_ref: ${resource.Cloud_vSphere_Network_1.resourceName}
  VirtualService:
    type: Idem.AVILB.APPLICATIONS.VIRTUAL_SERVICE
    properties:
      name: vs-${uuid()}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      description: Managed by Aria Automation
      services:
        - port: ${input.port}
      pool_ref: ${resource.Pool.name}
      vsvip_ref: ${resource.VIP.name}
  Pool:
    type: Idem.AVILB.APPLICATIONS.POOL
    properties:
      name: pool-${uuid()}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      description: Managed by Aria Automation
      default_server_port: ${input.port}
      servers: '${input.servers[0] == "0.0.0.0" ? null :map_by(input.servers, address => {"ip": {"addr": address, "type" : "V4"}})}'
      health_monitor_refs:
        - System-HTTP
  Cloud_vSphere_Network_1:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: net:vm

Eenvoudige sjabloon voor webservers

Deze voorbeeldsjabloon toont hoe u een virtuele service, pool, virtueel IP en twee VM-resources voor webservers maakt die zijn verbonden met een bestaand netwerk. De pool is geconfigureerd om poort 80 te bewaken met het Round Robin-algoritme.

formatVersion: 1
name: ALB - Web Servers
version: 1
inputs:
  env:
    type: string
    title: Environment
    description: Select Dev or Prod ALB environment
    default: env:dev
    oneOf:
      - title: Dev ALB
        const: env:dev
      - title: Prod ALB
        const: env:prod
  clusterSize:
    type: string
    enum:
      - small
      - medium
      - large
    default: small
    title: Web Server Cluster Size
    description: Web Server Cluster Size. Small creates one web server and no ALB. Medium creates 2 web servers and a ALB. Large creates 4 web servers and a ALB.
  username:
    type: string
    title: Username
    default: demouser
  password:
    type: string
    title: Password
    encrypted: false
    default: VMware1!
  port:
    type: integer
    title: Port
    default: 80
  health_monitor:
    type: array
    items:
      type: string
    title: Health Monitors
    default:
      - System-HTTP
    minItems: 1
    maxItems: 10
  lb_algorithm:
    type: string
    title: Load Balancer Algorithm
    description: The load balancing algorithm will pick a server within the pool's list of available servers.
    readOnly: false
    default: LB_ALGORITHM_LEAST_CONNECTIONS
    oneOf:
      - title: Least Connections
        const: LB_ALGORITHM_LEAST_CONNECTIONS
      - title: Round Robin
        const: LB_ALGORITHM_ROUND_ROBIN
      - title: Fastest Response
        const: LB_ALGORITHM_FASTEST_RESPONSE
      - title: Consistent Hash
        const: LB_ALGORITHM_CONSISTENT_HASH
      - title: Least Load
        const: LB_ALGORITHM_LEAST_LOAD
      - title: Fewest Servers
        const: LB_ALGORITHM_FEWEST_SERVERS
      - title: Random
        const: LB_ALGORITHM_RANDOM
      - title: Fewest Tasks
        const: LB_ALGORITHM_FEWEST_TASKS
      - title: Core Affinity
        const: LB_ALGORITHM_CORE_AFFINITY
resources:
  ALB_HEALTH_MONITOR:
    type: Idem.AVILB.PROFILES.HEALTH_MONITOR
    properties:
      name: web-health-${uuid()}
      description: Managed by Aria Assembler
      type: ${input.health_monitor}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
  Allocations_CloudZone_1:
    type: Allocations.CloudZone
    properties:
      accountType: avilb
      constraints:
        - tag: ${input.env}
  ALB_APPLICATION_PERSISTENCE_PROFILE:
    type: Idem.AVILB.PROFILES.APPLICATION_PERSISTENCE_PROFILE
    properties:
      name: apache-appprofile-${uuid()}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      description: Managed by Aria Automation
      persistence_type: PERSISTENCE_TYPE_CLIENT_IP_ADDRESS
      server_hm_down_recovery: HM_DOWN_PICK_NEW_SERVER
      ip_persistence_profile:
        ip_mask: 24
        ip_persistent_timeout: 20
  SecurityGroup:
    type: Cloud.SecurityGroup
    properties:
      constraints:
        - tag: ${input.env}
      securityGroupType: existing
  VIP:
    type: Idem.AVILB.APPLICATIONS.VS_VIP
    properties:
      name: web-vip-${uuid()}
      description: Managed by Aria Automation
      count: ${input.clusterSize == "small" ? 0:1}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      vip:
        - vip_id: 0
          auto_allocate_ip: true
          ipam_network_subnet:
            network_ref: ${resource.Cloud_vSphere_Network_1.resourceName}
  VirtualService:
    type: Idem.AVILB.APPLICATIONS.VIRTUAL_SERVICE
    properties:
      name: web-vs-${uuid()}
      description: Managed by Aria Assembler
      count: ${input.clusterSize == "small" ? 0:1}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      cloud_type: CLOUD_VCENTER
      services:
        - port: ${input.port}
      vsvip_ref: ${resource.VIP[0].name}
      pool_ref: ${resource.Pool[0].name}
  Pool:
    type: Idem.AVILB.APPLICATIONS.POOL
    properties:
      name: web-pool-${uuid()}
      description: Managed by Aria Automation
      count: ${input.clusterSize == "small" ? 0:1}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      default_server_port: ${input.port}
      health_monitor_refs:
        - ${resource.ALB_HEALTH_MONITOR.name}
      lb_algorithm: ${input.lb_algorithm}
      application_persistence_profile_ref: ${resource.ALB_APPLICATION_PERSISTENCE_PROFILE.name}
      servers: '${map_by(resource.Web_Server[*].address, address => {"ip": {"addr": address, "type" : "V4"}})}'
  Web_Server:
    type: Cloud.vSphere.Machine
    properties:
      name: web
      count: 2
      flavor: small
      imageRef: https://cloud-images.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-cloudimg-amd64.ova
      cloudConfig: |
        packages:
          - apache2
          - open-vm-tools

        runcmd:
          ### update the top of the web page to the web servers resource name
          - sed -i 's/Apache2 Ubuntu Default Page/${self.resourceName}/g' /var/www/html/index.html
          
          ### Restart services
          - systemctl reload apache2
          - systemctl restart apache2
          
          ### Log completion
          - echo 'Cloud-init is done!' >> /tmp/finished.txt
      networks:
        - network: ${resource.Cloud_vSphere_Network_1.id}
          securityGroups:
            - ${resource.SecurityGroup.id}
  Cloud_vSphere_Network_1:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: net:vm

Geavanceerde sjabloon voor webservers

Deze voorbeeldsjabloon toont hoe u een virtuele service, pool en virtuele IP-resources maakt die zijn verbonden met een bestaand netwerk, samen met een toewijzingshelper voor cloudzones. Daarnaast worden een statusmonitor en een applicatiepersistentieprofiel gemaakt en geconfigureerd in de pool. Ten slotte worden beveiligingsgroepen geïnventariseerd per tag en worden de VM-webservers eraan toegevoegd.

formatVersion: 1
name: ALB - Web Servers
version: 1
inputs:
  env:
    type: string
    title: Environment
    description: Select Dev or Prod ALB environment
    default: env:dev
    oneOf:
      - title: Dev ALB
        const: env:dev
      - title: Prod ALB
        const: env:prod
  clusterSize:
    type: string
    enum:
      - small
      - medium
      - large
    default: small
    title: Web Server Cluster Size
    description: Web Server Cluster Size. Small creates one web server and no ALB. Medium creates 2 web servers and a ALB. Large creates 4 web servers and a ALB.
  username:
    type: string
    title: Username
    default: demouser
  password:
    type: string
    title: Password
    encrypted: false
    default: VMware1!
  port:
    type: integer
    title: Port
    default: 80
  health_monitor:
    type: array
    items:
      type: string
    title: Health Monitors
    default:
      - System-HTTP
    minItems: 1
    maxItems: 10
  lb_algorithm:
    type: string
    title: Load Balancer Algorithm
    description: The load balancing algorithm will pick a server within the pool's list of available servers.
    readOnly: false
    default: LB_ALGORITHM_LEAST_CONNECTIONS
    oneOf:
      - title: Least Connections
        const: LB_ALGORITHM_LEAST_CONNECTIONS
      - title: Round Robin
        const: LB_ALGORITHM_ROUND_ROBIN
      - title: Fastest Response
        const: LB_ALGORITHM_FASTEST_RESPONSE
      - title: Consistent Hash
        const: LB_ALGORITHM_CONSISTENT_HASH
      - title: Least Load
        const: LB_ALGORITHM_LEAST_LOAD
      - title: Fewest Servers
        const: LB_ALGORITHM_FEWEST_SERVERS
      - title: Random
        const: LB_ALGORITHM_RANDOM
      - title: Fewest Tasks
        const: LB_ALGORITHM_FEWEST_TASKS
      - title: Core Affinity
        const: LB_ALGORITHM_CORE_AFFINITY
resources:
  ALB_HEALTH_MONITOR:
    type: Idem.AVILB.PROFILES.HEALTH_MONITOR
    properties:
      name: web-health-${uuid()}
      description: Managed by Aria Assembler
      type: ${input.health_monitor}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
  Allocations_CloudZone_1:
    type: Allocations.CloudZone
    properties:
      accountType: avilb
      constraints:
        - tag: ${input.env}
  ALB_APPLICATION_PERSISTENCE_PROFILE:
    type: Idem.AVILB.PROFILES.APPLICATION_PERSISTENCE_PROFILE
    properties:
      name: apache-appprofile-${uuid()}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      description: Managed by Aria Automation
      persistence_type: PERSISTENCE_TYPE_CLIENT_IP_ADDRESS
      server_hm_down_recovery: HM_DOWN_PICK_NEW_SERVER
      ip_persistence_profile:
        ip_mask: 24
        ip_persistent_timeout: 20
  SecurityGroup:
    type: Cloud.SecurityGroup
    properties:
      constraints:
        - tag: ${input.env}
      securityGroupType: existing
  VIP:
    type: Idem.AVILB.APPLICATIONS.VS_VIP
    properties:
      name: web-vip-${uuid()}
      description: Managed by Aria Automation
      count: ${input.clusterSize == "small" ? 0:1}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      vip:
        - vip_id: 0
          auto_allocate_ip: true
          ipam_network_subnet:
            network_ref: ${resource.Cloud_vSphere_Network_1.resourceName}
  VirtualService:
    type: Idem.AVILB.APPLICATIONS.VIRTUAL_SERVICE
    properties:
      name: web-vs-${uuid()}
      description: Managed by Aria Assembler
      count: ${input.clusterSize == "small" ? 0:1}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      cloud_type: CLOUD_VCENTER
      services:
        - port: ${input.port}
      vsvip_ref: ${resource.VIP[0].name}
      pool_ref: ${resource.Pool[0].name}
  Pool:
    type: Idem.AVILB.APPLICATIONS.POOL
    properties:
      name: web-pool-${uuid()}
      description: Managed by Aria Automation
      count: ${input.clusterSize == "small" ? 0:1}
      account: ${resource.Allocations_CloudZone_1.selectedCloudAccount.name}
      default_server_port: ${input.port}
      health_monitor_refs:
        - ${resource.ALB_HEALTH_MONITOR.name}
      lb_algorithm: ${input.lb_algorithm}
      application_persistence_profile_ref: ${resource.ALB_APPLICATION_PERSISTENCE_PROFILE.name}
      servers: '${map_by(resource.Web_Server[*].address, address => {"ip": {"addr": address, "type" : "V4"}})}'
  Web_Server:
    type: Cloud.vSphere.Machine
    properties:
      name: web
      count: 2
      flavor: small
      imageRef: https://cloud-images.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-cloudimg-amd64.ova
      cloudConfig: |
        packages:
          - apache2
          - open-vm-tools

        runcmd:
          ### update the top of the web page to the web servers resource name
          - sed -i 's/Apache2 Ubuntu Default Page/${self.resourceName}/g' /var/www/html/index.html
          
          ### Restart services
          - systemctl reload apache2
          - systemctl restart apache2
          
          ### Log completion
          - echo 'Cloud-init is done!' >> /tmp/finished.txt
      networks:
        - network: ${resource.Cloud_vSphere_Network_1.id}
          securityGroups:
            - ${resource.SecurityGroup.id}
  Cloud_vSphere_Network_1:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: net:vm