logo
Alauda Container Platform
English
Русский
English
Русский
logo
Alauda Container Platform
Навигация

Обзор

Архитектура
Примечания к выпуску

Установка

Обзор

Подготовка к установке

Предварительные требования
Загрузка
Предварительная обработка узлов
Установка
Восстановление после катастрофы для глобального кластера

Обновление

Обзор
Подготовка к обновлению
Обновление глобального кластера
Обновление рабочих кластеров

Пользовательский интерфейс

Веб-консоль

Обзор
Доступ к веб-консоли
Настройка веб-консоли
Настройка левой навигации

CLI Инструменты

ACP CLI (ac)

Начало работы с ACP CLI
Настройка ACP CLI
Использование команд ac и kubectl
Управление профилями CLI
Расширение ACP CLI с помощью плагинов
AC CLI Developer Command Reference
AC CLI Справочник команд администратора
violet CLI

Настройка

Конфигурация Feature Gate

Кластеры

Обзор
Неизменяемая инфраструктура

Управление узлами

Обзор
Добавление узлов в локальные кластеры
Управление узлами
Мониторинг узлов

Управляемые кластеры

обзор

Импорт кластеров

Обзор
Импорт стандартного кластера Kubernetes
Импорт кластера OpenShift
Импорт кластера Amazon EKS
Импорт кластера GKE
Импорт кластера Huawei Cloud CCE (публичное облако)
Импорт кластера Azure AKS
Импорт кластера Alibaba Cloud ACK
Импорт кластера Tencent Cloud TKE
Регистрация кластера

Инициализация кластера в публичном облаке

Инициализация сети

Конфигурация инициализации сети кластера AWS EKS
Дополнительная информация по AWS EKS
Инициализация конфигурации сети кластера Huawei Cloud CCE
Конфигурация инициализации сети кластера Azure AKS
Конфигурация инициализации сети кластера Google GKE

Инициализация хранилища

Обзор
Конфигурация инициализации хранилища кластера AWS EKS
Инициализация конфигурации хранилища кластера Huawei Cloud CCE
Конфигурация инициализации хранилища кластера Azure AKS
Конфигурация инициализации хранилища кластера Google GKE

Как сделать

Настройка сети для импортируемых кластеров
Получение информации о импортируемом кластере
Доверие небезопасному реестру образов
Сбор сетевых данных с сетевых карт с пользовательскими именами
Создание локального кластера
Хостинг контрольной плоскости
Планирование узлов кластера
Шифрование etcd

Как сделать

Добавление внешнего адреса для встроенного реестра
Выбор контейнерного рантайма
Обновление учетных данных публичного репозитория

Резервное копирование и восстановление

Обзор
Установка
Репозиторий резервного копирования

Управление резервным копированием

Резервное копирование ETCD
Создание расписания резервного копирования приложения
Хуки

Управление восстановлением

Выполнение задачи восстановления приложения
Замена реестра образов

Сетевые взаимодействия

Введение

Архитектура

Понимание Kube-OVN
Понимание ALB
Понимание MetalLB

Основные понятия

Совместимость ALB с аннотациями Ingress-NGINX
Сравнение Service, Ingress, Gateway API и ALB Rule
GatewayAPI

Руководства

Создание сервисов
Создание Ingress
Создание доменного имени
Создание сертификатов
Создание пула внешних IP-адресов
Создание BGP-пиров
Настройка подсетей
Настройка сетевых политик
Создание Admin Network Policies
Настройка сети Kube-OVN для поддержки нескольких сетевых интерфейсов Pod (Alpha)
Настройка сетевых политик кластера
Настройка Egress Gateway
Наблюдаемость сети
Настройка правил ALB
Межкластерное соединение (Alpha)
Endpoint Health Checker
NodeLocal DNSCache

Как сделать

Подготовка физической сети Kube-OVN Underlay
Soft Data Center LB Solution (Alpha)
Автоматическое взаимное подключение подсетей Underlay и Overlay
Установка Ingress-Nginx через Cluster Plugin
Установка Ingress-Nginx через Ingress Nginx Operator
Задачи для Ingress-Nginx

ALB

