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