Le Blog Utux

HTTP 200 GET /

J'ai acheté un NUC NUC6CAYH

Rédigé par uTux 13 commentaires

Un seul serveur n'était pas suffisant pour moi, j'en ai donc acheté un deuxième. J'ai choisi un NUC6CAYH à 122€. Pour ce tarif on a droit à un mini-PC équipé d'un Intel Celeron J3455 (4@1,5GHz) sans RAM ni disque dur.

NUC

J'ai ajouté 8GB de RAM (Kingston KVR16LS11/8 pour 72€) et un disque dur 2,5" de 500GB que je stockais dans un placard. A propos de la RAM, attention car le NUC ne supporte que 8GB maximum et il faut respecter la QVL sous peine d'avoir un warning impossible à désactiver à chaque boot.

Matériel

Comme indiqué précédemment, ce NUC vient avec un Intel Celeron J3455, avec 4 vrais coeurs à 1,5GHz et un turbo boost à 2,3GHz. Le tout contenu dans un TDP de 10W, gravé en 14nm et avec les instructions de virtualisation et quelques features telles que AES-NI. Pour ce prix, et pour un usage modéré, c'est très intéressant. L'ensemble n'est pas fanless, mais grandement silencieux à l'usage.

NUC front

Peut-on se risquer à parler d'un Raspberry Pi killer? Certainement pas, étant donné la gamme de prix et de matériel complètement différents. Mais il faut constater qu'un usage serveur @home est bien plus envisageable avec ce NUC qu'avec une framboise.

NUC rear

Le boîtier peut s'ouvrir par le dessus ou par le dessous, en retirant 4 grosses vis très accessibles, excellent point :) Par le dessous on accède à la cage du disque dur (2,5") ainsi qu'aux 2 slots de RAM

Il faut aussi noter qu'un kit de fixation vertical est fourni, par exemple pour fixer le NUC derrière un écran. Autre chose, ce mini-PC est assez lourd, vu ses dimensions je m'attendais à quelque chose de plus léger, mais ce n'est pas bien grave.

Système d'exploitation

S'agissant d'une plateforme x86_64 avec support uefi et legacy-bios, on peut se faire plaisir. J'ai pour le moment testé 3 systèmes d'exploitation, orientés virtualisation puisque c'est l'usage que je compte faire de ce NUC.

Système d'exploitation
Supporté
Notes
XenServer 7.4
Oui Le support d'installation USB boote correctement mais il faut utiliser un dépôt HTTP. Cela peut être fait assez facilement en décompressant l'ISO sur un autre poste puis en lançant un petit serveur http avec python.
VMware ESXi 6.5
Non Interface réseau non supportée. Il existe certaines astuces pour se construire son propre medium d'installation avec le bon pilote, mais n'étant de toutes manières pas fan de la console HTML5 je ne suis pas allé plus loin.
Proxmox VE 5.1
Oui Parfaitement fonctionnel.

Rien à signer du côté des performances, ni rapide ni lent pour de la virtualisation, surtout avec un stockage sur disque mécanique. Idéal pour un petit labo ou serveur à la maison avec des VM Linux pouvant se contenter de peu de RAM. Je créé autant que possible mes VM avec une allocation dynamique 128/256MB et un stockage 30GB, ce qui permet d'en faire tourner pas mal simultanément.

Conclusion

Pour le moment je suis plutôt satisfait de ce NUC, même si je regrette la limitation à 8GB de RAM. Il offre un bon rapport qualité/prix pour un serveur @home et le Celeron J3455 se comporte plutôt bien avec des containers et de la virtualisation. Ce petit serveur Proxmox VE va se révéler très utile pour compléter mon NAS sous FreeNAS.

EDIT 01/05/2018: Je rencontre des problèmes avec ce NUC. J'ai défini le boot en "legacy" (non uefi) sur le disque, mais il ne détecte pas d'OS au démarrage et je suis obligé, à chaque fois, de brancher un clavier et utilise le menu pour sélectionner mon disque. Ensuite je rencontre des freezes à peu près chaque semaine, c'est très chiant. Je viens de faire une mise à jour du Bios, on va voir si cela résout les problèmes.

EDIT 29/07/2018: Je ne rencontre plus de freezes ni de problèmes de boot depuis que le bios a été mis à jour :)

Docker swarm, publish et scaleway

Rédigé par uTux Aucun commentaire

On dirait le titre d'un WTC mais ce n'est pas le cas, c'est plutôt un bug à la con qui m'a bloqué toute une soirée.

Je fais tourner mon blog et d'autres sites chez Scaleway, sur un VC1S avec Docker (debian 9 + installation custom). Je fais au plus simple avec docker-compose qui jusque là était satisfaisant pour mes besoins. Mais depuis quelques temps je songe à passer à la vitesse supérieure avec swarm, qui me permettra d'ajouter d'autres nodes et former un vrai cluster.