Auth
Развертывание высокодоступного VIP для ALB
Модификация заголовков
HTTP Redirect
L4/L7 Таймаут
ModSecurity
TCP/HTTP Keepalive
Использование OAuth Proxy с ALB
Настройка GatewayApi Gateway через ALB
Привязка NIC в ALB
Принятие решений по выбору производительности ALB
Развертывание ALB
Проброс IPv6-трафика на IPv4-адреса внутри кластера через ALB
OTel
ALB Monitoring
CORS
Политика сессионной аффинности балансировки нагрузки в ALB
Перезапись URL
Calico Network поддерживает шифрование WireGuard
Kube-OVN Overlay Network поддерживает шифрование IPsec
Руководство пользователя DeepFlow

Устранение неполадок

Как решить проблемы межузловой коммуникации в ARM-средах?
Определение причины ошибки

Хранение

Введение

Основные понятия

Основные понятия
Persistent Volume
Режимы доступа и режимы томов

Руководства

Создание Storage Class типа CephFS File Storage
Создание класса блочного хранилища CephRBD
Создание локального Storage Class TopoLVM
Создание общего класса хранения NFS
Развертывание компонента Volume Snapshot
Создание PV
Создание PVC
Использование снимков томов

Как сделать

Generic ephemeral volumes
Использование emptyDir
Настройка постоянного хранилища с использованием NFS
Руководство по аннотированию возможностей стороннего хранилища

Устранение неполадок

Восстановление после ошибки расширения PVC
Конфигурация машины

Масштабируемость и производительность

Оценка ресурсов для глобального кластера
Оценка ресурсов для рабочей нагрузки кластера
Повышение стабильности Kubernetes для крупных кластеров
Конфигурация диска

Хранение

Распределённое хранилище Ceph

Введение

Установка

Создание кластера стандартного типа
Создание Stretch Type кластера
Архитектура

Основные понятия

Основные концепции

Руководства

Доступ к сервисам хранения
Управление Storage Pools
Развертывание компонентов на конкретных узлах
Добавление устройств/классов устройств
Мониторинг и оповещения

Как сделать

Настройка выделенного кластера для распределённого хранилища
Очистка распределённого хранилища

Восстановление после сбоев

Восстановление после сбоев файлового хранилища
Восстановление после сбоев блочного хранилища
Восстановление после сбоев в объектном хранилище
Обновление параметров оптимизации
Создание пользователя ceph object store

MinIO Object Storage

Введение
Установка
Архитектура

Основные понятия

Основные концепции

Руководства

Добавление пула хранения
Мониторинг и оповещения

Как сделать

Восстановление данных после аварий

Локальное хранилище TopoLVM

Введение
Установка

Руководства

Управление устройствами
Мониторинг и оповещения

Как сделать

Резервное копирование и восстановление PVC файловой системы TopoLVM с помощью Velero

Безопасность

Alauda Container Security

Безопасность и соответствие

Соответствие требованиям

Введение
Установка Alauda Container Platform Compliance с Kyverno

Как сделать

Конфигурация доступа к приватному реестру
Политика проверки подписи образов
Политика проверки подписей образов с использованием Secrets
Политика проверки реестра образов
Политика предотвращения выхода из контейнера
Политика Принудительного Применения Security Context
Политика сетевой безопасности
Политика безопасности томов

API Refiner

Введение
Установка Alauda Container Platform API Refiner
О сервисе соответствия Alauda Container Platform

Пользователи и роли

Пользователь

Введение

Руководства

Управление ролями пользователей
Создание пользователя
Управление пользователями

Группа

Введение

Руководства

Управление ролями групп пользователей
Создание локальной группы пользователей
Управление членством в локальной группе пользователей

Роль

Введение

Руководства

Создание роли
Управление пользовательскими ролями

IDP

Введение

Руководства

Управление LDAP
Управление OIDC

Устранение неполадок

Удаление пользователя

Политика пользователя

Введение

Мультиарендность (Project)

Введение

Руководства

Создание проекта
Управление квотами проекта
Управление проектом
Управление кластером проекта
Управление участниками проекта

Аудит

Введение

Телеметрия

Установка

Сертификаты

Автоматическая ротация сертификатов Kubernetes
cert-manager
Сертификаты OLM
Мониторинг сертификатов

Виртуализация

Виртуализация

Обзор

Введение
Установка

Образы

Введение

Руководства

Добавление образов виртуальных машин
Обновление/Удаление образов виртуальных машин
Обновление/удаление учетных данных образа

