身為雲端管理員,您可以在建置基礎結構時利用 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