作为云管理员,您可以利用 VMware Avi Load Balancer 资源构建基础架构。此外,还可以使用分配帮助程序为 Avi Load Balancer 资源提供分配逻辑。
开始之前
开始使用任何模板示例之前,必须先在 Automation Assembler 中创建 Avi Load Balancer 云帐户、创建项目并添加云区域。有关说明,请参见创建 VMware Avi Load Balancer 云帐户。
简单 LBaaS 模板
此示例模板展示了如何使用最少的输入创建虚拟服务、池和虚拟 IP 资源。
此示例中使用的所有 Avi Load Balancer 资源均引用指向 Avi Load Balancer Controller 的 Avi Load Balancer 构造。
此模板中未置备任何计算机或服务器。您将获得服务器列表,且该列表会不断更新。
模板默认为空池,但设置了表单和输入,以便可以输入实际 IP 并创建正常池。
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"}})}'
高级 LBaaS 模板
此示例模板展示了如何创建连接到现有网络的虚拟服务、池和虚拟 IP 资源以及云区域分配帮助程序。此外,池还配置了系统 HTTP 运行状况监控器。
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
简单 Web 服务器模板
此示例模板显示了如何创建连接到现有网络的虚拟服务、池、虚拟 IP 和两个 Web 服务器虚拟机资源。池配置为使用循环算法监控端口 80。
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
高级 Web 服务器模板
此模板展示了如何创建连接到现有网络的虚拟服务、池和虚拟 IP 资源以及云区域分配帮助程序。此外,还在池中创建并配置了运行状况监控器和应用程序持久性配置文件。最后,按标记枚举安全组,并将虚拟机 Web 服务器添加到其中。
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