Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Application Load Balancer
  • Начало работы
    • Все практические руководства
    • Организация виртуального хостинга
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Запись логов балансировщика в PostgreSQL
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием в Yandex Managed Service for Kubernetes
    • Настройка Gateway API в Yandex Managed Service for Kubernetes
    • Настройка L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Настройка логирования для L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Проверка состояния приложений в кластере Managed Service for Kubernetes с помощью L7-балансировщика Application Load Balancer
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Next-Generation Firewall
    • Создание L7-балансировщика Application Load Balancer с профилем безопасности Smart Web Security
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи L7-балансировщика
  • История изменений
  • Обучающие курсы

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте цель тестирования
  • Подготовьте домен
  • Установите Ingress
  • Настройте горизонтальное автомасштабирование подов
  • Проведите нагрузочное тестирование gRPC-сервиса
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием в Yandex Managed Service for Kubernetes

Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием в Yandex Managed Service for Kubernetes

Статья создана
Yandex Cloud
Обновлена 13 мая 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Подготовьте цель тестирования
  • Подготовьте домен
  • Установите Ingress
  • Настройте горизонтальное автомасштабирование подов
  • Проведите нагрузочное тестирование gRPC-сервиса
  • Как удалить созданные ресурсы

По этому руководству вы развернете автомасштабируемый gRPC-сервис в кластере Kubernetes с помощью Ingress-контроллера Yandex Application Load Balancer и проведете нагрузочное тестирование сервиса.

Чтобы развернуть сервис и осуществить нагрузочное тестирование:

  1. Подготовьте облако к работе.
  2. Подготовьте цель тестирования.
  3. Подготовьте домен.
  4. Установите Ingress.
  5. Настройте горизонтальное автомасштабирование подов.
  6. Проведите нагрузочное тестирование gRPC-сервиса.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

  1. Зарегистрируйте доменное имя для вашего сайта.

  2. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

    Также настройте группы безопасности, необходимые для работы Application Load Balancer.

    Важно

    От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

  3. Подготовьте кластер Managed Service for Kubernetes к работе.

  4. Установите Metrics Provider в пространство имен kube-public.

  5. Установите ALB Ingress Controller.

  6. (Опционально) Установите ExternalDNS c плагином для Yandex Cloud DNS, чтобы автоматически создать DNS-запись в Yandex Cloud DNS при создании Ingress-контроллера.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры входят:

  • Плата за использование мастера Managed Service for Kubernetes и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer).
  • Плата за публичные DNS-запросы и зоны DNS, если вы используете Yandex Cloud DNS (см. тарифы Cloud DNS).

Подготовьте цель тестированияПодготовьте цель тестирования

В этой инструкции в качестве цели тестирования будет использоваться gRPC-сервис.

  1. Сохраните следующую спецификацию для создания приложения в файле grpc-server.yaml:

    ### Deployment.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-app
      labels:
        app: grpc-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: grpc-app
      template:
        metadata:
          name: grpc-app
          labels:
            app: grpc-app
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: app
                        operator: In
                        values:
                          - grpc-app
                  topologyKey: "kubernetes.io/hostname"
    
          containers:
            - name: grpc-app
              image: cr.yandex/crp6a9o7k9q5rrtt2hoq/grpc-test-server
              resources:
                requests:
                  memory: "256Mi"
                  cpu: "500m"
                limits:
                  memory: "500Mi"
                  cpu: "1"
    ---
    ### Service.
    apiVersion: v1
    kind: Service
    metadata:
      name: grpc-service
    spec:
      selector:
        app: grpc-app
      type: NodePort
      ports:
        - name: grpc
          port: 80
          targetPort: 8080
          protocol: TCP
          nodePort: 30085
    
  2. Создайте приложение:

    kubectl apply -f grpc-server.yaml
    

Подготовьте доменПодготовьте домен

  1. Создайте публичную зону DNS и делегируйте домен.

    Примечание

    Для домена example.com зона должна называться example.com. (с точкой в конце).

  2. Добавьте сертификат от Let's Encrypt®.

  3. Пройдите процедуры проверки прав на домен.

Установите IngressУстановите Ingress

  1. Создайте манифест ресурса Ingress в файле ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: grpc-demo
      annotations:
        ingress.alb.yc.io/subnets: <идентификаторы_подсетей>
        ingress.alb.yc.io/external-ipv4-address: auto 
        ingress.alb.yc.io/protocol: grpc
        ingress.alb.yc.io/security-groups: <идентификатор_группы_безопасности>
    spec:
      tls:
        - hosts:
            - <имя_сайта>
          secretName: yc-certmgr-cert-id-<идентификатор_сертификата> 
      rules:
        - host: <имя_сайта>
          http:
            paths:
              - pathType: Prefix
                path: "/api.Adder/Add"
                backend:
                  service:
                    name: grpc-service
                    port:
                      number: 80
              - pathType: Prefix
                path: "/grpc.reflection.v1alpha.ServerReflection"
                backend:
                  service:
                    name: grpc-service
                    port:
                      number: 80
    

    Где:

    • ingress.alb.yc.io/subnets — список идентификаторов подсетей через запятую.

    • ingress.alb.yc.io/external-ipv4-address — предоставление публичного доступа к Application Load Balancer из интернета.

      При значении auto Ingress-контроллер получит публичный IP-адрес автоматически. При удалении Ingress-контроллера IP-адрес также будет удален из облака.

    • ingress.alb.yc.io/security-groups — идентификатор группы безопасности, созданной при подготовке облака к работе. Если в вашем облаке не включены группы безопасности, удалите эту аннотацию.

    • secretName — указание на TLS-сертификат из Yandex Certificate Manager в формате yc-certmgr-cert-id-<идентификатор_сертификата>.

    • hosts, host — доменное имя, которому соответствует TLS-сертификат.

    Подробнее см. поля и аннотации ресурса Ingress.

  2. Создайте ресурс Ingress:

    kubectl apply -f ingress.yaml
    
  3. Проверьте, что ресурс создан и получил публичный IP-адрес:

    kubectl get ingress grpc-demo
    

    Результат:

    NAME       CLASS   HOSTS        ADDRESS     PORTS    AGE
    grpc-demo  <none>  <имя_сайта>  <IP-адрес>  80, 443  2m
    

    Где:

    • <имя_сайта> — доменное имя, которому соответствует TLS-сертификат.
    • <IP-адрес> — IP-адрес сайта.

    В столбце ADDRESS должен появиться IP-адрес. В противном случае балансировщик не создался или создался некорректно — проверьте логи пода yc-alb-ingress-controller-*.

  4. Если вы не устанавливали ExternalDNS c плагином для Cloud DNS, создайте в Cloud DNS A-запись, указывающую на публичный адрес балансировщика. При использовании ExternalDNS c плагином для Cloud DNS запись создастся автоматически.

