クラウド管理者は、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