Как сделать

Создание образов Windows на основе ISO с использованием KubeVirt
Создание образов Linux на основе ISO с использованием KubeVirt
Экспорт образов виртуальных машин
Разрешения

Виртуальная машина

Введение

Руководства

Создание виртуальных машин/групп виртуальных машин
Пакетные операции с виртуальными машинами
Вход в виртуальную машину с использованием VNC
Управление ключевыми парами
Управление виртуальными машинами
Мониторинг и оповещения
Быстрый поиск виртуальных машин

Как сделать

Настройка проброса USB-хоста
Горячая миграция виртуальной машины
Восстановление виртуальной машины
Клонирование виртуальных машин в KubeVirt
Подготовка среды для физического GPU Passthrough
Настройка высокой доступности для виртуальных машин
Создание шаблона ВМ на основе существующей виртуальной машины

Устранение неполадок

Миграция Pod виртуальных машин и восстановление после аварийного завершения работы узлов виртуальных машин
Сообщения об ошибках горячей миграции и решения

Сеть

Введение

Руководства

Настройка сети

Как сделать

Контроль сетевых запросов виртуальной машины через Network Policy
Настройка SR-IOV
Настройка виртуальных машин для использования режима сетевого биндинга с поддержкой IPv6

Хранение данных

Введение

Руководства

Управление виртуальными дисками

Резервное копирование и восстановление

Введение

Руководства

Использование снимков

Разработчик

Обзор

Быстрый старт

Creating a simple application via image

Создание приложений

Построение архитектуры приложения

Основные понятия

Типы приложений
Custom Applications
Типы рабочих нагрузок
Понимание параметров
Понимание переменных окружения
Понимание команд запуска
Описание единиц ресурсов

Пространства имён

Создание пространств имён
Импорт пространств имён
Resource Quota
Limit Range
Pod Security Admission
Назначение UID/GID
Коэффициент Overcommit
Управление участниками пространства имён
Обновление Namespaces
Удаление/Исключение Namespaces

Создание приложений

Создание приложений из образа
Создание приложений из Chart
Создание приложений из YAML
Создание приложений из кода
Creating applications from Operator Backed
Создание приложений с использованием CLI

Эксплуатация и сопровождение приложений

Развертывание приложений

Установка Alauda Container Platform Argo Rollouts
Application Blue Green Deployment
Application Canary Deployment
Описание статуса

KEDA (Kubernetes Event-driven Autoscaling)

KEDA Overview
Установка KEDA

Как сделать

Интеграция ACP Monitoring с плагином Prometheus
Приостановка автоскейлинга в KEDA
Настройка HPA
Запуск и остановка приложений
Настройка VerticalPodAutoscaler (VPA)
Настройка CronHPA
Обновление приложений
Экспорт приложений
Обновление и удаление Chart-приложений
Управление версиями приложений
Удаление приложений
Обработка ошибок нехватки ресурсов
Проверки состояния

Рабочие нагрузки

Deployments
DaemonSets
StatefulSets
CronJobs
Jobs
Pods
Контейнеры
Работа с Helm charts

Конфигурации

Настройка ConfigMap
Настройка Secrets

Наблюдаемость приложения

Мониторинговые панели
Логи
События

Как сделать

Настройка правил срабатывания планировщика задач

Образы

Обзор образов

Как сделать

Создание образов
Управление образами

Реестр

Введение

Установка

Установка через YAML
Установка через Web UI

Руководство пользователя

Распространённые операции с командами CLI
Using Alauda Container Platform Registry in Kubernetes Clusters

Source to Image

Обзор

Введение
Архитектура
Примечания к выпуску
Политика жизненного цикла

Установка

Installing Alauda Container Platform Builds

Обновление

Обновление сборок Alauda Container Platform

Руководства

Управление приложениями, созданными из кода

Как сделать

Создание приложения из кода

Стратегия изоляции узлов

Введение
Архитектура

Основные понятия

Основные понятия

Руководства

Создание стратегии изоляции узлов
Разрешения
Часто задаваемые вопросы

GitOps

Введение

Установка

Установка Alauda Build of Argo CD
Установка Alauda Container Platform GitOps

Обновление

Обновление Alauda Container Platform GitOps
Архитектура

