Como administrador de nube, puede aprovechar el complemento de VMware Avi Load Balancer para aprovisionar recursos basados en complementos a medida que crea la infraestructura. También puede utilizar aplicaciones auxiliares de asignación para proporcionar lógica de asignación para sus recursos de Avi Load Balancer.
Antes de comenzar
Antes de comenzar con cualquiera de los ejemplos de plantilla, deberá crear la cuenta de nube de Avi Load Balancer en Automation Assembler, crear un proyecto y agregar la zona de nube. Para obtener instrucciones, consulte Cree una cuenta de nube de VMware Avi Load Balancer.
Plantilla de LBaaS simple
Esta plantilla de ejemplo muestra cómo se puede crear un servicio virtual, un grupo y recursos de IP virtuales con entradas mínimas.
Todos los recursos de Avi Load Balancer utilizados en este ejemplo hacen referencia a construcciones de Avi Load Balancer que apuntan a la controladora de Avi Load Balancer.
No hay máquinas ni servidores aprovisionados en esta plantilla. Se obtiene la lista de servidores, que se pueden actualizar continuamente.
El valor predeterminado de la plantilla es un grupo vacío, pero el formulario y la entrada están configurados para que se puedan introducir direcciones IP reales y se cree un grupo normal.
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"}})}'
Plantilla de LBaaS avanzada
Esta plantilla de ejemplo muestra cómo se puede crear un servicio virtual, un grupo y recursos de IP virtuales conectados a una red existente junto con una aplicación auxiliar de asignación de zona de nube. Además, el grupo está configurado con el monitor de estado HTTP del sistema.
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
Plantilla de servidores web simples
Esta plantilla de ejemplo muestra cómo se pueden crear un servicio virtual, un grupo, una IP virtual y dos recursos de máquina virtual de servidor web conectados a una red existente. El grupo está configurado para supervisar el puerto 80 mediante el algoritmo Round robin (por turnos).
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
Plantilla de servidores web avanzada
Esta plantilla muestra cómo se puede crear un servicio virtual, un grupo y recursos de IP virtuales conectados a una red existente junto con una aplicación auxiliar de asignación de zona de nube. Además, se crea y configura un monitor de estado y un perfil de persistencia de aplicaciones en el grupo. Por último, los grupos de seguridad se enumeran por etiqueta y se les agregan los servidores web de máquina virtual.
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