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:

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:

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:

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 à:

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

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 à:

hwaddrs: {}

S’il y a des MACs à définir la syntaxe est la suivante:

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:

$ 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
$ confiture dhcp
INFO:generating configuration output/dhcpd.conf
$ 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