Основные понятия

GitOps

Концепция Argo CD

Введение
Application
ApplicationSet
Tool
Helm
Kustomize
Directory
Sync
Health

Концепции GitOps в Alauda Container Platform

Введение
Alauda Container Platform GitOps Sync and Health Status

Руководства

Создание GitOps приложения

Creating GitOps Application
Creating GitOps ApplicationSet

Наблюдаемость GitOps

Argo CD Component Monitoring
GitOps Applications Ops

Как сделать

Интеграция репозиториев кода через панель управления Argo CD
Создание приложения Argo CD через панель управления Argo CD
Создание Argo CD Application через веб-консоль
Как получить информацию для доступа к Argo CD
Устранение неполадок

Расширение

Обзор
Оператор
Плагин кластера
Загрузка пакетов

Наблюдаемость

Обзор

Мониторинг

Введение
Установка

Архитектура

Архитектура модуля мониторинга
Руководство по выбору компонента мониторинга
Планирование ёмкости компонента мониторинга
Основные понятия

Руководства

Управление метриками
Управление оповещениями
Управление уведомлениями
Управление мониторинговыми панелями
Управление Probe

Как сделать

Резервное копирование и восстановление данных мониторинга Prometheus
Резервное копирование и восстановление данных мониторинга VictoriaMetrics
Сбор сетевых данных с сетевых интерфейсов с пользовательскими именами

Распределённое трассирование

Введение
Установка
Архитектура
Основные понятия

Руководства

Query Tracing
Query Trace Logs

Как сделать

Безвредная интеграция трассировки в Java-приложения
Бизнес-логи, связанные с TraceID

Устранение неполадок

Невозможно выполнить запрос требуемого трассирования
Неполные данные трассировки

Логи

Введение
Установка

Архитектура

Архитектура модуля логирования
Руководство по выбору компонента логирования
Планирование ёмкости компонента логирования
Основные понятия

Руководства

Логи

Как сделать

Как архивировать логи в стороннее хранилище
Как взаимодействовать с внешними кластерами ES Storage

События

Введение
События

Инспекция

Введение
Архитектура

Руководства

Inspection
Component Health Status

Аппаратные ускорители

О Alauda Build of Hami
О плагине устройства NVIDIA GPU от Alauda Build

Alauda Service Mesh

Service Mesh 1.x
Service Mesh 2.x

Alauda AI

О Alauda AI

Alauda DevOps

О платформе Alauda DevOps

Управление затратами Alauda

О системе управления затратами Alauda

Alauda Application Services

Обзор

Введение
Архитектура
Установка
Обновление

Alauda Database Service для MySQL

О сервисе Alauda Database Service для MySQL-MGR
О сервисе Alauda Database Service для MySQL-PXC

Сервис кэширования Alauda для Redis OSS

О сервисе Alauda Cache Service for Redis OSS

Alauda Streaming Service for Kafka

О сервисе Alauda Streaming Service for Kafka

Сервис потоковой передачи Alauda для RabbitMQ

О сервисе Alauda Streaming Service for RabbitMQ

Поддержка PostgreSQL в Alauda

О поддержке PostgreSQL в Alauda

Управление операциями

Введение

Управление шаблонами параметров

Введение

Руководства

Управление шаблонами параметров

Управление резервным копированием

Введение

Руководства

Внешнее хранилище S3
Управление резервным копированием

Управление инспекциями

Введение

Руководства

Создание задачи инспекции
Задача Exec Inspection
Обновление и удаление задач инспекции

Как сделать

Как настроить расписание инспекций?

Рекомендации по оптимизации инспекций

MySQL

Оптимизация IO нагрузки MySQL
Оптимизация использования памяти MySQL
Оптимизация использования дискового пространства MySQL
Оптимизация количества активных потоков MySQL
Оптимизация блокировок строк MySQL

Redis

Redis BigKey
Высокая загрузка CPU в Redis
Высокое использование памяти в Redis

Kafka

Высокая загрузка CPU в Kafka
Оптимизация Rebalance в Kafka
Оптимизация использования памяти Kafka
Оптимизация пространства хранения Kafka

RabbitMQ

Обработка исключений базы данных RabbitMQ Mnesia

Управление оповещениями

Введение

Руководства

Взаимосвязь с возможностями платформы

Управление обновлениями

