.. highlight:: sh ********* Site-prep ********* Installation ============ Confiture --------- Installez le RPM et git:: yum install -y confiture git emacs-nox vim En se basant sur les examples inclus dans le RPM (rpm -qd confiture), bootstrapez votre environnement:: git init cluster cp -aR /usr/share/doc/confiture*/examples/* cluster/ Racktables ---------- Installez le RPM:: yum install -y RackTables Intégrez RackTables au serveur Apache:: mkdir /var/www/html/racktables ln -s /usr/share/RackTables/wwwroot/index.php /var/www/html/racktables Lancez le serveur puis suivez les instructions présentes sur la page (%HOST%/racktables):: systemctl enable --now httpd mariadb # Step 1 touch '/etc/RackTables/secret.php'; chmod a=rw '/etc/RackTables/secret.php' # Step 3 mysql << EOF CREATE DATABASE racktables_db CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER racktables_user@localhost IDENTIFIED BY 'MY_SECRET_PASSWORD'; GRANT ALL PRIVILEGES ON racktables_db.* TO racktables_user@localhost; EOF # Step 4 chmod 440 /etc/RackTables/secret.php; chown apache:apache /etc/RackTables/secret.php Testez que tout est OK en vous connectant (user ``admin``). Configuration confiture ----------------------- Configurez l'URL vers la DB dans le ``confiture.yaml``, les paths sont relatifs à l'emplacement de ``confiture.yaml``: .. code-block:: yaml common: hiera_conf: hiera.yaml template_dir: templates/ output_dir: output/ dhcp: conf_name: dhcpd.conf dns: conf_name: named.conf racktables: url: 'mysql://racktables_user:MY_SECRET_PASSWORD@localhost/racktables_db' Création du cluster =================== Représentation dans Racktables ------------------------------ Exemple d'insertions d'objets dans Racktables avec 3 Sequana2 reliés par 1 top switch et gérés par un TOMA (2 noeuds): Insertion de l'allée:: hwdb obj add -t Row A hwdb obj list Insertion des racks:: hwdb obj add -t Rack --container A A[0-3] hwdb obj list .. todo:: Uniformiser les options de restauration ! Restauration des types, models, ports et compatiblités: .. code:: bash hwdb port type restore rt_dumps/ptypes.dump hwdb port compat restore --csv rt_dumps/pcompat.dump hwdb obj model restore rt_dumps/models.dump Insertion des Sequana2:: hwdb cell add --rack A1 --prefix s20 templates/sequana2.hw.yaml hwdb cell add --rack A2 --prefix s22 templates/sequana2.hw.yaml hwdb cell add --rack A3 --prefix s24 templates/sequana2.hw.yaml Insertion du top switch et du TOMA:: hwdb obj add -t 'network switch' --model 'Cisco' 'Nexus 93180YC-EX' --container A0 --slots 10 topswitch hwdb obj add -t 'server' --model 'SuperMicro' 'X10DRS' --container A0 --slots 11,13 --size 2 toma[1-2] Insertion du câblage des composants:: hwdb port add -t SFP+ 10GBase-SR topswitch 10GEthernet[1-36] hwdb port add -t SFP+ 10GBase-SR toma[1-2] 10GEthernet1 hwdb port link topswitch 10GEthernet[1-18] s[20,22,24]wel[0-2]-[1,2] 10GEthernet19 hwdb port link topswitch 10GEthernet[19-20] toma[1-2] 10GEthernet1 Représentation du réseau et services ------------------------------------ Vlans ^^^^^ Dans le fichier ``vlans.yaml``, définissez les différents vlan. Pour rappel, **mettre recommandations**. .. todo:: Mettre recommandations en termes de VLANs Par exemple, pour avoir 4 vlans (1 pour les noeuds de management et 1 pour chaque ilôt):: vlans: 1: access: toma[1-2],topswitch, s[20-24/2]wel[0-2]-[1-2] trunk: topswitch, s[20-24/2]wel[0-2]-[1-2] 20: access: s20compute[1-96],s20emc[1-2],s20hmc[1-3],s20pmcm,s20wmc[1-3] trunk: s20wel[0-2]-[1-2] 22: access: s22compute[1-96],s22emc[1-2],s22hmc[1-3],s22pmcm,s22wmc[1-3] trunk: s22wel[0-2]-[1-2] 24: access: s24compute[1-96],s24emc[1-2],s24hmc[1-3],s24pmcm,s24wmc[1-3] trunk: s24wel[0-2]-[1-2] Réseaux ^^^^^^^ Dans le fichier ``networks.yaml``, définissez les sous-réseaux associés à chacun de ces equipements. Pour rappel, **mettre recommandations**. .. todo:: Mettre recommandations en termes de réseau Dans le cas où nous souhaiterions le découpage suivant: - 1 réseau ``mngt`` pour l'accès admin aux noeuds de management: ``10.1.0.0/24`` - 1 réseau ``eqs`` pour l'accès et le monitoring des équipements: ``10.4.0.0/24`` - 1 réseau ``data`` pour le partage des données exposées par les noeuds de management: ``10.5.0.0/24`` - 1 réseau ``svc`` pour l'accès aux services fournis par les noeuds de managements: ``10.3.0.0/24`` - Par ilot: - 1 réseau pour les équipements ``isletXX-eq``: ``10.4.XX.0/24`` - 1 réseau pour les serveurs ``isletXX-compute``: ``10.2.XX.0/24`` Le fichier serait alors: .. code-block:: yaml networks: mngt: # Vlan1 range: 10.1.0.0/24 nameservers: - "${address('dns-adm')}" ntpservers: - "${address('ntp-adm')}" tftpserver: "${address('tftp-adm')}" eqs: # Vlan1 range: 10.4.0.0/24 nameservers: - "${address('dns-adm')}" ntpservers: - "${address('ntp-adm')}" tftpserver: "${address('tftp-adm')}" data: # Vlan1 range: 10.5.0.0/24 nameservers: - "${address('dns-adm')}" ntpservers: - "${address('ntp-adm')}" tftpserver: "${address('tftp-adm')}" svc: # Vlan1 range: 10.5.0.0/24 nameservers: - "${address('dns-adm')}" ntpservers: - "${address('ntp-adm')}" tftpserver: "${address('tftp-adm')}" islet20-eq: # Vlan20 range: 10.4.20.0/24 nameservers: - "${address('dns-adm')}" ntpservers: - "${address('ntp-adm')}" tftpserver: "${address('tftp-adm')}" islet20-compute: # Vlan20 range: 10.2.20.0/24 nameservers: - "${address('dns-adm')}" ntpservers: - "${address('ntp-adm')}" tftpserver: "${address('tftp-adm')}" [...] Notez que les adresses des serveurs de temps, de nom et TFTP sont des pointeurs et seront définis dans un autre fichier définissant les addresses et noms des différents serveurs, services et équipements. Adresses ^^^^^^^^ Le fichier ``addresses.yaml`` liste l'association des IP aux noms associés. Ceux-ci seront alors générés en une configuration pour les serveurs DNS. Dans notre cas, le fichier pourrait ressembler à: .. code-block:: yaml addresses: toma[1-2]: default: [data, adm] adm: 10.1.0.[1-2] data: 10.5.0.[1-2] topswitch: default: [adm] adm: 10.4.0.1 s[20-24/2]compute[1-96]: default: [adm] adm: 10.2.[20-24/2].[1-96] ipmi: 10.4.[20-24/2].[1-96] s[20-24/2]emc[1-2]: default: [adm] adm: 10.4.[20-24/2].[200-201] s[20-24/2]wmc[1-3]: default: [adm] adm: 10.4.[20-24/2].[202-204] s[20-24/2]pmcm: default: [adm] adm: 10.4.[20-24/2].205 s[20-24/2]wel[0-2]-[1-2]: default: [adm] adm: 10.4.[20-24/2].[206-211] s[20-24/2]wmc[1-3]: default: [adm] adm: 10.4.[20-24/2].[213-215] dhcp,dns,ntp,tftp: default: [adm] adm: 10.3.0.[1-4] Switches ^^^^^^^^ Le fichier ``switches.yaml`` définit la configuration et le câblage de chaque switch. Le fichier peut faire référence à des éléments définis dans `RackTables`, le câblage notamment. Il faut au minimum définir les types de switchs (et le template utilisé pour générer le configuration), la configuration du système (NTP, AAA, ...) et les ports (via `RackTables` possiblement). .. todo:: La syntaxe devrait permettre les NodeList dans les noms de switchs car très verbeux avec RackTables .. code-block:: yaml switches: topswitch: type: cisco_n9k domain: name: "%{hiera('cluster_domain')}" ntpservers: - "${address('ntp-adm')}" auth: enable: '$1$abcd.' users: admin: privilige: 0 password: "abcd" ports: Vlan: defaults: options: - "ip helper-address ${address('dhcp-adm')}" 1: addresses: - "${address('topswitch-adm')}" 20: {} 22: {} 24: {} RackTables: defaults: vlan: mode: access s20wel0-1: type: broadcom domain: name: "%{hiera('cluster_domain')}" ntpservers: - "%{hiera('ntp-adm')}" auth: enable: '$1$abcd.' users: admin: privilige: 0 password: "abcd" ports: Vlan: defaults: options: - "ip helper-address ${address('dhcp-adm')}" 20: addresses: - "${address('s20wel0-1-adm')}" 22: {} 24: {} RackTables: defaults: vlan: mode: access [...] MACs ^^^^ Pour la configuration DHCP, Confiture est capable d'utiliser des MACs configurées dans le fichier ``hwaddrs.yaml`` ou alors utiliser `RackTables` pour récupérer les MACs, récupérer un ``client-id`` au travers d'un label de port dans `RackTables` (``opt61=CLIENT_ID``) ou alors configurer automatiquement l'option 82 de DHCP avec les labels suivants: - ``swid=CIRCUIT_ID`` en tant que label sur les switchs servant de relais DHCP - ``opt82`` pour définir le port labelisé comme étant configuré avec l'option 82. Il est possible d'ajouter une valeur (``opt82=VENDOR_ID;``) pour ajouter un filtre dans la configuration DHCP (option 60) - ``shared=PORT`` pour définir le port labélisé comme étant partagé avec le port nommé ``PORT``. Ainsi la combinaison des labels ``shared=BMC opt82=ETH VENDOR;`` et ``opt82=BMC VENDOR;`` sur 2 ports d'un même noeud (dont un nommé ``BMC``) permet la discrimination entres ces 2 ports au sein de la configuration DHCP Dans le cas où tout est défini dans `RackTables`, le fichier ``hwaddrs.yaml`` se résume à: .. code-block:: yaml hwaddrs: {} S'il y a des MACs à définir la syntaxe est la suivante: .. code-block:: yaml hwaddrs: toma1-adm: "AA:BB:CC:DD:EE:FF" Génération des configurations ============================= Tout en étant dans votre dossier ``cluster``, vous pouvez à présent générer les configurations pour les services DNS et DHCP ainsi que celles des switchs. Pour lancer la génération: .. code-block:: sh $ confiture dns INFO:generating configuration output/named.conf INFO:generating configuration output/zones/cluster.lan INFO:generating configuration output/zones/20.2.10.in-addr.arpa INFO:generating configuration output/zones/0.1.10.in-addr.arpa INFO:generating configuration output/zones/20.4.10.in-addr.arpa INFO:generating configuration output/zones/0.3.10.in-addr.arpa INFO:generating configuration output/zones/0.5.10.in-addr.arpa INFO:generating configuration output/zones/24.2.10.in-addr.arpa INFO:generating configuration output/zones/24.4.10.in-addr.arpa INFO:generating configuration output/zones/22.4.10.in-addr.arpa INFO:generating configuration output/zones/22.2.10.in-addr.arpa INFO:generating configuration output/zones/0.4.10.in-addr.arpa .. code-block:: sh $ confiture dhcp INFO:generating configuration output/dhcpd.conf .. code-block:: sh $ confiture switches INFO:generating configuration output/topswitch_confg INFO:generating configuration output/s20wel0-1_confg INFO:generating configuration output/s20wel0-2_confg INFO:generating configuration output/s20wel1-1_confg INFO:generating configuration output/s20wel1-2_confg INFO:generating configuration output/s20wel2-1_confg INFO:generating configuration output/s20wel2-2_confg INFO:generating configuration output/s22wel0-1_confg INFO:generating configuration output/s22wel0-2_confg INFO:generating configuration output/s22wel1-1_confg INFO:generating configuration output/s22wel1-2_confg INFO:generating configuration output/s22wel2-1_confg INFO:generating configuration output/s22wel2-2_confg INFO:generating configuration output/s24wel0-1_confg INFO:generating configuration output/s24wel0-2_confg INFO:generating configuration output/s24wel1-1_confg INFO:generating configuration output/s24wel1-2_confg INFO:generating configuration output/s24wel2-1_confg INFO:generating configuration output/s24wel2-2_confg