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