Введение

Руководства

Обновление экземпляра

Справочник API

Обзор

Введение
Руководство по использованию Kubernetes API

Advanced APIs

Alert APIs

AlertHistories [v1]
AlertHistoryMessages [v1]
AlertStatus [v2]
SilenceStatus [v2]

Event APIs

Search

Log APIs

Aggregation
Archive
Context
Search

Monitoring APIs

Indicators [monitoring.alauda.io/v1beta1]
Metrics [monitoring.alauda.io/v1beta1]
Variables [monitoring.alauda.io/v1beta1]

Kubernetes APIs

Alert APIs

AlertTemplate [alerttemplates.aiops.alauda.io/v1beta1]
PrometheusRule [prometheusrules.monitoring.coreos.com/v1]

Inspection APIs

Inspection [inspections.ait.alauda.io/v1alpha1]

Notification APIs

Notification [notifications.ait.alauda.io/v1beta1]
NotificationGroup [notificationgroups.ait.alauda.io/v1beta1]
NotificationTemplate [notificationtemplates.ait.alauda.io/v1beta1]
Предыдущая страницаПроброс IPv6-трафика на IPv4-адреса внутри кластера через ALB
Следующая страницаALB Monitoring

Просмотреть полную документацию в формате PDF

#OTel

OpenTelemetry (OTel) — это проект с открытым исходным кодом, направленный на предоставление независимого от поставщика стандарта для сбора, обработки и экспорта телеметрических данных в распределённых системах, таких как архитектуры микросервисов. Он помогает разработчикам проще анализировать производительность и поведение программного обеспечения, что облегчает диагностику и устранение проблем в приложениях.

#Содержание

#Терминология

ТерминОбъяснение
TraceДанные, отправляемые на OTel Server, представляющие собой набор связанных событий или операций, используемых для отслеживания потока запросов в распределённых системах; каждый Trace состоит из нескольких Spans.
SpanНезависимая операция или событие внутри Trace, включающая время начала, длительность и другую релевантную информацию.
OTel ServerСервер OTel, способный принимать и хранить данные Trace, например Jaeger, Prometheus и др.
JaegerСистема распределённого трассирования с открытым исходным кодом, используемая для мониторинга и отладки архитектур микросервисов, поддерживающая интеграцию с OpenTelemetry.
AttributesПары ключ-значение, прикреплённые к Trace или Span для предоставления дополнительной контекстной информации. Включает Resource Attributes и Span Attributes; см. Attributes для подробностей.
SamplerКомпонент стратегии, определяющий, следует ли сэмплировать и отправлять Trace. Можно настроить различные стратегии сэмплирования, такие как полное сэмплирование, пропорциональное и др.
ALB (Another Load Balancer)Программное или аппаратное устройство, распределяющее сетевые запросы между доступными узлами в кластере; балансировщик нагрузки (ALB), используемый на платформе, является программным балансировщиком уровня 7, который можно настроить для мониторинга трафика с помощью OTel. ALB поддерживает отправку Trace на указанный Collector и позволяет использовать разные стратегии сэмплирования; также поддерживает настройку отправки Trace на уровне Ingress.
FT (Frontend)Конфигурация порта для ALB, задающая настройки на уровне порта.
RuleПравила маршрутизации на порту (FT), используемые для сопоставления конкретных маршрутов.
HotROD (Rides on Demand)Пример приложения, предоставляемый Jaeger для демонстрации использования распределённого трассирования; подробности см. в Hot R.O.D. - Rides on Demand.
hotrod-with-proxyУказывает адреса внутренних микросервисов HotROD через переменные окружения; подробности см. в hotrod-with-proxy.

#Предварительные требования

  • Убедитесь, что существует работоспособный ALB: Создайте или используйте существующий ALB, имя которого в данном документе заменено на <otel-alb>. Инструкции по созданию ALB см. в Deploy ALB.

  • Убедитесь, что имеется адрес сервера отчёта данных OTel: Этот адрес далее будет называться <jaeger-server>.

#Процедура

