Als Cloud-Administrator können Sie die VMware Avi Load Balancer Ressourcen nutzen, um Ihre Infrastruktur aufzubauen. Sie können auch Hilfsprogramme für die Zuteilung verwenden, um Zuteilungslogik für Ihre Avi Load Balancer-Ressourcen bereitzustellen.

Bevor Sie beginnen

Bevor Sie mit einer der Beispielvorlagen beginnen, müssen Sie Ihr Avi Load Balancer-Cloud-Konto in Automation Assembler erstellen, ein Projekt anlegen und die Cloud-Zone hinzufügen. Anweisungen finden Sie unter Erstellen eines VMware Avi Load Balancer-Cloud-Kontos.

Einfache LBaaS-Vorlage

In dieser Beispielvorlage wird die Erstellung eines virtuellen Diensts, eines Pools und virtueller IP-Ressourcen bei minimalem Eingabeaufwand beschrieben.

Alle in diesem Beispiel verwendeten Avi Load Balancer-Ressourcen beziehen sich auf Avi Load Balancer-Konstrukte, die auf den Avi Load Balancer-Controller verweisen.

In dieser Vorlage werden keine Maschinen oder Server bereitgestellt. Sie erhalten die Liste der Server, die kontinuierlich aktualisiert werden kann.

Die Vorlage entspricht standardmäßig einem leeren Pool. Das Formular und die Eingabe sind aber so eingerichtet, das Sie echte IPs eingeben und einen normalen Pool erstellen können.

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"}})}'

Erweiterte LBaaS-Vorlage

Diese Beispielvorlage zeigt, wie zusammen mit einem Hilfsprogramm für die Zuteilung von Cloud-Zonen ein virtueller Dienst, ein Pool und virtuelle IP-Ressourcen erstellt werden können, die mit einem vorhandenen Netzwerk verbunden sind. Darüber hinaus wird der Pool mit der HTTP-Integritätsüberwachung konfiguriert.

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

Einfache Vorlage für Webserver

Diese Beispielvorlage zeigt, wie Sie einen virtuellen Dienst, einen Pool, eine virtuelle IP und zwei Webserver-VM-Ressourcen erstellen können, die mit einem vorhandenen Netzwerk verbunden sind. Der Pool ist für die Überwachung von Port 80 mithilfe des Round-Robin-Algorithmus konfiguriert.

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

Erweiterte Vorlage für Webserver

Diese Vorlage zeigt, wie zusammen mit einem Hilfsprogramm für die Zuteilung von Cloud-Zonen ein virtueller Dienst, ein Pool und virtuelle IP-Ressourcen erstellt werden können, die mit einem vorhandenen Netzwerk verbunden sind. Darüber hinaus werden ein Integritätsüberwachungs- und ein Anwendungspersistenzprofil erstellt und im Pool konfiguriert. Schließlich werden Sicherheitsgruppen nach Tag aufgelistet und die VM-Webserver hinzugefügt.

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