Après avoir mené une phase de tests en VM, j'ai décidé de me lancer et migrer sous swarm. Mais je me suis confronté à un bug énervant, impossible de publier des ports, par exemple:

$ docker network create -d overlay net-web
t1q2kzso3a5fnlkd0s8tvywid

$ docker service create --network net-web --publish 80:80 nginx
xl35ov6bkehabkx4547omrodj
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged

$ telnet 127.0.0.1 80
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

Connexion refusée, le port n'est donc pas publié :/

Cela m'a rendu fou car en machine virtuelle VirtualBox ou KVM ça fonctionne du premier coup, et la lecture de documentation ou divers blogs ont confirmé qu'il n'y avait pas plus de manipulations à faire, ça devrait juste marcher !

J'ai commencé à soupçonner Scaleway, et en faisant une recherche avec les bons mots clés je suis tombé sur ce blog et cette issue github.

Ben voilà, c'est bien un problème avec Scaleway, car leur architecture est un peu particulière. Les serveurs ou VM n'ont pas de grub, ce sont des nodes provisionnées à la volée en PXE, avec script de démarrage et kernel maison. Et il s'avère qu'avec ces deux bootscripts, ça ne marche pas:

  • x86_64 4.10.8 std #1
  • x86_64 4.10.8 docker #1

C'est con, car le premier est celui proposé par defaut, le second est celui vers lequel on s'oriente naturellement quand on veut faire fonctionner du Docker.

Voici donc le bon bootscript: x86_64 mainline 4.14.23 rev1.

Proposer un kernel custom est une sale habitude des hébergeurs, mais à 3€/mois le vps, peut-on vraiment se plaindre de Scaleway?

Firewalld, c'est bien

Rédigé par uTux 6 commentaires

Il y a deux ans j'affirmais aimer systemd dans l'article systemd, c'est bien. Aujourd'hui je parle de Firewalld, un service et ensemble d'outils permettant de gérer le pare-feu sous Linux.

La base du firewall sous Linux c'est iptables, et quand on a compris et beaucoup pratiqué, c'est pas si compliqué. Mais il y a toujours deux points qui me gênent:

  • Il n'y a pas de service officiel pour charger les règles au démarrage, il faut faire son propre script ou en emprunter à droite à gauche.
  • Les règles sont quand même indigestes et bas niveau, ce qui n'est pas toujours nécessaire.

Firewalld implémente un système de "zones" dans lesquelles vous allez définir des paramètres, autoriser des services: internet, public, dmz... elles peuvent être définies à partir de l'interface ou de la source, c'est assez souple. Le paramétrage se fait soit en cli (firewalld-cmd) soit graphiquement (firewall-config) ou encore au travers d'une api et introduit la notion de "permanent" pour savoir si il faut conserver les modifications au démarrage.

Bien entendu, firewalld est un service système donc il n'y a pas de script à écrire pour charger ses règles au boot, il suffit de l'activer dans sytemd.

Firewalld est présent sur Fedora, CentOS, RedHat mais peut être installé sur d'autres sytèmes comme Debian car il est proposé dans les dépôts. Et moi, je migre mes serveurs sur Firewalld avec prise en charge par Ansible, parce que je gagne un temps fou et je fais les choses proprement.

Merci Red Hat ces logiciels qui terminent en "d" et qui modernisent un peu Linux :)

Ansible: loop, subelements, dictionnary

Rédigé par uTux Aucun commentaire

Article pense-bête. J'écris un petit rôle pour configurer firewalld, en gros je veux spécifier quelles interfaces et quels services il faut ajouter dans les zones. Mon idée c'est de définir tout ça dans un dictionnaire dans le playbook, et ensuite de récupérer les élements et sous-élements dans le rôle.

Voici ce que ça donne:

# install.yml

- hosts: nas

  roles:
    - nfs-server
    - firewalld

  vars:
    firewalld_zones:
      - zone: internal
        interfaces:
          - eth0
        services:
          - mountd
          - nfs
          - rpc-bind
  - name: Define zones for interfaces
    firewalld:
      zone: "{{ item.0.zone }}"
      permanent: true
      immediate: true
      interface: "{{ item.1 }}"
      state: enabled
    with_subelements:
      - "{{ firewalld_zones }}"
      - interfaces

  - name: Allow services for zones
    firewalld:
      zone: "{{ item.0.zone }}"
      permanent: true
      immediate: true
      service: "{{ item.1 }}"
      state: enabled
    with_subelements:
      - "{{ firewalld_zones }}"
      - services

