Освоение SONiC: 6 основных моментов для успешного использования открытых сетей

SONiC (Software for Open Networking in the Cloud) — это сетевая операционная система с открытым исходным кодом, которая существенно отличается от других сетевых операционных систем, с которыми вы сталкивались ранее. Изучение SONiC требует новой психологической подготовки и определённых навыков. Поскольку это новая операционная система, которая коренным образом меняет архитектуру сетей, всем, кто изучает SONiC, необходимо понимать и освоить следующие ключевые моменты и навыки.

Основы Linux должны быть освоены

Linux — основа сетевой операционной системы SONiC. В отличие от традиционных сетевых операционных систем (таких как iOS или Junos), которые полностью скрывают базовую реализацию, SONiC предоставляет доступ ко всей системе Linux.

sonic-linux-kernel

От управления службами systemd до развертывания контейнеризированных приложений — каждый уровень требует прямого вмешательства, поэтому вам необходимо:

  • Глубоко понимать структуру файловой системы Linux и быстро находить ключевые файлы конфигурации (например, каталог /etc/sonic/)
  • Умело использовать инструменты анализа журналов (journalctl, grep) для устранения неполадок в различных журналах служб в /var/log/.
  • Главное управление службами systemd (systemctl start/stop/restart/enable)
  • Иметь навыки работы с контейнерами Docker (docker ps/exec/logs/inspect)
  • Понимание сетевых пространств имен Linux и виртуальных сетевых устройств

Перед развертыванием SONiC рекомендуется улучшить свои навыки работы с Linux следующими способами:

  1. Пройдите базовый курс системного администратора Linux
  2. Практика устранения распространенных неполадок в экспериментальной среде
  3. Ознакомьтесь с основами технологии контейнеризации
  4. Освойте базовые навыки написания скриптов Bash

Понимание контейнеризации и развертывания

В SONiC используется архитектура микросервисов, в которой каждый компонент сетевой функции (например, BGP, LLDP и т. д.) выполняется в независимом Docker-контейнере. Это резко контрастирует с монолитной архитектурой традиционных сетевых операционных систем.

Понимание контейнеризации и развертывания

Эта архитектура имеет три ключевые характеристики:

  1. Изоляция компонентов: каждая служба имеет собственную независимую систему журналов, сетевое пространство имен и распределение ресурсов, при этом сбои строго контролируются в рамках одного контейнера.
  2. Динамическая масштабируемость: службы можно запускать и останавливать по требованию, поддерживая оперативные обновления и выпуски в оттенках серого.
  3. Детальное управление: выполнение операций и обслуживания на уровне компонентов с помощью таких команд, как docker exec/restart/logs.

Изучение SONiC требует изменения следующих установок:

  • От «глобальной конфигурации» к «конфигурации компонентов»
  • От «единого журнала» к «распределенной трассировке журналов»
  • От «полного перезапуска» до «горячего обновления сервиса»

Освоение основного компонента Redis

SONiC использует Redis в качестве основной шины данных, обеспечивая разделение конфигурации и состояния посредством нескольких логических баз данных. Для освоения SONiC вам необходимо освоить:

Освоение анализа архитектуры нескольких баз данных

  • CONFIG_DB: Постоянная конфигурация (эквивалент текущей конфигурации в традиционной NOS)
  • STATE_DB: сбор данных о состоянии в реальном времени (аналогично SNMP, но более структурировано)
  • APPL_DB: Шина межпроцессного взаимодействия (инновационный механизм IPC)

Освоение ключевых навыков эксплуатации и обслуживания Redis

  • Используйте redis-cli для быстрого поиска элементов конфигурации
  • Понимание взаимосвязи между моделями YANG и схемой Redis
  • Master swss (служба переключения состояний)

Поэтому рекомендуется для новых обучающихся:

  1. Начните с документации схемы БД, а не работайте напрямую с CLI
  2. Используйте инструмент инкапсуляции sonic-db-cli для снижения эксплуатационных рисков
  3. Внедрить процесс предварительной проверки изменений в базе данных

Освоение основ использования Git

При возникновении проблем в производственной среде репозиторий GitHub часто предоставляет ответы быстрее, чем служба поддержки поставщика.

Основные навыки выживания, которые необходимо освоить:

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

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

  • git cause для отслеживания определенной строки конфигурации
  • Используйте git bisect для быстрого поиска коммита, в котором возникла ошибка.
  • Умело переключайтесь между ветвями сообщества и ветвями, настроенными поставщиком, для пошаговых инструкций на уровне исходного кода.

Ключевые модули

  • swss (конвейер обработки конфигурации)
  • syncd (уровень абстракции ASIC)
  • орчагент (основная бизнес-логика)

DevOps и мышление автоматизации

DevOps и мышление автоматизации

Изучите использование Terraform с декларативным синтаксисом для управления устройствами SONiC:

  • Определить ресурсы коммутатора
  • Управление блоками конфигурации для VLAN, BGP, ACL и т. д.
  • Государственные файлы

Изучите Ansible: пакетное развертывание и настройка

  • Используйте модуль sonic_config для отправки config_db.json
  • Динамически генерировать конфигурации (шаблоны Jinja2 + файлы переменных)

Главное управление конфигурацией (config_db.json), основной метод конфигурирования SONiC, а не традиционный терминал конфигурирования.

Навыки программирования

Возможности программирования SONiC напрямую определяют вашу эксплуатацию и техническое обслуживание.

Питон

  • Разбор config_db.json (json.loads()/json.dumps())
  • Написать пользовательский Orchagent (обрабатывать события Redis DB)
  • Автоматизированное тестирование (фреймворк pytest-sonic)

Bash-скриптинг (инструменты для быстрого выполнения операций и обслуживания)

  • Пакетная обработка контейнеров Docker

Go (разработка облачных компонентов)

  • Участвовать в развитии сообщества SONiC (например, добавлять новые интерфейсы SAI)
  • Написание плагинов K8s CNI (интеграция Calico/SRIOV)
  • Высокопроизводительный агент сетевого мониторинга (заменяющий некоторые скрипты Python)

YAML/JSON (конфигурация как код)

  • Ansible Playbook для определения конфигураций устройств
  • Файлы переменных Terraform для управления различиями в окружающей среде
  • K8s CRD для управления кластерами SONiC

C++ (необходим для низкоуровневой разработки)

  • Изменить SAI (интерфейс переключения абстракции)
  • Отладка базовой логики процесса syncd
  • Оптимизация производительности драйвера ASIC

Наверх