Создание и настройка балансировщиков нагрузки
Чтобы создать балансировщик нагрузки, создайте файл lb.tf
, где будет описана конфигурация создаваемого балансировщика нагрузки. Добавьте текст из примеров ниже, и исправьте значения настроек для вашего балансировщика нагрузки. В данном примере описывается настройка Load Balancer для двух ВМ, траффик на которых будет распределяться создаваемым балансировщиком нагрузки методом ROUND_ROBIN
.
Для создания сети для балансировщика нагрузки потребуются следующие объекты:
-
Ресурсы (resource):
- vkcs_networking_network — сеть, в которой будет создана ВМ. В примере ниже сеть создается с именем «lb».
- vkcs_networking_subnet — подсеть из сети. В примере:
lb
.
1resource "vkcs_networking_network" "lb" { 2 name = "network" 3} 4 5resource "vkcs_networking_subnet" "lb" { 6 name = "subnet" 7 cidr = "192.168.199.0/24" 8 network_id = "${vkcs_networking_network.lb.id}" 9}
Для создания Load Balancer вам потребуются следующие объекты:
-
Источники данных (data source):
- vkcs_images_image — установочный образ для создаваемого инстанса.
- vkcs_compute_flavor – флейвор (CPU, RAM, Disk) ВМ. Можно посмотреть в визарде создания ВМ через личный кабинет.
-
Ресурсы (resource):
-
vkcs_compute_instance — Управляет ресурсом экземпляра вычислительной виртуальной машины. Траффик на этих ВМ будет распределяться создаваемым балансировщиком нагрузки.
Содержит следующие ресурсы:
- name — имя ВМ.
- flavor_id — флейвор ВМ, используемый при создании.
- security_groups — перечень имен security group, приписанных этой ВМ.
- image_id — образ ОС, используемый при создании этой ВМ.
- network — сеть, подключаемая при создании ВМ.
- depends_on — ВМ не запустится прежде чем не будет выполнено создание указанных ресурсов.
-
vkcs_lb_loadbalancer — Управляет ресурсом балансировщика нагрузки в VKCS. Включает в себя следующие ресурсы:
- name — Удобочитаемое имя для балансировщика нагрузки. Не обязательно быть уникальным.
- vip_subnet_id — Подсеть, в которой будет выделен адрес балансировщика нагрузки. Клиент может создавать балансировщики нагрузки только в сетях, разрешенных политикой (например, в сетях, которые принадлежат ему, или в сетях, которые являются общими). Изменение этого параметра создает новый балансировщик нагрузки.
- tags — Список простых strings, назначенных балансировщику нагрузки.
-
vkcs_lb_listener — Управляет ресурсом прослушивателя в VKCS. Включает в себя следующие ресурсы:
- name — Удобочитаемое имя для Слушателя. Не обязательно быть уникальным.
- protocol — Протокол - может быть TCP, HTTP, HTTPS, TERMINATED_HTTPS, UDP. Изменение этого параметра создает нового слушателя.
- protocol_port — Порт, на котором прослушивается клиентский трафик. Изменение этого параметра создает нового слушателя.
- loadbalancer_id — Балансировщик нагрузки, на котором должен быть предоставлен этот прослушиватель. Изменение этого параметра создает нового слушателя.
-
vkcs_lb_pool — Управляет ресурсом пула в VK Cloud. Включает в себя следующие ресурсы:
- name — Удобочитаемое имя пула.
- protocol — Протокол - может быть TCP, HTTP, HTTPS, PROXY или UDP. Изменение этого параметра создает новый пул.
- lb_method — Алгоритм балансировки нагрузки для распределения трафика между участниками пула. Должен быть один из ROUND_ROBIN, LEAST_CONNECTIONS, SOURCE_IP или SOURCE_IP_PORT.
- listener_id — Прослушиватель, с которым будут связаны члены пула. Изменение этого параметра создает новый пул. Примечание: Необходимо указать один из идентификаторов LoadbalancerID или ListenerID.
-
vkcs_lb_member — Управляет ресурсом участника в VKCS. Включает в себя следующие ресурсы:
- address — IP-адрес участника для получения трафика от балансировщика нагрузки. Изменение этого параметра создает нового участника.
- protocol_port — Порт, на котором прослушивается клиентский трафик. Изменение этого параметра создает нового участника.
- pool_id — Идентификатор пула, которому будет назначен этот участник. Изменение этого параметра создает нового участника.
- subnet_id — Подсеть, в которой можно получить доступ к члену. Изменение этого параметра создает нового участника.
- weight — Положительное целое значение, указывающее относительную часть трафика, которую этот участник должен получать из пула. Например, участник с весом 10 получает в пять раз больше трафика, чем участник с весом 2. По умолчанию используется значение 1.
-
1data "vkcs_images_image" "compute" { 2 name = "Ubuntu-18.04-Standard" 3} 4 5data "vkcs_compute_flavor" "compute" { 6 name = "Basic-1-2-20" 7} 8 9resource "vkcs_compute_instance" "compute_1" { 10 name = "compute-instance-1" 11 flavor_id = data.vkcs_compute_flavor.compute.id 12 security_groups = ["default"] 13 image_id = data.vkcs_images_image.compute.id 14 15 network { 16 uuid = vkcs_networking_network.lb.id 17 fixed_ip_v4 = "192.168.199.110" 18 } 19 20 depends_on = [ 21 vkcs_networking_network.lb, 22 vkcs_networking_subnet.lb 23 ] 24} 25 26resource "vkcs_compute_instance" "compute_2" { 27 name = "compute-instance-2" 28 flavor_id = data.vkcs_compute_flavor.compute.id 29 security_groups = ["default"] 30 image_id = data.vkcs_images_image.compute.id 31 32 network { 33 uuid = vkcs_networking_network.lb.id 34 fixed_ip_v4 = "192.168.199.111" 35 } 36 37 depends_on = [ 38 vkcs_networking_network.lb, 39 vkcs_networking_subnet.lb 40 ] 41} 42 43resource "vkcs_lb_loadbalancer" "loadbalancer" { 44 name = "loadbalancer" 45 vip_subnet_id = "${vkcs_networking_subnet.lb.id}" 46 tags = ["tag1"] 47} 48 49resource "vkcs_lb_listener" "listener" { 50 name = "listener" 51 protocol = "HTTP" 52 protocol_port = 8080 53 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer.id}" 54} 55 56resource "vkcs_lb_pool" "pool" { 57 name = "pool" 58 protocol = "HTTP" 59 lb_method = "ROUND_ROBIN" 60 listener_id = "${vkcs_lb_listener.listener.id}" 61} 62 63resource "vkcs_lb_member" "member_1" { 64 address = "192.168.199.110" 65 protocol_port = 8080 66 pool_id = "${vkcs_lb_pool.pool.id}" 67 subnet_id = "${vkcs_networking_subnet.lb.id}" 68 weight = 0 69} 70 71resource "vkcs_lb_member" "member_2" { 72 address = "192.168.199.111" 73 protocol_port = 8080 74 pool_id = "${vkcs_lb_pool.pool.id}" 75 subnet_id = "${vkcs_networking_subnet.lb.id}" 76}
Добавьте обе части примера в файл lb.tf
и выполните следующие команды:
terraform init
terraform apply