#Обновление конфигурации ALB

  1. На Master-узле кластера используйте CLI для выполнения команды редактирования конфигурации ALB:

    kubectl edit alb2 -n cpaas-system <otel-alb> # Замените <otel-alb> на фактическое имя ALB
  2. Добавьте следующие поля в раздел spec.config:

    otel:
      enable: true
      exporter:
        collector:
          address: "<jaeger-server>" # Замените <jaeger-server> на фактический адрес сервера отчёта данных OTel
          request_timeout: 1000

    Пример окончательной конфигурации:

    spec:
      address: 192.168.1.1
      config:
        otel:
         enable: true
         exporter:
           collector:
             address: "http://jaeger.default.svc.cluster.local:4318"
             request_timeout: 1000
        antiAffinityKey: system
        defaultSSLCert: cpaas-system/cpaas-system
        defaultSSLStrategy: Both
        gateway:
        ...
    type: nginx
  3. Выполните команду для сохранения изменений:

    :wq

    После обновления ALB по умолчанию будет включён OpenTelemetry, и вся информация о Trace запросов будет отправляться на Jaeger Server.

#Связанные операции

#Настройка OTel в Ingress

  • Включение или отключение OTel на Ingress

    Настройка включения OTel на Ingress позволяет лучше мониторить и отлаживать поток запросов приложений, выявляя узкие места производительности или ошибки путём трассировки запросов при их прохождении между сервисами.

    Процедура

    Добавьте следующую аннотацию в поле metadata.annotations Ingress:

    nginx.ingress.kubernetes.io/enable-opentelemetry: "true"

    Объяснение параметра:

    • nginx.ingress.kubernetes.io/enable-opentelemetry: При значении true контроллер Ingress включает функциональность OpenTelemetry при обработке запросов через этот Ingress, что означает сбор и отправку информации о Trace запросов. При значении false или отсутствии этой аннотации сбор и отправка Trace не выполняются.
  • Включение или отключение доверия OTel на Ingress

    OTel Trust определяет, доверяет ли Ingress и использует ли информацию Trace (например, trace ID) из входящих запросов.

    Процедура

    Добавьте следующую аннотацию в поле metadata.annotations Ingress:

    nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span: "true"

    Объяснение параметра:

    • nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span: При значении true Ingress продолжает использовать уже существующую информацию Trace, что помогает поддерживать согласованность в межсервисном трассировании, позволяя полностью проследить и проанализировать всю цепочку запросов в системе распределённого трассирования. При значении false для запроса будет сгенерирована новая информация трассировки, что может привести к тому, что запрос будет рассматриваться как часть новой цепочки трассировки после входа в Ingress, прерывая непрерывность межсервисного трассирования.
  • Добавление различных конфигураций OTel на Ingress

    Эта настройка позволяет кастомизировать поведение OTel и методику экспорта данных для разных ресурсов Ingress, обеспечивая тонкий контроль над стратегией трассирования или целевым назначением для каждого сервиса.

    Процедура

    Добавьте следующую конфигурацию в поле metadata.annotations Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.cpaas.io/otel: >
          {
             "enable": true,
             "exporter": {
                 "collector": {
                     "address": "<jaeger-server>", # Замените <jaeger-server> на фактический адрес сервера отчёта данных OTel, например "address": "http://128.0.0.1:4318"
                     "request_timeout": 1000
                 }
             }
          }

    Объяснение параметров:

    • exporter: Определяет способ отправки собранных данных Trace на OTel Collector (сервер отчёта данных OTel).
    • address: Адрес OTel Collector.
    • request_timeout: Таймаут запроса.

#Использование OTel в приложениях

Ниже приведена полная структура конфигурации OTel, которая может использоваться для определения включения и использования возможностей OTel в приложениях.

На Master-узле кластера выполните команду CLI для получения полной структуры конфигурации OTel:

kubectl get crd alaudaloadbalancer2.crd.alauda.io -o json|jq ".spec.versions[2].schema.openAPIV3Schema.properties.spec.properties.config.properties.otel"

Результат:

{
    "otel": {
        "enable": true
    }
    "exporter": {
        "collector": {
            "address": ""
          },
    },
    "flags": {
        "hide_upstream_attrs": false
        "notrust_incoming_span": false
        "report_http_request_header": false
        "report_http_response_header": false
    },
    "sampler": {
        "name": "",
        "options": {
            "fraction": ""
            "parent_name": ""
          },
      },
 }

Объяснение параметров:

