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 DHCPopt82
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 labelsshared=BMC opt82=ETH VENDOR;
etopt82=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