クラウド管理者は、VMware Avi Load Balancer リソースを活用してインフラストラクチャを構築できます。割り当てヘルパーを使用して、Avi Load Balancer リソースの割り当てロジックを提供することもできます。
開始する前に
テンプレートの例から作業を開始する前に、Automation Assembler で Avi Load Balancer クラウド アカウントを作成し、プロジェクトを作成して、クラウド ゾーンを追加する必要があります。手順については、VMware Avi Load Balancer クラウド アカウントの作成を参照してください。
シンプルな LBaaS テンプレート
このサンプル テンプレートは、最小限の入力で仮想サービス、プール、および仮想 IP リソースを作成する方法を示しています。
この例で使用されるすべての Avi Load Balancer リソースは、Avi Load Balancer コントローラを参照する 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 アドレス、および 2 つの 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