Maîtriser SONiC : 6 points essentiels à maîtriser pour réussir un réseau ouvert

SONiC (Software for Open Networking in the Cloud) est un système d'exploitation réseau open source très différent des autres systèmes d'exploitation réseau que vous avez déjà rencontrés. Apprendre SONiC exige une préparation mentale et des compétences pointues. Ce nouveau système d'exploitation transformant radicalement l'architecture réseau, les connaissances et compétences clés suivantes sont essentielles pour tous les apprenants de SONiC.

Les fondamentaux de Linux doivent être maîtrisés

Linux est le cœur du système d'exploitation réseau SONiC. Contrairement aux systèmes d'exploitation réseau traditionnels (tels qu'IOS ou Junos) qui masquent complètement l'implémentation sous-jacente, SONiC expose l'intégralité du système Linux.

noyau sonic-linux

De la gestion des services systemd au déploiement d'applications conteneurisées, chaque couche nécessite une intervention directe, vous devez donc :

  • Comprendre en profondeur la structure du système de fichiers Linux et localiser rapidement les fichiers de configuration clés (tels que le répertoire /etc/sonic/)
  • Utiliser efficacement les outils d'analyse des journaux (journalctl, grep) pour dépanner divers journaux de service dans /var/log/
  • Gestion du service master systemd (systemctl start/stop/restart/enable)
  • Maîtriser les conteneurs Docker (docker ps/exec/logs/inspect)
  • Comprendre les espaces de noms réseau Linux et les périphériques réseau virtuels

Il est recommandé d'améliorer vos compétences Linux avant de déployer SONiC via les méthodes suivantes :

  1. Suivez un cours de base d'administrateur système Linux
  2. Pratiquer le dépannage courant dans un environnement expérimental
  3. Familiarisez-vous avec les bases de la technologie de conteneurisation
  4. Maîtriser les compétences de base en écriture de scripts Bash

Comprendre la conteneurisation et le déploiement

SONiC adopte une architecture de microservices, où chaque composant de fonction réseau (tel que BGP, LLDP, etc.) s'exécute dans un conteneur Docker indépendant. Cela contraste fortement avec l'architecture monolithique des systèmes d'exploitation réseau traditionnels.

Comprendre la conteneurisation et le déploiement

Cette architecture apporte trois caractéristiques clés :

  1. Isolation des composants : chaque service dispose de son propre système de journalisation indépendant, de son propre espace de noms réseau et de son propre allocation de ressources, les pannes étant strictement contrôlées dans un seul conteneur.
  2. Évolutivité dynamique : les services peuvent être démarrés ou arrêtés à la demande, prenant en charge les mises à jour à chaud et les versions en niveaux de gris.
  3. Gestion précise : réalisez des opérations et une maintenance au niveau des composants grâce à des commandes telles que docker exec/restart/logs.

Apprendre SONiC nécessite de changer les mentalités suivantes :

  • De la « configuration globale » à la « configuration des composants »
  • Du « journal unique » au « traçage de journaux distribués »
  • Du « redémarrage général » à la « mise à jour à chaud du service »

Maîtriser le composant principal Redis

SONiC utilise Redis comme bus de données principal, permettant ainsi le découplage de la configuration et de l'état via plusieurs bases de données logiques. Pour apprendre SONiC, vous devez maîtriser :

Maîtriser l'analyse d'architecture multi-DB

  • CONFIG_DB : configuration persistante (équivalente à la configuration en cours d'exécution dans un NOS traditionnel)
  • STATE_DB : collecte d'état en temps réel (similaire à SNMP mais plus structuré)
  • APPL_DB : Bus de communication interprocessus (un mécanisme IPC innovant)

Maîtriser les compétences clés en matière d'exploitation et de maintenance de Redis

  • Utilisez redis-cli pour localiser rapidement les éléments de configuration
  • Comprendre la relation de mappage entre les modèles YANG et le schéma Redis
  • Service de commutation d'état (Swss)

Il est donc recommandé aux nouveaux apprenants :

  1. Commencez à partir de la documentation du schéma de la base de données plutôt que d'utiliser directement la CLI
  2. Utilisez l'outil d'encapsulation sonic-db-cli pour réduire les risques opérationnels
  3. Établir un processus de pré-validation pour les modifications de la base de données

Maîtriser les bases de l'utilisation de Git

Lorsque vous rencontrez des problèmes dans un environnement de production, le référentiel GitHub fournit souvent des réponses plus rapidement que le support du fournisseur.

Compétences de survie essentielles à maîtriser :

Utilisation de Git

Utilisation de Git

  • git blame pour suivre une ligne de configuration spécifique
  • Utilisez git bisect pour localiser rapidement le commit qui a introduit un bug
  • Basculez efficacement entre les branches communautaires et les branches personnalisées par le fournisseur pour des visites guidées au niveau de la source

Modules clés

  • swss (pipeline de traitement de configuration)
  • syncd (couche d'abstraction ASIC)
  • orchagent (logique métier de base)

État d'esprit DevOps et automatisation

État d'esprit DevOps et automatisation

Apprenez à utiliser Terraform avec la syntaxe déclarative pour gérer les appareils SONiC :

  • Définir les ressources du commutateur
  • Gérer les blocs de configuration pour VLAN, BGP, ACL, etc.
  • Dossiers d'État

Apprendre Ansible : déploiement et configuration par lots

  • Utilisez le module sonic_config pour envoyer config_db.json
  • Générer dynamiquement des configurations (modèles Jinja2 + fichiers variables)

Gestion de configuration principale (config_db.json), méthode de configuration principale de SONiC, plutôt que le terminal de configuration traditionnel.

Compétences en langage de programmation

Les capacités de programmation de SONiC déterminent directement vos opérations et votre maintenance.

Python

  • Analyser config_db.json (json.loads()/json.dumps())
  • Écrire un Orchagent personnalisé (gérer les événements de la base de données Redis)
  • Tests automatisés (framework pytest-sonic)

Scripting Bash (outils d'opérations et de maintenance rapides)

  • Exploitation par lots de conteneurs Docker

Go (développement de composants cloud natifs)

  • Participer au développement de la communauté SONiC (comme l'ajout de nouvelles interfaces SAI)
  • Écrire des plugins CNI K8s (intégration Calico/SRIOV)
  • Agent de surveillance réseau hautes performances (remplaçant certains scripts Python)

YAML/JSON (Configuration sous forme de code)

  • Ansible Playbook pour définir les configurations des appareils
  • Fichiers variables Terraform pour gérer les différences environnementales
  • K8s CRD pour gérer les clusters SONiC

C++ (essentiel pour le développement de bas niveau)

  • Modifier l'interface d'abstraction de commutation (SAI)
  • Déboguer la logique principale du processus Syncd
  • Optimiser les performances du pilote ASIC

Remonter en haut