ПараметрОписание
otel.enableВключение функциональности OTel.
exporter.collector.addressАдрес сервера отчёта данных OTel, поддерживает протоколы http/https и доменные имена.
flags.hide_upstream_attrsОтчёт информации о правилах upstream.
flag.notrust_incoming_spanДоверие и использование информации Trace OTel (например, trace ID) из входящих запросов.
flags.report_http_request_headerОтчёт заголовков запросов.
flags.report_http_response_headerОтчёт заголовков ответов.
sampler.nameИмя стратегии сэмплирования; подробности см. в Sampling Strategies.
sampler.options.fractionДоля сэмплирования.
sampler.options.parent_nameРодительская стратегия для стратегий parent_base.

#Наследование

По умолчанию, если в ALB настроены определённые параметры OTel, а в FT они не настроены, FT наследует параметры от ALB как свою конфигурацию; то есть FT наследует конфигурацию ALB, а Rule может наследовать конфигурации как от ALB, так и от FT.

  • ALB: Конфигурация на ALB обычно глобальная и по умолчанию. Здесь можно настроить глобальные параметры, например адреса Collector, которые будут унаследованы нижестоящими FT и Rule.

  • FT: FT может наследовать конфигурации от ALB, то есть параметры OTel, не настроенные в FT, будут использовать настройки ALB. При этом FT можно дополнительно уточнять; например, можно выборочно включать или отключать OTel на FT без влияния на другие FT или глобальные настройки ALB.

  • Rule: Rule может наследовать конфигурации как от ALB, так и от FT. При этом Rule также можно уточнять; например, конкретное правило может отказаться от доверия входящей информации Trace OTel или изменить стратегии сэмплирования.

Процедура

Настройте поле spec.config.otel в YAML-файлах ALB, FT и Rule для добавления конфигурации, связанной с OTel.

#Дополнительные сведения

#Стратегии сэмплирования

ПараметрОбъяснение
always onВсегда отправлять все данные трассировки.
always offНикогда не отправлять данные трассировки.
traceid-ratioРешение об отправке принимается на основе traceid. Формат traceparent — xx-traceid-xx-flag, где первые 16 символов traceid представляют 32-битное шестнадцатеричное число. Если это число меньше fraction, умноженного на 4294967295 (то есть (2^32-1)), данные будут отправлены.
parent-baseРешение об отправке принимается на основе флага в traceparent запроса. При флаге 01 данные отправляются; например: curl -v "http://$ALB_IP/" -H 'traceparent: 00-xx-xx-01'. При флаге 02 данные не отправляются; например: curl -v "http://$ALB_IP/" -H 'traceparent: 00-xx-xx-02'.

#Атрибуты

  • Resource Attributes

    Эти атрибуты отправляются по умолчанию.

    ПараметрОписание
    hostnameИмя хоста Pod ALB
    service.nameИмя ALB
    service.namespaceПространство имён, где расположен ALB
    service.typeПо умолчанию ALB
    service.instance.idИмя Pod ALB
  • Span Attributes

    • Атрибуты, отправляемые по умолчанию:

      ПараметрОписание
      http.status_codeКод состояния
      http.request.resend_countКоличество повторных попыток
      alb.rule.rule_nameИмя правила, с которым совпал данный запрос
      alb.rule.source_typeТип правила, с которым совпал запрос, в настоящее время только Ingress
      alb.rule.source_nameИмя Ingress
      alb.rule.source_nsПространство имён, где расположен Ingress
    • Атрибуты, отправляемые по умолчанию, но могут быть исключены изменением поля flag.hide_upstream_attrs:

      ПараметрОписание
      alb.upstream.svc_nameИмя Service (внутреннего маршрута), на который перенаправляется трафик
      alb.upstream.svc_nsПространство имён Service (внутреннего маршрута), на который перенаправляется трафик
      alb.upstream.peerIP-адрес и порт Pod, на который перенаправляется трафик
    • Атрибуты, не отправляемые по умолчанию, но могут быть отправлены изменением поля flag.report_http_request_header:

      ПараметрОписание
      **http.request.header.<header>**Заголовок запроса
    • Атрибуты, не отправляемые по умолчанию, но могут быть отправлены изменением поля flag.report_http_response_header:

      ПараметрОписание
      **http.response.header.<header>**Заголовок ответа

#Пример конфигурации