Настройте горизонтальное автомасштабирование подовНастройте горизонтальное автомасштабирование подов

  1. Создайте файл hpa.yaml со спецификацией Horizontal Pod Autoscaler:

    ### HPA.
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: grpc-app
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: grpc-app
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: External
          external:
          metric:
            name: "load_balancer.requests_count_per_second"
            selector:
              matchLabels:
                service: "application-load-balancer"
                load_balancer: <идентификатор_балансировщика>
                code: "total"
                backend_group: <идентификаторы_группы_бэкендов>
          target:
            type: AverageValue
            averageValue: 2
    

    Где:

    • load_balancer — идентификатор L7-балансировщика.
    • backend_group — идентификатор группы бэкендов.

    Найти их можно в консоли Application Load Balancer или выполнив команды:

    yc alb load-balancer list
    yc alb backend-group list
    
  2. Создайте Horizontal Pod Autoscaler:

    kubectl apply -f hpa.yaml
    

Проведите нагрузочное тестирование gRPC-сервисаПроведите нагрузочное тестирование gRPC-сервиса

  1. Создайте сервисный аккаунт:

    1. Создайте сервисный аккаунт sa-loadtest в каталоге, где будет размещаться агент, с которого будет подаваться нагрузка.

    2. Назначьте роли сервисному аккаунту:

      • loadtesting.generatorClient — позволяет запускать агент, тест на агенте и загружать результаты в хранилище.
      • compute.admin — позволяет управлять виртуальной машиной в Yandex Compute Cloud.
      • vpc.user — позволяет подключаться к сетевым ресурсам Yandex Virtual Private Cloud и использовать их.
  2. Создайте и настройте NAT-шлюз в подсети, где размещается цель тестирования и будет размещен агент. Это обеспечит доступ агента к сервису Yandex Load Testing.

  3. Создайте агент тестирования.

  4. Подготовьте файл с тестовыми данными ammo.json:

    {"tag": "/Add", "call": "api.Adder.Add", "payload": {"x": 21, "y": 12}}
    
  5. Подготовьте файл конфигурации load.yaml:

    phantom:
      enabled: false
      package: yandextank.plugins.Phantom
    pandora:
      enabled: true
      package: yandextank.plugins.Pandora
      config_content:
        pools:
        - id: Gun
          gun:
            type: grpc
            target: <название_вашего_сайта>:<порт>
            tls: true
          ammo:
            type: grpc/json
            file: ammo.json
          result:
            type: phout
            destination: ./phout.log
          rps:
            - duration: 60s
              type: line
              from: 1
              to: 10
          startup:
            - type: once
              times: 1000
        log:
          level: debug
        monitoring:
          expvar:
          enabled: true
          port: 1234
    autostop:
        enabled: true
        package: yandextank.plugins.Autostop
        autostop:
          - limit (5m)
    uploader:
      enabled: true
      package: yandextank.plugins.DataUploader
      job_name: '[pandora][grpc][tls]'
      job_dsc: ''
      ver: ''
      api_address: loadtesting.api.cloud.yandex.net:443
    
  6. Запустите тест:

    • В блоке Прикрепленные файлы нажмите Выбрать файлы и выберите сохраненный ранее файл ammo.json.

    • В блоке настроек Настройки теста:

      • В поле Способ настройки выберите Конфигурационный файл.
      • В поле Файл конфигурации нажмите Выбрать файлы и загрузите подготовленный ранее файл load.yaml.
  7. Наблюдайте за прохождением теста:

    1. В консоли управления выберите сервис Managed Service for Kubernetes.
    2. Выберите ваш тестовый кластер Managed Service for Kubernetes.
    3. Перейдите на вкладку Рабочая нагрузка.
    4. Наблюдайте за изменением количества подов приложения по мере увеличения и уменьшения нагрузки.
    5. По завершении теста в консоли управления выберите сервис Application Load Balancer.
    6. Выберите созданный L7-балансировщик.
    7. Перейдите на вкладку Мониторинг.
    8. Просмотрите графики нагрузки за время работы теста.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

  1. Если вы настраивали CNAME-записи в Cloud DNS, удалите зону DNS.
  2. Удалите L7-балансировщик.
  3. Удалите кластер Managed Service for Kubernetes.
  4. Удалите таблицу маршрутизации.
  5. Удалите NAT-шлюз.

Была ли статья полезна?

Предыдущая
Запись логов балансировщика в PostgreSQL
Следующая
Настройка Gateway API в Yandex Managed Service for Kubernetes
Проект Яндекса
© 2025 ООО «Яндекс.Облако»