====== 2020/08/14 (Hub infra - installation réseau et ceph) ====== FIXME À relire et peaufiner. Sur d'autres pages ou pads… * [Nouvelle infra Neutrinet](https://pad.computhings.be/p/neutrinet-nouvelle-infra) * [Réflexions en 2019](https://pads.domainepublic.net/p/Neutrinet-infra-2019) * [Réunion précédente](https://wiki.neutrinet.be/fr/rapports/2020/08-12) * [Pad de la réunion](https://pad.computhings.be/p/neutrinet-infra-14-08-2020) ===== Présences ===== tharyrok, hgo, tierce, ptr_here ====== A faire ====== * config la sortie virtual serial des hp * la config réseau * crée le cluster proxmox * créer le cluster ceph * créer nos utilisateur unix/proxmox/ilo * changé les mdp root/admin/.... * créer les vm edge * config bgp * créer les scipt pour les hook de vzdump https://pve.proxmox.com/pve-docs/vzdump.1.html#vzdump_configuration * rajouter du basilic ===== Situation de départ ===== Voir réunion précédente : https://wiki.neutrinet.be/fr/rapports/2020/08-12 En gros on a topi, nam et bour qui sont installé avec un Proxmox, actuellement individuel. Ils ne sont pas encore en « cluster ». ===== On se fait un screen partagé ===== Sur chaque serveur on fait ``` screen -S nam ou bour ou topi en tant que root ``` se connecter chacun en root sur les serveurs concernés ``` screen -x nam pour « rejoindre » le terminal partagé ``` ===== Config la sortie virtual serial des hp ===== C'est pour contourner la limite des 30sec de terminal des iLo sans licence. ``` #nano /etc/default/grub ``` ``` # Dire au kernel d'avoir un tty sur le serial et sur la sortie video GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty1 console=ttyS1,115200" # Le menu grub du boot s'affiche en serial et en sortie video GRUB_TERMINAL="console serial" # configurer la sortie serial du grub GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=1 --word=8 --parity=no --stop=1" ``` ``` # update-grub ``` (ssh ILO est pourri / il faut paramétrer ton client avec des vieilles cryptos) ``` host 192.168.12.61 (nam) MACs hmac-md5,hmac-sha1 Ciphers aes256-ctr KexAlgorithms diffie-hellman-group1-sha1 HostKeyAlgorithms ssh-rsa ``` Se connecter en ssh au iLo d'un des serveur ( ssh 192.168.12.61 (ou son IP au datacenter) -ladministrator (ou ton login si tu es dans les utilisateurs/admin des iLo) -p22 ) Une fois connecté au ilo il y a la commande « vsp » pour ce connecter au virtual serial (pas besoin donc de se connecter sur le iLo en https et d'aller chercher le console HTML5 qui est limité a 30 sec) ===== La configuration du réseau ===== === Les connexion physiques === Nam sera en haut dans le rack (c'est important pour raison mystique: de pas croiser les sessions BGP). En fait sur nam ce trouve la vm edge-01. Du coup on sait que le port 1 du patch panel de verixi va sur le premier serveur et le port 2 du patch panel va sur le deuxieme serveur. Il y a deux connexions SFP+ (fibre, 10Gb) entre nam et bour (2 portes chacun) qui sont configurées en agrégation de lien (LACP) Il y a deux connexions RJ45 (1Gb) entre nam et bour (4 portes chacun) qui sont configurées en agrégation de lien (LACP) et c'est la troisième et quatrième interface physique du serveur. Il y a une connexion 1Gb entre nam et topi et c'est la deuxième interface physique du serveur. Il y a une connexion 1Gb entre bour et topi et c'est la deuxième interface physique du serveur. Il y a une connexion RJ45 (1Gb) entre edge-01 (une VM actuellement) et Verixi sur le serveur nam et c'est la première interface physique du serveur. Il y a une connexion RJ45 (1Gb) entre edge-02 (une VM actuellement) et Verixi sur le serveur bour et c'est la première interface physique du serveur (ils sont numérotés sur le châssis, en dessous du socket rj45). Nam a un convertisseur usb serial qui est connecté sur la sortie serial de topi. === Les switches virtuels === Le vmbr1 est le switch pour la connexion bgp. (edge-01, edge-02) Nous ne pouvons pas, sur ce modèle de HP, faire du pci passthrough donc connecter la première interface réseau dans la vm edge. Ce switch virtuel ne doit pas être utiliser pour les machine virtuelle. Le vmbr0 est le switch virtuel pour toute l'infra de Neutrinet et c'est sur ce dernier qu'il y aura les différents vlan. Par exemple, pour les amis, il ou elle seront sur le VLAN40 sur vmbr0. === L'interconnexion entre les switches virtuels === Nam, bour et topi sont sur un bateau... Mais surtout, ils ont le même switch virtuel vmbr0. Ces trois switches sont interconnectés par les câbles physiques (rj45 et sfp) pour éviter de faire des boucles on utilise le protocole RSTP. On a fait en sorte, grâce au RSTP (Rapid Spanning Tree Protocol), que les fibres entre nam et bour sont utilisés en priorité et les rj45 en backup (c'est la longue ligne dans le fichier /etc/network/interfaces) Et si jamais nam et bour ne savent plus se parler directement (rj45 ou fibre) il passent par topi pour continuer la discussion. Idem entre topi et nam. === Les VLANs === Le lien suivant aura servi de source d'inspiration (ou d'ultime expiration si on comprends rien au réseau ce qui est le cas de la moitié des gens chez Neutrinet :p) https://pve.proxmox.com/wiki/Open_vSwitch#Example_2:_Bond_.2B_Bridge_.2B_Internal_Ports ``` vlan 10-99 Interne Neutrinet # Utilisé pour les Proxmox et Ceph et iLo, bref pour tout ce qui est physique VLAN 10 (Management) 10.0.10.0/24 fd97:cbaf:f4d3:32a9:10::/64 # Actuellement utilisé par les VMs qui se trouvent à i3d et qu'on rapatrie ce samedi VLAN 20 (OLD Internal) 172.16.42.0/24 # Utilisé par nos futures VMs. Par ex, les pfsenses utiliseront ce VLAN. Idem pour les nouvelles VMs, comme celle dédiée au Mattermost (exemple fictif) VLAN 30 (Internal) 10.0.30.0/24 fd97:cbaf:f4d3:32a9:30::/64 # Nos IPs publiques VLAN 40 (WAN) 80.67.181.0/28 2001:913:1000::/40 ``` ===== la config ===== Vérifier que openvswitch est bien là : apt install openvswitch-switch Et puis reboot. ( reconnect ssh 192.168.12.213 et 192.168.12.214 ) Si on s'est planté dans la config, passer par le iLo Mettre à jour la config pour les VLANs (un vlan est comme une interface reseau) : ``` /etc/network/interfaces ``` Changer les hosts/IPs des trois serveurs : ``` /etc/hosts 127.0.0.1 localhost 10.0.10.11 nam.blue.neutri.net nam fd97:cbaf:f4d3:32a9:10::11 nam.blue.neutri.net nam 10.0.10.12 bour.blue.neutri.net bour fd97:cbaf:f4d3:32a9:10::12 bour.blue.neutri.net bour 10.0.10.13 topi.blue.neutri.net topi fd97:cbaf:f4d3:32a9:10::13 topi.blue.neutri.net topi # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters ``` Ensuite, faire : ip a Et vérifier les links down par exemple Note : dans le choix des noms du style eno1 eno2 ... Le eno c'est le driver, et le chiffre c'est la ligne PCI définie par le matos (dans udev on peut s'amuser, mais bon) Le mtu n'etait pas correcte; adapter de 12000 a la valeur trouvée pour le max_mtu de l'interface avec la commande: ``` # ip -d link list exemple : link/ether 52:54:00:82:78:1b brd ff:ff:ff:ff:ff:ff promiscuity 1 minmtu 68 maxmtu 65521 ``` ``` root@nam:~# cat /proc/net/bonding/bond1 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: IEEE 802.3ad Dynamic link aggregation Transmit Hash Policy: layer2+3 (2) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Peer Notification Delay (ms): 0 802.3ad info LACP rate: fast Min links: 0 Aggregator selection policy (ad_select): stable System priority: 65535 System MAC address: d8:9d:67:6e:91:9d Active Aggregator Info: Aggregator ID: 1 Number of ports: 2 Actor Key: 9 Partner Key: 9 Partner Mac Address: d8:9d:67:6e:c1:4d Slave Interface: eno2 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: d8:9d:67:6e:91:9d Slave queue ID: 0 Aggregator ID: 1 Actor Churn State: none Partner Churn State: none Actor Churned Count: 0 Partner Churned Count: 0 details actor lacp pdu: system priority: 65535 system mac address: d8:9d:67:6e:91:9d port key: 9 port priority: 255 port number: 1 port state: 63 details partner lacp pdu: system priority: 65535 system mac address: d8:9d:67:6e:c1:4d oper key: 9 port priority: 255 port number: 1 port state: 63 Slave Interface: eno3 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: d8:9d:67:6e:91:9e Slave queue ID: 0 Aggregator ID: 1 Actor Churn State: none Partner Churn State: none Actor Churned Count: 0 Partner Churned Count: 0 details actor lacp pdu: system priority: 65535 system mac address: d8:9d:67:6e:91:9d port key: 9 port priority: 255 port number: 2 port state: 63 details partner lacp pdu: system priority: 65535 system mac address: d8:9d:67:6e:c1:4d oper key: 9 port priority: 255 port number: 2 port state: 63 ``` Verifier avec : ``` # ovs-vsctl show ``` > tharyrok: meh, les vlan s'annoncent pas... --> /etc/network/interfaces ``` root@bour:~# ovs-vsctl show 67721823-be17-439d-a8fd-e84b47b3ff04 Bridge "vmbr0" Port "vlan10" tag: 10 Interface "vlan10" type: internal Port "eno4" Interface "eno4" Port "bond0" Interface "bond0" Port "bond1" Interface "bond1" Port "vmbr0" Interface "vmbr0" type: internal ovs_version: "2.12.0" ``` RSTP: La valeur de rstp-path-cost doitt être différentes sur tous les hosts.. si on prends la même valeur dans la config de nam et bour, rstp n'arrive pas a un spanningtree valable et bloque tout le bazar ===== config topi ===== ``` root@nam:~# lsusb Bus 001 Device 003: ID 0557:2008 ATEN International Co., Ltd UC-232A Serial Port [pl2303] ``` screen pour se connecter via port serial a topi /etc/networ/interfaces configurer un bridge en utilisant openvswitch verifier les mtu ( ip -d link list ) enp3s0 enp4s0 : interfaces sur topi pour donner acces au iLo (vlan 10) -- essay de pinger bour, depuis bour, couper le lien (eno4) et voire que le ping continue ===== plan IP ===== On essaie d'avoir une plage pour les machines physique et on rajoute +100 pour les iLO (par exemple) Pour rappel, un schéma avec les IPs est disponible ici : https://wiki.neutrinet.be/fr/rapports/2020/08-08 Tout ce qui suis est arbitraire ! Nam 10.0.10.11 fd97:cbaf:f4d3:32a9:10::11 ILO 10.0.10.111 fd97:cbaf:f4d3:32a9:10::111 Bour 10.0.10.12 fd97:cbaf:f4d3:32a9:10::12 ILO 10.0.10.112 fd97:cbaf:f4d3:32a9:10::112 Topi 10.0.10.13 fd97:cbaf:f4d3:32a9:10::13 80.67.181.9 2001:913:1000::9 edge-01 10.0.10.51 fd97:cbaf:f4d3:32a9:10::51 62.112.29.67/31 2a00:1528:3201:5::22/126 80.67.181.2 2001:913:1000::2 VRRP : 80.67.181.1 2001:913:1000::1 edge-02 10.0.10.52 fd97:cbaf:f4d3:32a9:10::52 62.112.29.91/31 2a00:1528:3201:5::26/126 80.67.181.3 2001:913:1000::2 VRRP : 80.67.181.1 2001:913:1000::1 c fini réseau ===proxmox cluster=== https://pve.proxmox.com/wiki/Cluster_Manager vite changer sshd_config enable 'PermitRootLogin without-password' (parce que c'est un peu plus facile le temps de configurer le bazar) et on copie la clé rsa root de nam vers topi ( à la main sur base d'un user qui peut se connecter et qui est sudoer). D'abord on crée le cluster « patata » (cf. choix des noms lors de la réunion précédente) ``` root@nam:~# pvecm create patata ``` Voir si le cluster est créé. ``` # pvecm status ``` on va sur bour et on l'ajoute au cluster sur base de l'ipv6 de nam ``` # pvecm add fd97:cbaf:f4d3:32a9:10::11 ``` et si maintenant on fait un pvecm status on voit les 2 nodes (et plus 1 seul, dans le bas) ``` root@bour:~# pvecm status … Membership information ---------------------- Nodeid Votes Name 0x00000001 1 fd97:cbaf:f4d3:32a9:10::11%32629 0x00000002 1 fd97:cbaf:f4d3:32a9:10::12%32629 (local) ``` On va sur nam et sur bour pour installer corosync-qdevice ``` apt install corosync-qdevice ``` On va ensuite sur topi et on install corosync-qnetd. ``` apt install corosync-qnetd ``` On retourne sur nam et on lui demande d'ajouter topi en tant que « qdevice » (c'est juste un membre du cluster qui donne une voix sans pour autant être considéré comme un hyberviseur). L'ip qui fini par :13 étant l'ipv6 de topi. ``` pvecm qdevice setup fd97:cbaf:f4d3:32a9:10::13 ``` Et on peut voir sur l'une des trois machine, qu'il y a un membre en plus qui est le qdevice (topi) ``` root@bour:~# pvecm status Membership information ---------------------- Nodeid Votes Qdevice Name 0x00000001 1 A,V,NMW fd97:cbaf:f4d3:32a9:10::11%32571 (local) 0x00000002 1 A,V,NMW fd97:cbaf:f4d3:32a9:10::12%32571 0x00000000 1 Qdevice ``` La création du cluster c'est fini. ===== Ceph (le petit fils de Chtulu) ===== Les deux liens suivant sont la source des étapes qu'on va faire. * https://docs.ceph.com/docs/master/install/ceph-deploy/quick-start-preflight/ * https://docs.ceph.com/docs/master/install/ceph-deploy/quick-ceph-deploy/ === configuration de sudo sans mot de passe === Installer sudo sur les trois machines (topi, nam, bour) ``` # apt install sudo ``` éditer le visudo ``` … # Allow members of group sudo to execute any command, without specifying password %sudo ALL=(ALL:ALL) NOPASSWD:ALL ``` On ajoute l'utilisateur qui utilisera ceph-deploy dans les sudoers sur les trois machines. ``` # usermod -g sudo tharyrok ``` === configuration client ssh === Pour utiliser ceph-deploy (c'est dit dans la doc plus haut). Sur une machine, par exemple celle de tharyrok, on ajoute ceci comme config ssh (~/.ssh/config) ``` Host nam User tharyrok Port 22 HostName 192.168.12.213 Host bour User thayrrok Port 22 HostName 192.168.12.214 Host topi User tharyrok Port 22 HostName 192.168.12.217 ``` * ssh-copy-id pour configurer la connection ssh par cle * verifier que l'uilisateur est bien dans le group sudo sur chacune des machines === clone d'un projet ceph-deploy === Sur le PC de tharyrok (par exemple ;) ) on crée repertoire patata-ceph (et 'git init' de repertoire pour pas le perdre et qu'on mettra sur le git de Neutrinet) Pourquoi ? Parce qu'on ne veut pas perdre la config de ceph, sinon on est dans la mouise Moïse. Le repo se trouvera sur le Gitlab ! /!\ Ce dossier pourrait servir un jours si on veut ajouter des OSD ou modifier notre installation ceph. https://gitlab.domainepublic.net/Neutrinet/patata-ceph On crée un virtualenv pour install ceph-deploy (un outil pour déployer ceph, mais c'est pas ceph en lui-même) ``` # ALARACH® virtualenv3 .env .env/bin/pip install ceph-deploy git init create README.md git commit ``` On rajoutera aussi un .gitignore pour ne pas commit le .env ! === install de ceph ==== Parceque Proxomox est prévu pour fonctionner aussi avec du Ceph… ``` # pveceph install ``` A exécuter sur les trois serveurs, ce qui ajoutera les repos ceph de proxmox. Le ceph-deploy étant « un peu vieux » il installerait une ancienne version de ceph. Du coup on passe par les repos de Proxmox pour avoir une version plus récente. IMPORTANT : Ne pas oublier de brancher son PC, sinon il risque de s'éteindre au bout d'un moment. === création d'un cluster === On pourrait avoir un seul « admin » mais on va l'installer sur nos trois machines par soucis de redondance. Sur un premier monitoring … ``` % ./env/bin/ceph-deploy new nam ``` ``` % .env/bin/ceph-deploy install --no-adjust-repos nam bour topi ``` --no-adjust-repos : indique d'utiliser la version de ceph installe' deja sur chaque machine (ici: la version proxmox) Ne pas oublier de supprimer /etc/apt/sources.list.d/pve-enterprise.list car il génère une 404 (oui on a pas la licence) et du coup ceph-deploy n'aime pas ... === création d'un mon === ``` fred@thinkpad-fred ~/Dev/neutrinet/patata-ceph % ceph-deploy mon create-initial ``` === ajouter des admins== ``` % .env/bin/ceph-deploy admin bour topi nam ``` === création d'un mgr (manager) === ``` % .env/bin/ceph-deploy mgr create nam ``` === création des osd (storage device) === On aime bien mettre le osd0 sur un serveur et le osd1 sur un autre serveur, et ainsi de suite pour alterner. Ça évite d'avoir osd0 et 1 sur la première machine. Et si on ajoute un disque un jour sur le premier serveur ça évitera aussi d'avoir osd0, osd1, osd4 sur le premier et osd2, osd3 sur le second. C'est un peu « esthétique » mais en même temps c'est élégant… vous ne trouvez pas? Ça donnera osd0,2 sur nam et osd1,3 sur bour… tadaam. ``` .env/bin/ceph-deploy osd create --data /dev/sda7 nam .env/bin/ceph-deploy osd create --data /dev/sda7 bour .env/bin/ceph-deploy osd create --data /dev/sdb7 nam .env/bin/ceph-deploy osd create --data /dev/sdb7 bour ``` === verifier un peu les === root@nam:~# systemctl status ceph-mon@nam ``` root@nam:~# ceph -s cluster: id: 1a8d6415-fef1-4083-976a-676a521775c1 health: HEALTH_OK services: mon: 1 daemons, quorum nam (age 39s) mgr: nam(active, since 34s) osd: 4 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs: ``` root@nam:~# systemctl status ceph-osd@0 https://www.spinics.net/lists/ceph-users/msg51954.html ? demarrer osd a la main pour verifier q c marche localement ``` root@nam:~# /usr/bin/ceph-osd -d --cluster ceph --id 0 --setuser ceph --setgroup ceph ``` on ajoute dans la config ms bind ipv6 = true ms_bind_ipv4 = false ms bind_ipv4 = false === ajouter les autres monitors === un par un ``` ./ceph-deploy mon add bour ./ceph-deploy mon add topi ``` (on a fait un reboot, pour changer) Et les OSD sont up. === creation du pool === 'le fameux placement groupe' : https://ceph.io/pgcalc/ root@bour:~# ceph osd pool create data 128 ceph osd pool set data size 2 ceph osd pool set data min_size 2 Nous on utilise pas de crushmap :p === ajout dans proxmox === copier ceph.conf dans /etc/pve, et faire lien symbolique vers /etc/ceph/ceph.conf copier (?) le admin keyring === conquérir le monde === c'est bien une ambition de mangeur de patates ça :) {{tag>infra}}