Mouais. C'est quand même loin d'être clair ou évident. Mais c'est le seul moyen que j'ai trouvé pour le moment. Si quelqu'un connaît une méthode plus propre/lisible je suis preneur.

Mauvaise expérience avec Ceph

Rédigé par uTux 14 commentaires

Ceph fait du stockage distribué. Il permet de répartir des données sur plusieurs machines avec réplicas, assurant ainsi une certaine sécurité et résilience.

Ceph logo

Sauf que ça c'est la théorie, en pratique mon expérience a été assez mauvaise et non seulement source d'interruptions de service mais aussi d'un niveau de stress très important (jusqu'à ne plus dormir la nuit). Parce que oui perdre un serveur de prod n'est déjà pas agréable, mais quand il s'agit du stockage c'est encore pire.

Commitstrip
Un admin qui bosse avec Ceph

Problème 1: l'usine à gaz

Ceph est gros, très gros, pour le compiler prévoyez au minimum 8GB de ram (sous peine de faire exploser votre machine) et plusieurs heures.

Ensuite pour être à l'aise prévoyez des machines bien dimensionnées (Xeon), beaucoup de RAM (1GB par TB) et du stockage SSD pour la journalisation. A l'usage ne vous étonnez pas de voir la RAM et la swap proche de la saturation, c'est le rythme de croisière.

Et puis l'architecture n'est pas simple il y a les OSD, les PGs, les différents services, et les logs parfois pas très clairs qui vous disent que la reconstruction est bloquée sans vraiment donner de raison.

Problème 2: les bugs

Sur la version Kraken (11.2) il existe une fuite de mémoire avec le service ceph-mgr. La solution est donc de le couper. Sauf que son rôle est justement de contrôler l'utilisation de la mémoire, donc le serveur va naturellement gonfler au fil des mois jusqu'à finir par exploser en vol. Il faut donc régulièrement lancer ceph-mgr puis le couper.

Le hic, c'est que dans le cas où votre serveur est déjà bien chargé (RAM + swap), le lancement de ceph-mgr ajoute un poids supplémentaire ce qui peut amener des lag sur le cluster le temps que la mémoire baisse... et ça c'est très mauvais. Dans mon cas cela a fait basculer plusieurs machines virtuelles en readonly.

Problème 3: ceph-deploy

Avec la mouvance devops il est de plus en plus courant de vouloir installer les choses sans devoir mettre les mains dans le cambouis, faire du sysadmin sans rien connaître en sysadmin quoi. Et c'est problématique. Certes c'est rapide et facile, mais en cas de panne on ne sait pas quoi faire car on ne sait pas comment marche le système.

Ceph-deploy fait le boulot à votre place, et dans le cas où ce n'est pas vous qui avez monté l'infra, si vous ne disposez pas du répertoire contenant les clés et la configuration, bon courage pour manipuler le cluster (ajout ou retrait de nodes). De plus ceph-deploy réserve des surprises en installant pas forcément la version qu'on lui demande...

Problème 4: les performances

Même avec un setup assez costaud (plein de RAM et de SSD) les I/O des VM qui sont stockées dessus sont décevantes. C'est un ressenti, mais à l'aire du SSD et/ou du stockage en RAID10, une installation d'une VM debian stockée sur cluster Ceph parait interminable.

Problème 5: résilience

Dans un cluster de 3 nodes on se dit qu'on est tranquilles car on peut en perdre 2 et continuer à fonctionner, un peu comme avec un RAID1 de 3 disques. Sauf qu'en pratique, il faut au minimum 2 nodes actives... Et oui, j'ai testé sur un cluster Ceph 0.96 et 11.2, dans les deux cas les données ne sont plus accessibles s'il ne reste qu'une seule node en vie.

Problème 6: targetcli

C'est le daemon iscsi de Ceph. Le problème ? Il perd sa conf partiellement ou totalement à chaque reboot. Prévoyez un targetctl restore systématique et un downtime possible si vous devez effectuer cette opération.

Conclusion: abandon

Alors que Ceph est censé apporter une continuité de service et donc un sérénité pour les admin, j'ai expérimenté le contraire. Les nombreux downtimes et les fois où j'ai été à deux doigts de perdre l'intégralité du stockage (et donc des machines virtuelles) m'ont causé des nuits blanches d'angoisse.

Les VM sont en cours de migration vers un SAN artisanal à base de Debian + iscsitarget. Il n'est peut-être redondé mais il est fiable, il n'y a pas de fuite de RAM, et s'il y a le moindre pépin nous connaissons les couches de A à Z pour pouvoir diagnostiquer.

En ce qui me concerne Ceph est une usine à gaz qui n'est pas production ready et j'espère ne plus avoir à y toucher de ma vie.

Fil RSS des articles de cette catégorie