Ниже приведена YAML-конфигурация, которая разворачивает ALB и использует Jaeger в качестве сервера OTel, с Hotrod-proxy в качестве демонстрационного бэкенда. Настройка правил Ingress позволяет при запросах клиентов к ALB перенаправлять трафик на HotROD. Кроме того, взаимодействие между внутренними микросервисами HotROD также маршрутизируется через ALB.

  1. Сохраните следующий YAML в файл с именем all.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hotrod
    spec:
      replicas: 1
      selector:
        matchLabels:
          service.cpaas.io/name: hotrod
          service_name: hotrod
      template:
        metadata:
          labels:
            service.cpaas.io/name: hotrod
            service_name: hotrod
        spec:
          containers:
            - name: hotrod
              env:
                - name: PROXY_PORT
                  value: "80"
                - name: PROXY_ADDR
                  value: "otel-alb.default.svc.cluster.local:"
                - name: OTEL_EXPORTER_OTLP_ENDPOINT
                  value: "http://jaeger.default.svc.cluster.local:4318"
              image: theseedoaa/hotrod-with-proxy:latest
              imagePullPolicy: IfNotPresent
              command: ["/bin/hotrod", "all", "-v"]
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hotrod-frontend
    spec:
      ingressClassName: otel-alb
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: hotrod
                    port:
                      number: 8080
                path: /dispatch
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: hotrod
                    port:
                      number: 8080
                path: /frontend
                pathType: ImplementationSpecific
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hotrod-customer
    spec:
      ingressClassName: otel-alb
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: hotrod
                    port:
                      number: 8081
                path: /customer
                pathType: ImplementationSpecific
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hotrod-route
    spec:
      ingressClassName: otel-alb
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: hotrod
                    port:
                      number: 8083
                path: /route
                pathType: ImplementationSpecific
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: hotrod
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: frontend
          port: 8080
          protocol: TCP
          targetPort: 8080
        - name: customer
          port: 8081
          protocol: TCP
          targetPort: 8081
        - name: router
          port: 8083
          protocol: TCP
          targetPort: 8083
      selector:
        service_name: hotrod
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: jaeger
    spec:
      replicas: 1
      selector:
        matchLabels:
          service.cpaas.io/name: jaeger
          service_name: jaeger
      template:
        metadata:
          labels:
            service.cpaas.io/name: jaeger
            service_name: jaeger
        spec:
          containers:
            - name: jaeger
              env:
                - name: LOG_LEVEL
                  value: debug
              image: jaegertracing/all-in-one:1.58.1
              imagePullPolicy: IfNotPresent
          hostNetwork: true
          tolerations:
            - operator: Exists
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: jaeger
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: http
          port: 4318
          protocol: TCP
          targetPort: 4318
      selector:
        service_name: jaeger
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: crd.alauda.io/v2
    kind: ALB2
    metadata:
      name: otel-alb
    spec:
      config:
        loadbalancerName: otel-alb
        otel:
          enable: true
          exporter:
            collector:
              address: "http://jaeger.default.svc.cluster.local:4318"
              request_timeout: 1000
        projects:
          - ALL_ALL
        replicas: 1
        resources:
          alb:
            limits:
              cpu: 200m
              memory: 2Gi
            requests:
              cpu: 50m
              memory: 128Mi
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: 50m
            memory: 128Mi
      type: nginx
  2. В CLI выполните команду для развертывания Jaeger, ALB, HotROD и всех необходимых CR для тестирования.

    kubectl apply ./all.yaml
  3. Выполните команду для получения адреса доступа к Jaeger.

    export JAEGER_IP=$(kubectl get po -A -o wide |grep jaeger | awk '{print $7}');echo "http://$JAEGER_IP:16686"
  4. Выполните команду для получения адреса доступа к otel-alb.

    export ALB_IP=$(kubectl get po -A -o wide|grep otel-alb | awk '{print $7}');echo $ALB_IP
  5. Выполните команду для отправки запроса к HotROD через ALB. ALB при этом отправит Trace в Jaeger.

    curl -v "http://<$ALB_IP>:80/dispatch?customer=567&nonse=" # Замените <$ALB_IP> в команде на адрес доступа otel-alb, полученный на предыдущем шаге
  6. Откройте адрес доступа Jaeger, полученный в Шаге 3, чтобы просмотреть результаты.