Ma découverte du monde de Slackware avec Salix OS – Partie II: Gestion des paquets

Partie II. Gestion des paquets

Dans le premier article de cette série, j’ai partagé les raisons qui ont motivé mon choix en faveur de Salix.

A la question du pourquoi ne pas utiliser Slackware directement? C’est parce que le gestionnaire de paquets de Slackware ne prend pas en charge la gestion des dépendances. Je vous invite à consulter la FAQ de Slackware pour obtenir plus d’information sur leurs choix.

I. Outils de gestion des paquets: Debian vs Salix

Si comme moi, vous êtes familier avec Debian ou l’un de ses dérivés, vous allez constater des similitudes dans la gestion des paquets entre les deux distributions Salix et Debian.

Rien de plus simple qu’un tableau de comparaison, pour vous donner un bref aperçu de ces similitudes.

Salix Debian Commentaire
Gestionnaires de paquets
Bas niveau
spkg[1] dpkg -Téléchargement manuel de paquets (console)
-Pas de gestion des dépendances
Gestionnaires graphiques Gslapt[1] synaptic -Téléchargement de paquets (outil graphique)
-Pas de gestion des dépendances
Gestionnaires de paquets de plus Haut niveau
slapt-get[1] apt
apt-get
-Téléchargement de paquets (dépôt)
-Gestion automatique des dépendances
Compilation à partir des
Sources
slapt-src[1] apt-src -Téléchargement de paquets (dépôt)
-Compilation
-Pas de gestion des dépendances
Notifications de mises
À jour
salix-update-notifier[1]
slapt-update-service[1]
update-notifier -Informe l’utilisateur des mises à jour
Disponibles

N’hésitez pas à consulter le guide le  Guide de Démarrage de Salix (Startup Guide) ainsi que le manuel de référence sur les Outils de gestion des paquets Debian pour approfondir votre compréhension de la manière dont ces deux distributions gèrent leurs paquets respectifs.

Une fois que vous vous sentez familiarisé et à l’aise avec Salix, si l’envie vous prend de partir à l’exploration de Debian, prenez en considération l’avertissement ci-dessous.

Ne mélangez pas les archives Debian standard avec d’autres archives non Debian comme Ubuntu dans la liste des sources.[1][2]

Contrairement à Debian et ses dérivées, Salix vise être entièrement récompatible avec Slackware. Vous ne devriez pas avoir de problèmes d’utilisation des dépôts de Slackware dans Salix, et vice-versa. D’ailleurs, voici le contenu des fichiers de configuration utilisés par l’outil de gestion de paquets dans Salix.

$ cat /etc/slapt-get/slapt-getrc
# Working directory for local storage/cache.
WORKINGDIR=/var/slapt-get

# Exclude package names and expressions.
# To exclude pre and beta packages, add this to the exclude:
#   [0-9\_\.\-]{1}pre[0-9\-\.\-]{1}
EXCLUDE=^aaa_elflibs,^aaa_base,^devs,^glibc.*,^kernel-.*,^rootuser-settings,^zzz-settings.*,-i?86-

# The Slackware repositories, including dependency information
SOURCE=http://slackware.uk/salix/x86_64/slackware-15.0/:OFFICIAL
SOURCE=http://slackware.uk/salix/x86_64/slackware-15.0/extra/:OFFICIAL

# The Salix repository
SOURCE=http://slackware.uk/salix/x86_64/15.0/:PREFERRED
# And the Salix extra repository
SOURCE=http://slackware.uk/salix/x86_64/extra-15.0/:OFFICIAL

# XCFE repository
SOURCE=https://download.salixos.org/x86_64/xfce4.18-15.0/:PREFERRED

# Local repositories
# SOURCE=file:///var/www/packages/:CUSTOM
$ cat /etc/slapt-get/slapt-srcrc 
BUILDDIR=/usr/src/slapt-src
PKGEXT=txz
SOURCE=http://slackware.uk/salix/slkbuild/15.0/
SOURCE=http://slackware.uk/salix/sbo/15.0/

Parmi les gestionnaires de paquets mentionnés précédement, noter que slapt-src/apt-src n’inclut pas la fonction de suppression des paquets. Cet outil est principalement conçu pour la compilation des sources téléchargés à partir de la page du projet SBo (slackbuild.org), suivi de l’installation de ces paquets. Pour la désinstallation, vous avez le choix entre slapt-get/apt(apt-get) et le gestionnaire graphique des paquets.

II. Installation des Paquets/Applications

Avec Salix, j’ai fréquemment recours à la commance slapt-get pour l’installation d’applications. Par contre, si ces applications ne se trouve pas dans le dépôt officiel de Slackware, je passe à slapt-src.

Prenons quelques exemples concrets.

Juste après l’installation du nouvel environnement avec Salix 15.0, mettez votre système à jour dès que possible.

$ sudo slapt-get --update
$ sudo slapt-get --upgrade
$ sudo slapt-src --update

Comme salix-update-notifier est installée par défaut, pour pouvez attendre l’alerte pour appliquer les prochaines mises-à-jour. En cliquant sur la notification, glapt va s’ouvrir afin que vous puissez faire le nécessaire. Sinon, comme précédement, en ligne de commande celà fonctionne toujours. En ce qui concerne les paquets téléchargés via la SBo, une vérification manuelle des mises à jour doit être lancée.

Une fois votre système à jour, vous remarquerez qu’un certains nombres de paquets, dont le noyau linux, n’ont pas été pris en compte. Pour le moment, ignorer ces paquets car je reviendrai sur ce point dans le prochain article.

Vient ensuite l’installation des applications. Le choix des applications à installer est une question de préférences personnelles. Je ne vais donc pas me justifier sur mes choix.

L’une des premières choses que je fais avec une nouvelle installation est de vérifier si vim est installé par défaut. Ici, ce n’est pas le cas, et son installation se fait tout simplement avec la commande,

$ sudo slapt-get -i vim

Ensuite, j’ai essayé d’utiliser flathub/flatpak pour télécharger des applications tierces, dont la majorité sont propriétaires (Zoom, Telegram Desktop, Slack, etc.). Malheurement, ces applications ne fonctionnent pas correctement. Par exemple sur Telegram, je ne peux pas télécharger des fichiers partagés dans mon groupe de chat. Comme ces applications sont aussi disponible soit, dans le dépôt officiel de Slackware, soit dans la SBo, j’ai décidé de ne recourir à flatpak qu’en dernier recours, lorsque je n’ai vraiment pas d’autres choix.

Voici comment s’est déroulé l’installation de Slack.

$ sudo slapt-src -i slack
Password:
The following packages will be installed:
slack
Do you want to continue? [y/N] y
Fetching README...Done
Fetching doinst.sh...Done
Fetching slack-desc...Done
Fetching slack.SlackBuild...Done
Fetching slack.info...Done
Fetching https://api.snapcraft.io/api/v1/snaps/download/JUJH91Ved74jd4ZgJCpzMBtYbPOzTlsD_118.snap...Done
slack.SlackBuild: line 68: unsquashfs: command not found
fakeroot -- sh slack.SlackBuild Failed

Si j’ai choisi cette exemple car il illustre un cas courant avec la SBo qui refuse d’installer l’application s’il manque des dépendances. Le message d’erreur nous informe que la commande « unsquashfs » est introuvable.

Comme indiqué dans le HowTo de Slackbuilds.org, ils supposent que nous avons effectué une installation complète de Slackware pour pouvoir utiliser cet outil. Cependant, il semble que Salix n’a pas installé par défaut, tous les paquets présents dans la version complète de Slackware.

All of our scripts are written and tested for usage on a full installation of the latest stable release of Slackware updated with the latest patches.

D’après la documentation sur Salix[1], la plupart des problèmes de dépendances avec les paquets téléchargés sur SBo pourrait être réglé en installant au préalable l’ensemble des paquets de slackware/d et de slackware/l.

 $ sudo slapt-get --install-set slackware/d --install-set slackware/l

Pour identifier le nom du paquet manquant, vous pouvez par exemple créer et exécuter un script nommé findpkg.sh.

#!/bin/sh
wget -qO- https://mirrors.kernel.org/slackware/slackware64-15.0/slackware64/MANIFEST.bz2 |\
bzcat |\
grep -Fe "Package: " -e "$1" |\
grep -B1 "$1"

Ensuite, lancez ce script en utilisant comme argument, le nom du fichier manquant. Dans ce cas, « unsquashfs ».

$ ./findpkg.sh unsquashfs
|| Package: ./ap/squashfs-tools-4.5-x86_64-2.txz
-rwxr-xr-x root/root 132184 2021-10-02 23:53 usr/bin/unsquashfs

Enfin, installez le paquet manquant (squashfs-tools) et relancez la commande d’installation de Slack.

III. Mes applications

Voici une liste partielle des applications que j’utilise sur ma machine, ainsi que celles que j’aurais utilisées si ma nouvelle boîte nous avait permis d’installer Linux sur nos machines de travail. (voir aussi l’article Linux en Entreprise: Applications Windows et leurs équivalents Linux)

Gestion des paquets Version Février 2024
Commentaire
slapt-get slapt-src flatpak
vim 9.0.21.27
cheese 41.1
redshift 1.12
thunderbird 115.7.0
texlive 2023.230322
texlive-extra 2021.210418
texstudio 4.0.2
ristretto 0.12.2
telegram 4.14.2 Package Version: 3.7.3-x86_64-1salix15.0
vlc 3.0.17.3
zoom 5.17.1
slack 4.35.131
vscodium 1.79.0
xournal 0.4.8.2016
evince 41.3
shutter 0.94.3
barrier 2.2.0 Package Version: 2.1.2-x86_64-1salix15.0
gtick 0.5.4
keepassxc 2.6.6
flatseal 2.1.0
chromium 121.0.6167.139 Bug https://github.com/flathub/org.chromium.Chromium/blob/master/portal_error.txt#L17
brave 1.61.116

Pour conclure ce chapitre, il est important de noter que le processus d’installation d’une application avec la commande slapt-src prend significativement plus de temps par rapport à slapt-get. Cela est dû au fait que les paquets sources téléchargés ne sont pas des paquets précompilés. Alors, je vous suggère de préparer votre café ou thé, selon vos préférences, et de vous détendre le temps que la magie de la compilation opère pour l’installation de votre application. C’est le moment parfait pour une pause café, n’est-ce pas ? ☕😄

 

Ma découverte du monde de Slackware avec Salix OS – Partie I: Installation

Partie I: Installation

Après une année sabatique, marquée par un long silence sur ce blog pour diverses obligations (boulot, vie personnelle, etc.), je me lance pour cette nouvelle année 2024 dans un défi qui n’est pas des moindre.

Mon plan est d’utiliser au quotidien une des distributions dérivées de Slackware. Par la plus grande chance, il se trouve qu’on a un vieil ordinateur qui traîne dans les parages, et qui n’attend que d’être ré-utilisé.

Voici ces caractéristiques.

Ordinateur portable Dell Inspiron 15-3552

  • CPU: Intel(R) Celeron(R) CPU N3060 @ 1.60GHz
  • GPU: Intel HD Graphics 400 (1.5 GiB)
  • RAM: 4GiB

Parmi les distributions disponibles, et heureusement qu’il n’y en a pas beaucoup sur distrowatch[1] (ou malheureusement pour Slackware), par un processus d’élimination basé sur l’importance que je leur accorde, mes préférences se tournent vers Salix[1].

Pour vous expliquer comment j’en suis arrivé à ce choix, c’est plutôt simple. J’ai éliminé d’abord toutes les distributions live sur CD (Parted Magic, Wifislax, Porteus, Slax), ensuite celles qui ciblent des personnes ou des communautés spécifiques (Slint, Plamo Linux), et enfin celles qui n’offrent pas XFCE en tant qu’environnement de bureau par défaut (Slackel, Absolute Linux). Cela nous laisse avec Zenwalk et Salix. J’ai opté pour cette dernière principalement parce que Salix se veut entièrement compatible avec Slackware[1], tout en ayant ses propres dépôts. Ainsi, les utilisateurs de Slackware peuvent tirer parti des dépôts de Salix pour accéder à des logiciels supplémentaires, et vice-versa.

I. Pré-installation

En termes de matériel, il est nécessaire de disposer d’une machine physique ou virtuelle, équipée d’au moins 1 Go de RAM et de 12 Go d’espace libre sur le disque dur.

Si vous ne vous sentez pas à l’aise avec l’outil de partitionnement en mode texte de votre disque, l’utilisation de Gparted live ou d’un CD Live de n’importe quelle distribution Linux peut être une solution adéquate. En général, Gparted y est installé par défaut, facilitant ainsi le processus de partitionnement.

Pour le partitionnement du disque, voici deux exemples de configuration que j’ai utilisés dans une machine virtuelle en tenant compte de l’architecture du système (BIOS ou UEFI) :

  • Architecture BIOS (Créer une table de partition MSDOS)
    • Partition SWAP (Primary)
      • Partition: /dev/vda1
      • File System: linux-swap
      • Mount Point:
      • Size: 2 GiB
      • Flags: swap
    • Partition ROOT (Primary)
      • Partition: /dev/vda2
      • File ext4
      • Mount Point: /
      • Size:  10 GiB
      • Flags:
    • Partition HOME (Primary) [optionnel]
      • Partition: /dev/vda3
      • File ext4
      • Mount Point: /home
      • Size:  ? GiB (ce qui reste d’espace libre sur le disque)
      • Flags: –

  • Architecture UEFI (Créer une table de partition GPT)
    • Partition de démarrage UEFI (Primary)
      • Partition: /dev/vda1
      • File System: fat32
      • Mount Point: /boot/efi
      • Size: 500 MiB (300-500 MiB)
      • Flags: boot, esp (EF00)
    • Partition SWAP (Primary)
      • Partition: /dev/vda3
      • File System: linux-swap
      • Mount Point:
      • Size: 2 GiB
      • Flags: swap
    • Partition ROOT (Primary)
      • Partition: /dev/vda2
      • File ext4
      • Mount Point: /
      • Size:  10 GiB
      • Flags: –
    • Partition HOME (Primary) [optionnel]
      • Partition: /dev/vda4
      • File ext4
      • Mount Point: /home
      • Size: ? GiB (ce qui reste d’espace libre sur le disque)
      • Flags: –

Les configurations sur mon ordinateur portable,

$ lsblk
NAME MAJ:MIN RM SIZE   RO TYPE MOUNTPOINTS
sda    8:0   0  465.8G  0 disk
├─sda1 8:1   0  500M    0 part /boot/efi
├─sda2 8:2   0  4G      0 part [SWAP]
├─sda3 8:3   0  50G     0 part /
└─sda4 8:4   0  411.3G  0 part /home
sr0    11:0  1  1024M   0 rom

La taille recommandée pour la partition /boot/efi est généralement de 200 Mo. Cela est souvent considéré comme suffisant pour stocker les fichiers nécessaires au démarrage du système d’exploitation (voir le guide de démarrage de Salix). J’ai choisi une taille de 500 Mo par précaution, anticipant d’éventuels besoins, surtout que sur un disque de 500 Go, on n’est pas à quelques centaines de Mo près.

Ensuite, si vous décidez d’avoir une partition dédiée pour le répertoire root (/), je vous recommande de lui allouer une taille minimale de 20 Go d’espace disque pour avoir une marge suffisante pour toutes les applications ainsi que l’ensemble des paquets dont ils dépendent,  et que vous allez installer ultérieurement sur votre machine. Cette précaution est essentielle puisque les systèmes utilisant Slackware et ses dérivées ne gèrent pas automatiquement les dépendances des paquets, notamment lors de la suppression d’une ou plusieurs applications.

Concernant la taille de la partition swap, assurez-vous qu’elle soit au moins équivalente à la quantité de votre RAM si vous envisagez d’utiliser la fonctionnalitée de mise en veille prolongée (hibernation) de votre machine.

Voici des recommandations pour vous guider dans votre choix :

  • RAM inférieure à 1 Go : Swap équivalente à deux fois la taille de la RAM.
  • RAM entre 1 Go et 4 Go : Swap équivalente à la taille de la RAM.
  • RAM entre 4 Go et 16 Go : Swap de 2 Go à 4 Go.
  • RAM supérieure à 16 Go : Swap équivalente 20% de la taille[1] de la RAM ou aucun swap si l’utilisation n’en nécessite pas.

En ce qui concerne la création d’une partition avec GParted à partir du CD Live de Salix sur un disque dur, voici les étapes que vous pouvez suivre.

  • Lancer le CD Live

  • Une fois sur le bureau, cliquer sur « Lancer l’installation », puis entrer le mot de passe « one »
  • Initialiser une table de partition GPT, pour les systèmes (U)EFI, et MSDOS pour les systèmes BIOS
  • Créer une nouvelle partition
  • Procéder à la création de la partition. Dans l’exemple ci-dessous, c’est celle dédiée à l’UEFI que je vais créer (à noter que cette étape n’est pas requise pour les systèmes BIOS)
  • Formatez la partition (FAT32 pour les systèmes UEFI; EXT4 pour / et /home; LINUX-SWAP pour la partition swap
    • confirmez les modifications
    • sélectionnez l’option « Gérer les drapeaux » (« Manage flags »)
    • Sélectionnew l’option correspondant à votre partition: « BOOT » et « ESP » pour l’UEFI; « SWAP » pour la partition swap. Ne rien sélectionner pour les autres partitions (root, home, etc.)

II. L’installation

Une fois le partitionnement du disque effectué, l’installation du système une simple question de clics, où vous devez tout simplement confirmer les options suggérées par défaut.

Un point que je trouve regrettable avec le CD Live de Salix, est l’absence du choix d’installation sans mode graphique, et je vais vous expliquer le pourquoi. Sur mes machines virtuelles, vu que j’ai fait plusieurs tentatives, une fois que le partitionnement du disque avec Gparter est terminé, les options permettant de sélectionner les différentes localisations à associer aux nouvelles partitions (« Copy location » et « Install location » … désolé, mais je n’ai pas fait l’effort d’installer le système en français) ne sont pas activables dans l’application d’installation de Salix.

De ce fait, j’ai du télécharger l’ISO normal pour pouvoir poursuivre l’installation.

  • Lancer le CD d’installation
  • Taper « setup »dans la console, pour démarrer la configuration et l’installation du système
  • Sélectionner le disque à utiliser pour l’installation de Salix
  • Cliquer directement sur « Quitter », car le disque a été préalablement partitionné
  • Sélectionner  la  partition  sur  laquelle l’OS sera installé
  • J’ai toujours opté pour EXT4 comme système de fichier. Vous pouvez choisir celui qui vous convient
  • Sélectionner ensuite la deuxième partition pour HOME
  • Taper « /home » dans l’encadré
  • L’écran affichera un résumé des  différentes partitions
  • Sélectionner le support d’installation (CDROM dans mon  cas)
  • Il est fortement recommandé d’effectuer une installation complète, pour éviter d’avoir des problèmes de dépendance des paquets par la suite
  • LILO est le choix de gestionnaire de démarrage par défaut sur Slackware et des distributions qui en dérivent
  • Ajouter l’emplacement de votre partition SWAP si vous souhaitez utiliser le mode hibernation[1]. Ici, j’ai juste cliqué sur OK
  • Sélectionner le secteur où installer  LILO
  • Finalement, créer un utilisateur avec les permissions SUDO, puisque l’utilisateur root sera désactivé par défaut

J’ai omis quelques étapes telles que la configuration de votre locale, de la zone horaire et le redémarrage du système, car celà n’apporte rien de plus au shmilblick[1].

III. Post-installation

Liste non exhaustive des applications installées avec Salix 15.0 :

Salix 15.0
(Mai-2022)
Dernière version Satble (Jan-2024)
Linux kernel 5.15.63 6.7.2
XFCE 4.16 4.18
Firefox ESR 102.2.0 122.0
Libreoffice 7.4.0.2 7.6.4
Atril Document Viewer 1.26.0 1.27.0
Claws Mail 4.1.0 4.2.0
Exaile 4.1.1 4.1.3
Flathub / Flatpak 1.12.7 1.14.5
Gimp 2.10.30 2.10.36
L3afpad 0.8.18.1.11 0.8.18.1
OpenPrinting CUPS 2.4.2 2.4.7
Parole Media Player 4.16.0 4.18.1
Pindgin 2.14.10 2.14.12
Ristretto 0.12.2 0.13.1
Xfburn 0.6.2 0.7.0

J’espère que cette introduction à Slackware via Salix vous a plus. A bientôt pour la suite.

Ordinateurs Portables Linux 2022 – Partie 2: Architecture RISC

II. Architecture RISC

D’après les finromations que j’ai lue sur internet, les ordinateurs portables se dotant d’une architecture RISC sont en théorie moins gourmande en énergie que ceux avec des processeurs de type x86. Par contre, ces ordinateurs ne sont pas fait pour les jeux, mais juste pour une utilisation basique d’un ordinateur.

2.1 Processeurs de type ARM

2.1.1 MNT reform

MNT reform peut être considéré comme un ordinateur portable open-hardware, ou presque[1], dont les codes sources du projets sont disponibles sur gitlab.

Par rapport à Framework où l’on peut remplacer même les ports externes à volenté, je ne pense pas que MNT reform soit modulable à ce point. Cependant, aucune pièce n’est soudée, et sont donc facilement remplaçables.

Le projet a été lancé à partir d’un financement de type participatif en 2020.

MNT Reform is the ultimate open hardware laptop, designed and assembled in Berlin, Germany. MNT Reform is uniquely designed to be as open and transparent as possible, and to support a free and open source software stack from the ground up. We invite you to take a look under the hood, customize the documented electronics, and even repair it yourself if you like.

Traduit par,

MNT Reform est l’ordinateur portable open hardware ultime, conçu et assemblé à Berlin, en Allemagne. MNT Reform est spécialement conçu pour être aussi ouvert et transparent que possible, et pour prendre en charge une pile de logiciels libres et open source à partir de zéro. Nous vous invitons à jeter un coup d’œil sous le capot, à personnaliser l’électronique documentée et même à la réparer vous-même si vous le souhaitez.

  • Il y a une petite communautée derrière le projet
  • Tutoriels sur ifixit pour le remplacement de pièces
  • Manuel (version PDF) ainsi que les codes sources du projet sont accessible au grand public
  • Toutes les pièces (internes ou externes) peuvent être remplacées facilement
  • La plupart des pièces détachées sont disponibles sur le site
  • Carte mère évolutive, et devrait être remplaçable par une version plus moderne si nécessaire
  • Pas de caméra ni de microphone, mais un haut-parleur stéréo de 1W
  • RAM: 4 Go LPDDR4 (8 Go max[1])
  • CPU: Quadricœur 64-bit ARM Cortex-A53 cores (2.24 DMIPS/MHz)
  • GPU: Vivante, GC7000Lite
  • Plusieurs choix de clavier, Français y compris
  • La batterie peut tenir jusqu’à 5 heures
  • Prix minimum de 1099€ (DIY)
  • Possibilité  de commander le produit en pièces détachées et de l’assembler soi-même (manuel en anglais)

2.1.3 olimex

Lu sur wikipedia,

L’entreprise a été créée en 1991 et se situe à Plovdiv en Bulgarie. L’entreprise est spécialisée dans la conception de cartes de développement, d’émulateurs pour le prototypage rapide de micro-contrôleurs ARM, AVR, MSP430, MAXQ et PIC. Elle est notamment à l’origine de la série de SBC OLinuXino.

2..1.4 Pine64

A propos de Pine64,

At the core of our philosophy is the notion that PINE64 is a community platform. A simplistic point of view, often offered up and referenced online, is that ‘PINE64 does hardware while the community does the software’. While this depiction is not inaccurate, it is also a gross oversimplification. The fact that PINE64 is community driven doesn’t simply entail a one-way reliance on the community or partner projects for software support; it means that the community gets to actively shape the devices, as well as the social platform, of PINE64 from the ground up. The goal is to deliver ARM64 devices that you really wish to engage with and a platform that you want to be a part of. As such, the community – PINE64 – and the Pine Store company are interlocked and intertwined, but separate entities.

Traduit par,

Au cœur de notre philosophie se trouve la notion que PINE64 est une plateforme communautaire. Un point de vue simpliste, souvent proposé et référencé en ligne, est que « PINE64 fait du matériel tandis que la communauté fait du logiciel ». Bien que cette représentation ne soit pas inexacte, c’est aussi une simplification grossière. Le fait que PINE64 soit axé sur la communauté n’implique pas simplement une dépendance à sens unique sur la communauté ou les projets partenaires pour le support logiciel ; cela signifie que la communauté peut façonner activement les appareils, ainsi que la plate-forme sociale, de PINE64 à partir de zéro. L’objectif est de fournir des appareils ARM64 avec lesquels vous souhaitez vraiment vous engager et une plate-forme dont vous souhaitez faire partie. En tant que tel, la communauté – PINE64 – et la société Pine Store sont interdépendantes et entrelacées, mais des entités distinctes.

  • Très grande communautée derrière le projet
  • Plusieurs méthodes de communication et d’interraction (blog[1][2], canal video[1][2][3], forum[1], chat[1][2][3], podecast[1], wiki[1][2], etc.)
  • Une très grande partie des composants est disponible en pièces de rechanges[1][2][3]
  • RAM: 2 Go LPDDR3 pour la Pinebook (4GB LPDDR4 pour la Pinebook Pro)
  • CPU: ARM Cortex A53 Quadricœur à 1.152 GHz (version Pro: 4 x ARM Cortex A53 Quadricœur à 1.4GHz + ARM Cortex A72 Bicœur à 1.8 GHz )
  • GPU: ARM Mali 400 MP2 (version Pro: ARM Mali T860 MP4)
  • Clavier en-US (version Pro: en-US  ou en-UK)
  • Prix mininum de $99,99 (version Pro: $219,19)

2.2 Processeurs de type: Risc-V

2.2.1 dc-roma

The world’s first native risc-v laptop
With native cutting-edge features, our ROMA laptop lets users directly expand and explore the RISC-V ecosystem.

Traduit part,

Le premier ordinateur portable risc-v natif au monde
Avec des fonctionnalités natives de pointe, notre ordinateur portable ROMA permet aux utilisateurs d’étendre et d’explorer directement l’écosystème RISC-V.

A part le fait qu’il y a une garantie allant jusqu’à 5 ans, il n’y a pas plus d’information sur le produit.

  • Apparement il devrait y avoir des pièces de rechanges, mais lesquelles?
  • RAM: 16G LPDDR4/LPDDR4X max
  • CPU: RISC-V Quadricœur Xuantie C910 (SoC Alibaba T-Head TH1520)
  • GPU: Imagination (probablement des IMG_B-Series)
  • D’après les photos, clavier en-UK
  • Prix mininum de $1499[1]

A l’heure où j’écris ce blog, aucun appareil n’a encore été délivré. Cepedant, une estimation d’expédition serait prévu pour:

  • Premium – Q4 2022
  • Standard – Q1 2023
  • Basic – Q3 2023

2.3 Processeurs de type: PowerPC

2.3.1 PowerPC notebook

J’ai suivi ce projet depuis un certain temps,

October 13, 2014 – PowerPC Notebook welcome back!

Now we are ready to switch to gnu/linux powerpc notebooks, and really we want to join together passionate peoples that want to make happen a new open source powerpc notebook will be produced soon.

We are preparing a powerful, upgradable, powerpc gnu/linux notebook.

Traduit par,

Nous sommes maintenant prêts à passer aux ordinateurs portables powerpc gnu/linux, et nous voulons vraiment réunir des personnes passionnées qui veulent réaliser un nouveau portables powerpc open source qui sera bientôt produit.

Nous préparons un ordinateur portable powerpc gnu/linux puissant et évolutif.

August 25, 2022 – Ready for Prototypes production with reworked PCB design with all available components

As a conclusion now we have everything to produce and make the hardware tests in September.

Traduit par,

En conclusion maintenant nous avons tout à produire et à faire les tests matériels en septembre.

October 18, 2022 – Prototypes in production despite heavy chip shortages

We are glad to inform you that this week the prototypes production has started and – finger crossed – we are expecting them to be ready in the beginning of November.

Traduit par,

Nous sommes heureux de vous informer que cette semaine, la production des prototypes a commencé et – croisons les doigts – nous nous attendons à ce qu’ils soient prêts début novembre.

  • Petite communauté autour du projet[1][2][3]
  • Disponibilité d’une page wiki et d’un forum
  • RAM: 2x slots pour DDR3L SO-DIMM
  • CPU: NXP T2080 e6500 64-bit dual-threaded Quadricœur, 16GFLOPS par core
  • GPU: MXM3 Radeon HD Video Card (amovible)

Une dernière note avant de clôturer ce chapitre,

Will it be possible to upgrade the PowerPC CPU?

No, the T208x NXP CPU are BGA based so the only option is to be soldered. Note that motherboards for future PowerPC CPUs will be easier and cheaper to design.

Traduit par,

Sera-t-il possible de mettre à jour le processeur PowerPC ?

Non, le processeur T208x NXP est basé sur BGA, la seule option est donc d’être soudé. Notez que les cartes mères des futurs processeurs PowerPC seront plus faciles et moins chères à concevoir.

Complément d’informations

Système sur une puce (SoC)
Allwinner SoC Family
More Proof That Allwinner Is Violating The GPL
Olimex Teres A64 Review
Imagination touts next series of GPU cores aimed at cloud server acceleration …and cars, mobile, IoT
IMG B-SERIES Do more with multi-core
Puce d’accélération de réseaux de neurones
RISC: PowerPC, SPARC, MIPS, RISCV – what is different?

Ordinateurs Portables Linux 2022 – Partie 1: Architecture CISC

Celà fait un petit moment que je cherche un ordinateur avec les critères suivantes:

  • Matériel compatible Linux
  • Au moins 8Go de RAM
  • CPU pas trop vieux
  • Carte graphique autre que NVIDIA, (amovible si possible, comme les cartes de type MXM)
  • Durée de la batterie raisonnable, d’au moins 5 heures avant de se décharger complètement
  • Livraison en l’Europe

A celà, j’ai rajouté les conditions ci-dessous.

  • Réparabilité: Machine facilement démontable en cas d’échanges de pièces
  • Améliorabilité, pour avoir une nouvelle version du CPU/GPU

En gros, l’idéal est d’avoir un portable avec les mêmes bénéfices qu’un ordinateur de bureau (pièces échangeables, etc.), mais facilement transportable.

 

I. Architecture CISC

Le but de cet article n’est pas d’établir une liste complète de fabriquants d’ordinateurs qui offrent la possibilité d’avoir Linux pré-installé sur leurs machines. Jettez un petit coup d’oeil sur Wikipedia, et vous pouvez avoir une liste non exhaustive[1] de ces fabriquants.

En éliminant les machines sur lesquelles coreboot ne peut s’installer, il ne nous reste plus que quelques fabriquant dans notre liste, dont un en particulier a attiré mon attention: Clevo.

Cet entreprise est basée à Taiwan et, est spécialisée dans la fabrication d’ordinateurs de type portable. Elle ne vend pas leurs machines directement à des revendeurs, mais passent par des intermédiaires qui, peuvent commander des ordinateurs portables prêt-à l’emploi, ou de les recevoir comme une machine de type barebook, afin d’y ajouter uniquement les composants qui les intéressent pour les revendre sur le marché.

La plupart des revendeur d’ordinateurs avec Linux pré-installé dessus, ont presque tous utilisé à un moment ou à un autre, les services de Clevo.

Je n’ai pas réussi à trouver la liste complète des revendeurs de machines fabriquées par Clevo à part ceux affichée sur leur page wikipedia.

 

1.1 Framework

Je pense que c’est le futur des ordinateurs portables, pour la simple et bonne raison que toutes les pièces peuvent être remplacer, et même de les évoluer (carte mère, mais aussi les différents modules externes).

Sur leurs pages internet, je cite:

We know consumer electronics can be better for you and for the environment. Unlike most products, ours are open for you to repair and upgrade.

Traduit par,

Nous savons que l’électronique grand public peut être meilleure pour vous et pour l’environnement. Contrairement à la plupart des produits, les nôtres peuvent être réparés et mis à niveau.

  • Très grande communautée derrière le projet
  • Tutoriels accessible au grand public
  • Toutes les pièces (internes ou externes) peuvent être remplacées facilement
  • Carte mère évolutive, et devrait être remplaçable par une version plus moderne si nécessaire
  • Interrupteur mécanique pour éteindre la caméra et le microphone
  • RMA: 64 Go max
  • CPU/GPU intel/intel intégré, et des demandes se font entendre pour proposer des CPUs du fabriquant AMD[1][2]
  • Différents types de claviers, dont le français
  • Durée de la batterie entre 5 et 8 heures[1][2] (tuto pour l’amélioration de la durée de vie d’une batterie)
  • Bonne revue (en anglais) du produit
  • Prix minimum de 829 € (DIY)
  • Possibilité  de commander le produit en pièces détachées et de l’assembler soi-même

1.2 Ordinateurs Why!

  • Why! est une entreprise qui veut combattre l’obsolescence programmée.

Sur leur site on peut lire,

« why! vous propose des ordinateurs durables, réparables et s’engage à fournir des pièces de rechange durant 10 ans et au-delà, y compris des pièces d’occasion à des prix imbattables (…).

De plus, nous proposons d’effectuer, après 3 à 5 ans d’utilisation, un «service» sur votre ordinateur, tout comme cela se fait sur une voiture, par exemple. Il s’agit d’ouvrir l’ordinateur, de nettoyer la poussière qui a forcément été aspirée par le ventilateur au fil des ans, de vérifier que les mises aient été faites, changer la pile du BIOS, éventuellement remettre des vis, des caches ou autres qui auraient disparu, peut-être de changer la batterie, et voir s’il est utile de mettre un disque dur plus gros ou de rajouter de la mémoire vive. Ainsi, votre ordinateur vivra une deuxième jeunesse et sa durée de vie sera prolongée. »

  • Forum et blog dédié aux produits why!
  • La grande majorité des pièces sont remplaçables et disponibles sur leur site
  • Plusieurs guides sur ifixit, concernant la réparation de leurs produits
  • RAM: 64 Go max
  • CPU/GPU Intel/Intel intégré ou AMD Ryzen/Nvidia
  • Choix du clavier limité au français et allemand
  • Prix minimum de 930 €

J’espère dans le future que leurs partenariat avec Fairphone va pousser cette entreprise à fabriquer des ordinateurs modulables, de la même manière qu’un ordinateur framework.

1.3 Starlabs

La companie Starlabs peut proposer des portables fait sure mesure, en plus de ceux qui sont proposés sur leur site internet.

Sur leur page, on peut lire.

Back in 2016, Star Labs was formed in a pub. We all depended on using Linux, all with different laptops and all with different complaints about them. It always perplexed us that a laptop had never been made specifically for Linux. Whilst many had been « converted » to run Linux – they seldom offered the experience that macOS and Windows users had. So, after a few pints, we decided to make one.

In 2017, we started using Clevo as a supplier. (…) When 2018 came around, we started working on our very own laptops We use Linux and our own hardware. (…) Linux support and customer service is our number one priority..

Traduit par,

En 2016, Star Labs a été formé dans un pub. Nous dépendions tous de l’utilisation de Linux, tous avec des ordinateurs portables différents et tous avec des plaintes différentes à leur sujet. Cela nous a toujours laissé perplexes qu’un ordinateur portable n’ait jamais été conçu spécifiquement pour Linux. Alors que beaucoup avaient été « convertis » pour exécuter Linux, ils offraient rarement l’expérience que les utilisateurs de macOS et Windows avaient. Donc, après quelques pintes, nous avons décidé d’en faire un.

En 2017, nous avons commencé à utiliser Clevo comme fournisseur. (…) Lorsque 2018 est arrivé, nous avons commencé à travailler sur nos propres ordinateurs portables. Nous utilisons Linux et notre propre matériel. (…) Le support Linux et le service client sont notre priorité numéro un.

  • Pas de forum, mais un blog et une page de tutoriel
  • Pièces détachées disponible, carte mère y compris
  • RAM: 64 Go max
  • CPU/GPU intel/Intel intégré ou AMD Ryzen/Intel intégré
  • Différents types de claviers, dont le français (en fonction du modèle)
  • La durée de la batterie peut aller de 8 à 14 heures. Je ne suis pas sur si cette durée de vie de la batterie est calculée en mode d’utilisation normal/bureau ou non
  • Prix minimum de £400

1.4 Slimbook

Ce qu’il faut savoir en ce qui concerne ce projet,

SLIMBOOK was born in 2015 with the idea of ​​being the best brand in the computer market with GNU/Linux (although it is also verified the absolute compatibility with Microsoft Windows). (…)

We assemble computers searching for excellent quality and warranty service, at a reasonable price. (…)

In 2018 we created a new project associated with SLIMBOOK, called Linux Center . It is the first multidisciplinary physical space in Spain, designed to disseminate open source and free technologies in which the community is the protagonist. A space where free courses are proposed, projects are presented, hardware is exposed and knowledge and experiences are shared.
A place available for associations and communities, and of course, for individuals with needs. The project made for the community and provided free of charge, has been forged the way that communities have been requesting and currently also has a forum :)

Traduit par,

SLIMBOOK est né en 2015 avec l’idée d’être la meilleure marque du marché informatique avec GNU/Linux (bien qu’il soit également vérifié la compatibilité absolue avec Microsoft Windows). (…)

Nous assemblons des ordinateurs en recherchant une excellente qualité et un service de garantie, à un prix raisonnable. (…)

En 2018, nous avons créé un nouveau projet associé à SLIMBOOK, appelé Linux Center. C’est le premier espace physique multidisciplinaire en Espagne, conçu pour diffuser des technologies open source et gratuites dans lesquelles la communauté est le protagoniste. Un espace où des cours gratuits sont proposés, des projets sont présentés, du matériel est exposé et des connaissances et expériences sont partagées. Un lieu disponible pour les associations et les collectivités, et bien sûr, pour les personnes ayant des besoins. Le projet fait pour la communauté et fourni gratuitement, a été forgé de la manière que les communautés ont demandée et a actuellement aussi un forum :)

J’ai noté qu’il y a pas mal de choix au niveau ordinateurs portables et bureaux.

  • Forum et tutoriels en espagnol uniquement. Par contre le FAQ a été traduit en anglais
  • Propose des pièces détachées, mais pas toutes les pièces sont disponibles
  • RAM: 64 Go max
  • CPU/GPU AMD Ryzen/Nvidia, AMD Ryzen/Intel intégré, Intel/Intel intel intégré
  • Clavier disponible dans plusieurs langues, dont le français
  • Prix minimum de 679,95 €

La durée de vie des batteries sur les Slimbook,

According to the MobileMark tests used by all manufacturers, up to 12 hours of battery, which is reduced with an office use to approximately 5 to 8 hours.

Traduction,

D’après les tests MobileMark utilisés par tous les constructeurs, jusqu’à 12 heures d’autonomie, ce qui se réduit avec une utilisation bureautique à environ 5 à 8 heures.

1.5 Tuxedo

Sur la page de Tuxedo,

At TUXEDO, Linux is not a sideshow or niche business. Linux is our brand essence!

Linux first – according to this philosophy, TUXEDO notebooks and desktop computers are optimized for a flawless operation with Linux in the first place.

This way you don’t just get Linux notebooks and PCs with best-possible Linux support, but hardware, which gets delivered to you with all drivers preinstalled for an « out-of-the-box » Linux experience. Unbox it, turn it on and you are good to go!

Traduit par,

Chez TUXEDO, Linux n’est pas une activité secondaire ou de niche. Linux est l’essence de notre marque !

Linux d’abord – selon cette philosophie, les ordinateurs portables et les ordinateurs de bureau TUXEDO sont optimisés pour un fonctionnement sans faille avec Linux en premier lieu.

De cette façon, vous n’obtenez pas seulement des ordinateurs portables et des PC Linux avec le meilleur support Linux possible, mais du matériel, qui vous est livré avec tous les pilotes préinstallés pour une expérience Linux « prête à l’emploi ». Déballez-le, allumez-le et vous êtes prêt à partir !

  • Pas de forum, juste un blog
  • Très limités au niveau des pièces de rechanges
  • RAM: 64 Go max
  • Clavier disponible dans plusieurs langues, dont le français
  • CPU/GPU: Intel/Intel intégré, Intel/Nvidia, AMD Ryzen/AMD Radeon
  • La batterie peut tenir entre 7 et 12heures, en fonction du modèle
  • Prix minimum de 849 €

1.6 Purism

L’entreprise Purism s’est lancé dans la construction d’ordinateur à partir d’une demande financement participatif sur crowdsupply en 2015.

The Purism Librem 15 is the first high-end laptop in the world that ships without mystery software in the kernel, operating system, or any software applications. Every other consumer-grade laptop you can purchase comes with an operating system that includes suspect, proprietary software, and there’s no way for you to know what that software does.

The reality is that unless every aspect of your kernel, operating system, and software applications are free/libre and open source, there is no way to know that your computer is truly working in your best interest. Purism is the first to solve this problem.

Traduit par,

Le Purism Librem 15 est le premier ordinateur portable haut de gamme au monde livré sans logiciel mystérieux dans le noyau, le système d’exploitation ou toute autre application logicielle. Tous les autres ordinateurs portables grand public que vous pouvez acheter sont livrés avec un système d’exploitation qui inclut un logiciel propriétaire suspect, et vous n’avez aucun moyen de savoir ce que fait ce logiciel.

La réalité est qu’à moins que chaque aspect de votre noyau, de votre système d’exploitation et de vos applications logicielles ne soit gratuit/libre et open source, il n’y a aucun moyen de savoir si votre ordinateur fonctionne vraiment dans votre meilleur intérêt. Le purisme est le premier à résoudre ce problème.

  • Très limité en choix au niveau des ordinateurs portables
  • Disponibilité des documentations, FAQ et Forums
  • Interrupteur mécanique pour éteindre la caméra et le microphone
  • RAM: 64 Go max
  • CPU/GPU Intel/Intel intégré
  • Clavier en-US[1][2][3] uniquement
  • Prix minimum de $1,370.00

1.7 System76

System76 is, and always will be, a manufacturer and advocate of open source products. It’s in our DNA. Errr…code. We believe in you having ownership over your technology, meaning you have the right to repair it, modify it to meet your needs, or dismantle it into 1001 pieces to see how it works. Your computer is yours—and nothing less.

Traduit par,

System76 est, et sera toujours, un fabricant et un défenseur des produits open source. C’est dans notre ADN. Euh… code. Nous croyons que vous êtes propriétaire de votre technologie, ce qui signifie que vous avez le droit de la réparer, de la modifier pour répondre à vos besoins ou de la démonter en 1001 pièces pour voir comment elle fonctionne. Votre ordinateur est à vous, et rien de moins.

  • Plusieurs choix en ordinateurs, portables et bureaux
  • Pas de forum ni de blogs, mais un système d’aide sous forme d’articles est disponible sur le site
  • RAM: 64 Go max
  • CPU/GPU Intel/Intel intégré, ou Intel/Nvidia
  • Clavier en-US[1] uniquement
  • Prix minimum de $949

1.8 Ekimia

Je n’ai pas plus d’information sur Ekimia, à part

La société Ekimia développe et déploie des solutions pour améliorer l’informatique des professionnels et citoyens.

  • Plusieurs choix d’ordinateurs de bureau et portables
  • Une page de News, pas de blog ni de forum, mais quelques tutoriels
  • Guide de réparation sur ixfixit
  • Une bonne liste de pièces de rechange
  • RAM: 64 Go max
  • CPU/GPU Intel/Intel intégré
  • Plusieurs choix de clavier, Français y compris
  • La batterie peut tenir jusqu’à 10 heures
  • Prix minimum de 849 €

 

Complément d’informations

Comparaison CISC/RISC
Indice de réparabilité des ordinateurs portables
General impressions of Clevo hardware
Binary Blobs and You

[Proxmox] Quelques problèmes suite à la restauration de snapshots

Après avoir restauré un instantané (snapshot en anglais) de quelques mois (5 plus exactement), je n’ai pas pu mettre à jour ma machine virtuelle Ubuntu, qui tourne sous Proxmox.

I. InRelease is not valid yet

Voici le genre d’erreur que j’ai reçu:

$ sudo apt update
E: Release file for http://ie.archive.ubuntu.com/ubuntu/dists/focal-security/InRelease is not valid yet 
(invalid for another 133d 4h 1min 39s). Updates for this repository will not be applied.

Ce message nous indique que les packets du dépot Ubuntu ne sont pas valides pour 133 jours de plus. Et ceci est généralement dû à la différence de temps entre l’horloge de la machine avec celle sur internet.

Pour vous confirmer cela, je vais utiliser un petit script pour calculer le nombre de jours écoulés depuis la restauration du système.

$ echo $((($(date +%s --date "2017-06-12")-$(date +%s --date "2017-01-29"))/(3600*24))) days
133 days

J’espère que vous voyez où je veux en venir.

$ date
Sat 29 Jan 20:16:32 GMT 2022

$ timedatectl status
               Local time: Sun 2022-01-30 14:58:45 UTC
           Universal time: Sun 2022-01-30 14:58:45 UTC
                 RTC time: Sun 2022-01-30 14:58:46    
                Time zone: Etc/UTC (UTC, +0000)       
System clock synchronized: no                        
              NTP service: n/a                        
          RTC in local TZ: no

L’heure affichée n’est pas la bonne. Elle était bloquée au moment du snapshot, et ne s’est pas réajustée automatiquement.

Pour y remédier, redémarrer le service NTP.

$ sudo systemctl restart ntp.service

$ timedatectl status
               Local time: Sun 2022-06-12 21:36:36 UTC
           Universal time: Sun 2022-06-12 21:36:36 UTC
                 RTC time: Sun 2022-06-12 21:36:37    
                Time zone: Etc/UTC (UTC, +0000)       
System clock synchronized: yes                        
              NTP service: n/a                        
          RTC in local TZ: no  

$ date
Sun 12 Jun 21:38:56 UTC 2022

Tout est revenu à la normale.

II. Could not get lock /var/lib/dpkg/lock-frontend

Ensuite, en entammant la màj du système ubuntu, je suis tombé sur un autre petit soucis.

$ sudo apt upgrade
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. 
It is held by process 83602 (unattended-upgr)... 90s

Ici, le message fait référence à une màj non-surveillé (unattended-upgrade[1][2]), qui est au fait, une mise à niveau de la sécurité du système, de façon automatique.

La solution dans ce cas est d’attendre patiemment que le système finisse ce qu’il a à faire et se débloque de lui même. Si vous n’êtes pas du genre patient, dans ce cas, tuer le ou les processus qui peuvent bloquer notre demande de màj.

$ sudo lsof /var/lib/dpkg/lock-frontend
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unattende 109509 root 8uW REG 253,0 0 2483 /var/lib/dpkg/lock-frontend

$ sudo kill -9 109509

Revérifier qu’il n’y plus de màj automatique qui tourne en arrière plan.

$ sudo lsof /var/lib/dpkg/lock-frontend

Supprimer ensuite le fichier de vérrouillage.

$ sudo rm /var/lib/dpkg/lock-frontend

Maintenant, vous devriez pouvoir procéder à la màj de votre machine.

Sources

Solve Kali Error “InRelease is not valid yet (invalid for another Xh Xmin Xs)”
How to Solve “Could not open lock file /var/lib/dpkg/lock-frontend” Error

[k8s] The connection to the server [ip-address]:6443 was refused – did you specify the right host or port?

J’ai rencontré une série d’erreurs pendant, et après une mise-à-jour sur Ubuntu, entrainant le redéploiement de mon cluster kubernetes.

I. Problèmes de Mise-à-jour du serveur Ubuntu

1.1 URL non valide pendant X temps

Tout commence par un échec de mise en cache avec la commande « apt update » de la dernière version des paquets installés sur ma machine.

E: Release file for http://[URL] is not valid yet (invalid for another XXh YYmin ZZs). Updates for this repository will not be applied.

Ce message nous indique que l’horloge du serveur n’est pas en synchronisation avec l’horloge géographique.

Pour y remédier, redémarrer le service NTP.

$ sudo service ntp restart

Ou,

$ sudo systemctl restart ntp.service

Je vais essayer d’écrire un autre article pour vous aider à dépanner votre serveur si le redémarrage du service NTP ne vous a pas aidé. Sinon, à la fin de cette article, je vous ai partargé mes sources afin que vous puisser progresser et résoudre le problème par vous même.

1.2 Cache vérouillé

Vient ensuite le moment de la mise-à-jour avec « apt upgrade » qui ne se déroule pas comme prévue, et nous renvoie un message:

Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend

De mon côté, je n’ai rien fait de particulier à part patienter. La mise-à-jour s’est terminée sans encombre après un certain temps d’attente.

Je tiens à préciser que j’ai essayé de tuer le processus apt qui a bloqué la màj, mais rien n’y fait. J’étais retombé sur le même message d’erreur.

II. Cluster Kubernetes inaccessible

2.1 Problème d’accès au cluster

Vient ensuite un problème d’accès au cluster kubernetes, la liste des Pods et des Nodes dans ne peut pas s’afficher.

$ kubectl get node
The connection to the server [URL]:6443 was refused - did you specify the right host or port?

Je tiens à précisé que mon clusteur fonctionnait sans problème avec cette màj. De ce fait, la méthode ci-dessous risque de ne pas fonctionner si vous n’êtes pas dans les mêmes conditions.

Vérifier avant tout, que tous les services nécessaires au bon fonctionnement de kubernetes ont bien démarrés.

$ service docker status

$ systemctl status kubelet 

Détruisez le cluster kubernetes, en lançant la commande  kubeadm reset sur chacun des nodes et, du/des Master(s).

 

$ kubeadm reset

Cette commande ne supprime pas le fichier $HOME/.kube.bak, qu’il va falloir supprimer manuellement au niveau du Master, afin d’éviter d’avoir des problèmes de certificats.

$ mv $HOME/.kube $HOME/.kube.bak

Lancer ensuite la commande kubeadm init, puis suivez les instructions proposées.

Je ne vais pas ré-expliquer tout le processus, mais si vous avez des doutes, revoyez le chapitre sur le déploiement de kubernetes avec kubeadmin.

$ sudo kubeadm init --pod-network-cidr [CIDR]/[SUBNET]

$ mkdir -p $HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

$ sudo su

# export KUBECONFIG=/etc/kubernetes/admin.conf

# exit

Vous pouvez maintenant joindre chacun des Nodes au Master.

$ sudo kubeadm join [ip-address]:6443 --token xxxxxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:84496fa085b4bd4b15e39b6d368ea690467d0eyyyyyyyyyyyyyyyyyyyyyy

Finalement, redéployer le plugin Canal, pour les communications réseaux.

$ curl https://docs.projectcalico.org/manifests/canal.yaml -O

$ kubectl apply -f canal.yaml

Vérifier maintenant que tout est bon.

$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-85b5b5888d-g6ttn 1/1 Running 0 2m14s
kube-system canal-55ln8 2/2 Running 0 2m15s
kube-system canal-ml6qf 2/2 Running 0 2m15s
kube-system canal-nhp8s 2/2 Running 0 2m15s
kube-system coredns-64897985d-7lll2 1/1 Running 0 24m
kube-system coredns-64897985d-x8bm9 1/1 Running 0 24m
kube-system etcd-k8sn01 1/1 Running 3 24m
kube-system kube-apiserver-k8sn01 1/1 Running 3 24m
kube-system kube-controller-manager-k8sn01 1/1 Running 4 (9m6s ago) 24m
kube-system kube-proxy-8b48j 1/1 Running 0 24m
kube-system kube-proxy-9qdjf 1/1 Running 0 22m
kube-system kube-proxy-v4579 1/1 Running 0 16m
kube-system kube-scheduler-k8sn01 1/1 Running 4 (9m6s ago) 24m

2.2 Quelques problèmes

Après avoir détruit et reconstruit le cluster de kubernetes, si vous avez un problème de certificat, c’est parce que vous n’avez pas supprimé le fichier $HOME/.kube/config.

$ kubectl get node
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

Une autre erreur que vous pouvez rencontrer,

$ sudo kubeadm join [ip-address]:6443 --token xxxxxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:84496fa085b4bd4b15e39b6d368ea690467d0eyyyyyyyyyyyyyyyyyyyyyy

[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

Ceci est du au fait que vous n’avez pas réinitialiser l’un des nodes avec kubeadm reset.

Sources

sudo apt update error: « Release file is not yet valid »
The connection to the server <host>:6443 was refused – did you specify the right host or port?

[debian] Installation de openmediavault 6 sur un raspberry pi

Sachez que,

  • La famille BSD n’est pas installable sur une architecture ARM, d’où mon choix de OpenMediavault (OMV), qui tourne sous linux
  • La version de OpenMediavault est liée à celle de debian installée sur votre machine. Pour pouvoir l’installer ou le mettre à jour vers la version 6, il vous faudrait donc avoir debian 11 (bullseye) sur votre machine

Les étapes pour passer de la version 10 à 11de debian sur un raspberry pi, sont décrites dans cet article. Pour ce faire,

/!\ N’oubliez pas de faire une sauvegarde de vos données. Ce n’est pas une mauvaise idée de faire une copie de l’image de votre carte SD

Remplacer « buster » par « bullseye » dans /etc/apt/sources.list et /etc/apt/sources.list.d/, puis taper les commandes suivantes:

pi@raspberrypi:~$ sudo apt update

pi@raspberrypi:~$ sudo apt install libgcc-8-dev gcc-8-base

pi@raspberrypi:~$ sudo apt full-upgrade

Bien que je n’ai eu aucun soucis de mise-à-niveau de buster (version 10 de debian) vers bullseye, j’ai décidé de réinstaller le système directement avec debian bullseye, pour espérer résoudre un problème d’accès au serveur NFS en réinstallant OMV par la même occasion.

I.Préparation du raspberry pi

Si vous venez d’effectuer une mise-à-niveau de la version 10 à 11 de debian, vous pouvez directement passer à l’étape de mise en place d’un nouvel utilisateur.

1.1 Installation de Raspberry OS 11

Pour l’installation du système d’exploitation, vous avez le choix entre différents type de supports.

  • Carte SD
  • Disque SSD[1]
  • Clé USB[1]
  • Sans disque (amorçage PXE )[1]

J’ai choisi l’option de la carte SD pour me simplifier la vie.

L’installation de raspberry OS se fait plus facilement avec l’outil Raspberry Pi Imager.

1.2 Mise en place d’un nouvel utilisateur sur le raspberry pi

Cette partie n’est qu’un bref résumé de ce que j’ai écrit dans l’un de mes articles sur la configuration du raspberry pi. Pour plus de détails, je vous renvoie à ce lien.

Dans un premier temps,

  • Activer SSH
  • Optionnellement, vous pouvez temporairement autoriser l’utilisateur root à se connecter à distance

Puis, taper les commandes ci-dessous pour remplacer l’utilisateur pi par celui de votre choix.

pi@raspberrypi:~$ sudo passwd

pi@raspberrypi:~# su -

root@raspberrypi:~# usermod -l USERNAME -d /home/USERNAME -m pi

root@raspberrypi:~# groupmod -n USERNAME pi

root@raspberrypi:~# reboot

Remplacer USERNAME par le nouveau nom de l’utilisateur.

Redémarrer le raspberry pi, puis désactiver le compte root avec la commande,

student@raspberrypi:~$ sudo passwd -dl root

II. Configuration de OpenMediaVault (OMV)

2.1 Connection SSH

L’installation de OMV 6 se fait via un script disponible sur github à cet URL.

sudo wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

Une fois l’installation terminée, l’url de OMV sera l’adresse IP de votre raspberry pi, associé au port 80.

Les identifiants par défaut sont les suivants,

  • utilisateur: admin
  • mot de passe: openmediavault

Il se peut que la connection SSH soit désactivée une fois l’installation d’OVM terminé. Pour la réactiver,

  • Cocher l’option d’activation de SSH à partir de Services>SSH

  • Ajouter à votre utilisateur le groupe SSH
    • Dans User Management>Users
    • Sélectionner votre utilisateur
    • Cliquer sur Editer
    • Dans le menu déroulant affichant la liste des groupes, cocher SSH

2.2 Performance du disque

2.2.1 Mémoire Flash

Le plugin openmediavault-flashmemory devrait avoir été déjà installé avec le script, et que vous pouvez vérifier si c’est le cas à partir du GUI dans System>Plugins. Ce plugin permet d’améliorer la durée de vie d’une carte SD.

2.2.2 Write-cache

Activer l’option write-cache dans Storage>Disks, puis éditer votre disque avec les options:

  • 1 Minimum power usage with standby (spindown)
  • Minimum performance, minimum accoustic
  • Spindown time 120 minutes
  • Enable write-cache

L’intérêt d’avoir cette option désactivée est qu’en cas de coupure de courant, vous aurez moins de soucis de corruption de données. C’est un risque à prendre pour avoir une meilleure performance en lecture-écriture du disque avec l’option write-cache activée. (voir ce commentaire)

Réfléchissez donc à quelle option vous convient le mieux.

2.2.3 S.M.A.R.T

Self-Monitoring, Analysis, and Reporting Technology, ou S.M.A.R.T. (littéralement Technique d’Auto-surveillance, d’Analyse et de Rapport) est un système de surveillance du disque dur d’un ordinateur. Il permet de faire un diagnostic selon plusieurs indicateurs de fiabilité dans le but d’anticiper les erreurs sur le disque dur. (wikipedia)

Pour activer SMART,

  • Dans Storage>S.M.A.R.T>Settings
  • Cocher l’option « enable », puis garder les autres options par défaut

Ensuite, sélectionner votre disque dans Storage>S.M.A.R.T>Devices. Dans le mode édition, vérifier que « Monitoring enabled » est activé.

Puis je vous propose de créer au moins un test court (short self-test) dans Storage>S.M.A.R.T>Scheduled Tasks, pour un environment local.

Cependant, les deux types de tâches suivantes sont importantes pour la bonne santé de votre (vos) disque(s).

  • Short self-test
    Ne dure que quelques minutes, et le disque est toujours accessible durant le test
    Ce type de test est utilisé pour ne tester que quelques composants électronique du disque
    Cette tâche devrait être plannifié pour tourner au moins une fois par semaine
  • Long self-test
    Dure plus longtemps
    Effectue un test complet du disque et essaye de réparer les secteurs déffectueux

    Durant le test, le disque ne sera pas accessible du tout

Pour plus d’information sur ces tests, je vous recommande vivement de lire le manuel d’instruction d’OMV.

Vous pouvez visualiser les résultats des tests dansStorage>S.M.A.R.T>Devices  puis sélectionner votre disque,  et cliquer sur « Show details > Extended Information ».

2.3 Configurations supplémentaires

2.3.1 Connection HTTPs

Pour se connecter à l’URL de OMV de façon « sécurisé »,

  • Créer un certificat dans System>Certificates>SSL
  • Authoriser la connection SSL dans Workbench>Secure Connection:
    • SSL/TLS enabled
    • Sélectionner votre certificat
    • Utiliser le port 443

2.3.2 Adresse IP

Utiliser l’option d’adresse IP statique pour accéder à votre serveur OMV. Les modifications se font dans Network>Interfaces.

Sources

omv 6.x on rpi
Installation and Setup Videos – Beginning, Intermediate and Advanced
DIY NAS with OMV, SnapRAID, MergerFS, and Disk Encryption
OMV: Drive Self-Tests
cronjob

[debian] Mise-à-niveau de la version 6 de Proxmox à la version 7

Comme d’habitude, faites une sauvegarde de vos machines virtuellles avant toute manipulation, puis lisez attentivement les instructions de la documentation officielle pour la mise-à-niveau de la version 6 vers la 7 du serveur Proxmox.

Si vous utilisez Ceph, prenez note des étapes supplémentaires que je ne vais pas détailler ici puisque je ne l’utilise pas.

I. Préparation

1.1 Màj de debian

La version de Promox étant dépendante de celle de debian[1]. Commencer par une mise-à-niveau de debian vers la version 11 (bullseye) afin de pouvoir installer la version 7 de Proxmox.

Mais avant celà, une petite mise-à-jour est nécessaire afin de s’assurer d’avoir la dernière version de Proxmox correspondante à la debian 10, qui est la version 6.4.

# apt update 
# apt upgrade
# apt dist-upgrade

Les options de apt avec dist-upgrade et full-upgrade sont équivalentes. Vous  pouvez utiliser l’une ou l’autre commande pour arriver au même résultat.

# hostnamectl
   Static hostname: xxxx
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: yyyy
           Boot ID: 5ced626bfbfe464ab962eda687676f79
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 5.4.140-1-pve
      Architecture: x86-64

1.2 Version de Proxmox

Une fois la màj de debian terminée, vérifier que Proxmox tourne avec la version 6.4.

Deux méthodes pour le faire,

– A partir de la page de connection,

– En ligne de commande,

# pveversion
pve-manager/6.4-13/9f411e79 (running kernel: 5.4.140-1-pve)

1.2 Préparation de Proxmox

Nous voilà enfin prêt à mettre Promox à niveau. Est-ce vraiment le cas?

Un autre petit test s’impose, avec l’outil pve6to7. Comme son nom l’indique, ce test vérifie si la mise-à niveau de la version 6 vers la version 7 peut se faire sans problème.

# pve6to7 --full

<!-- sortie tronquée-->
= SUMMARY =

TOTAL: 20
PASSED: 17
SKIPPED: 3
WARNINGS: 0
FAILURES: 0

Vérifier que tout est bon avant de vous lancer dans la migration de la version 6 à la version 7 de proxmox. Et si le test rapporte des problèmes, régler ceux là en premier avant d’aller plus loin.

1.3 Ifupdown

Un petit changement au niveau du réseau, est l’utilisation de ifupdown2 pour remplacer ifupdown et ifenslave. Cet outil est nécessaire pour l’utilisation de proxmox version 7.

Lors de l’installation de ifupdown2, si votre système veut supprimer des paquets autres que les deux cités ci-dessus (ifupdown et ifenslave)[1][2], arrêter de suite l’installation et faites des recherches pour comprendre la raison.

# apt install ifupdown2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  net-tools
Use 'apt autoremove' to remove it.
Suggested packages:
  ethtool python3-gvgen python3-mako
The following packages will be REMOVED:
  ifenslave ifenslave-2.6 ifupdown
The following NEW packages will be installed:
  ifupdown2
0 upgraded, 1 newly installed, 3 to remove and 0 not upgraded.
Need to get 227 kB of archives.
After this operation, 1,333 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Une fois installé le paquet ifupdown2, valider les modifications dans proxmox en cliquant sur le bouton « Apply configuration » au niveau de l’interface réseau, dans la page devotre serveur Proxmox.

II. Mise-à-niveau de debian et de Proxmox

2.1 Fichier sources.list

La préparation de la mise-à-niveau de debian/Proxmox commence par une sauvegarde des fichiers sources.list et sources.list.d.

# cp /etc/apt/sources.list /etc/apt/sources.list.bak
# cp /etc/apt/sources.list.d/pve-no-subscription.list /etc/apt/sources.list.bak.d/pve-no-subscription.list.bak

Modifier le contenu du fichier sources.list.

# sed -i 's/buster\/updates/bullseye-security/g;s/buster/bullseye/g' /etc/apt/sources.list

Désactiver tous les dépots Proxmox dans sources.list.d en ajoutant un devant l’URL vers le dépôt de Proxmox.

root@zzzz:/etc/apt# cat sources.list.d/pve-no-subscription.list
# .list file automatically generated by pve-nag-buster at Tue 17 Mar 2020 06:11:49 AM GMT
#
# If pve-nag-buster is installed again this file will be overwritten
#

#deb http://download.proxmox.com/debian/pve buster pve-no-subscription

Votre fichier sources.list devrait ressembler à,

root@zzzz:/etc/apt# cat sources.list
deb http://ftp.debian.org/debian bullseye main contrib non-free
deb http://ftp.debian.org/debian bullseye-updates main contrib non-free

# security updates
#deb http://security.debian.org bullseye-security main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib

# PVE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription

# The pvetest repository should (as the name implies) only be used for 
# testing new features or bug fixes
#deb http://download.proxmox.com/debian/pve bullseye pvetest

Ensuite, c’est votre choix d’avoir les URL pour accéder aux dépôts de Proxmox à partir du fichier /etc/apt/sources.list ou de /etc/apt/sources.list.d/pve-no-subscription.list.

2.2 Mise-à-niveau de debian/Proxmox

Connectez vous maintenant en mode console directement sur la machine où est installée Proxmox, si ce n’est pas déjà fait, afin d’éviter tout risque de déconnection pendant la màj.

Pour une connection en mode console, brancher un écran et un clavier directement au niveau du serveur physique.

Lancer la mise-à-niveau et bonne chance!

# apt update

# apt dist-upgrade

Et enfin, redémarrer votre système.

# systemctl reboot

Vérification,

# hostnamectl
   Static hostname: xxxx
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: yyyy
           Boot ID: 5c0b825b548f45759fb98fad323ee3b2
  Operating System: Debian GNU/Linux 11 (bullseye)
            Kernel: Linux 5.11.22-5-pve
      Architecture: x86-64

# pveversion
pve-manager/7.0-13/7aa7e488 (running kernel: 5.11.22-5-pve)

Sources

Upgrade from 6.x to 7.0

[gitlab] Mise-à-jour de gitlab de la version 13 à 14

La mise à jour de gitlab de la version 13 à la version 14 ne s’est pas déroulée comme prévue, sinon je n’aurai pas écrit ce blog.

Ci-dessous les différentes étapes que j’ai suivies, pour arriver à mes fins.

Ne copier pas bêtement mes codes sans lire les messages d’erreurs durant la mise-à-jour sur votre machine. Lisez bien ce qui est marqué dans ces messages afin de pouvoir prendre les bonnes mesures pour réparer ce qui ne va pas.

Le problème que j’ai rencontré à commencé par une simple màj du système.

$ sudo apt upgrade
...
The following packages will be upgraded:
  gitlab-ee
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/1,013 MB of archives.
After this operation, 70.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
(Reading database ... 115405 files and directories currently installed.)
Preparing to unpack .../gitlab-ee_14.2.3-ee.0_amd64.deb ...
gitlab preinstall: It seems you are upgrading from major version 13 to major version 14.
gitlab preinstall: It is required to upgrade to the latest 14.0.x version first before proceeding.
gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/index.html#upgrade-paths
dpkg: error processing archive /var/cache/apt/archives/gitlab-ee_14.2.3-ee.0_amd64.deb (--unpack):
 new gitlab-ee package pre-installation script subprocess returned error exit status 1

Pour vérifier la version de gitlab,

$ grep gitlab /opt/gitlab/version-manifest.txt |head -n1
gitlab-ee 13.11.3

Le message d’erreur me dit qu’il faudrait installer la dernière version en 14.0.x  (gitlab-ee_14.0.9-ee.0_arm64.deb) dans un premier temps.

L’installation de ce packet se fait, en précisant la version à installer après le signe égale en relation à notre paquet.

$ sudo apt install gitlab-ee=14.0.9-ee.0
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  gitlab-ee
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,001 MB of archives.
After this operation, 77.9 MB of additional disk space will be used.
Get:1 https://packages.gitlab.com/gitlab/gitlab-ee/debian buster/main amd64 gitlab-ee amd64 14.0.9-ee.0 [1,001 MB]
Fetched 1,001 MB in 44s (22.8 MB/s)                                                                                                                                                     
(Reading database ... 115405 files and directories currently installed.)
Preparing to unpack .../gitlab-ee_14.0.9-ee.0_amd64.deb ...
gitlab preinstall: It seems you are upgrading from major version 13 to major version 14.
gitlab preinstall: It is required to upgrade to the latest 13.12.x version first before proceeding.
gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/index.html#upgrade-paths
dpkg: error processing archive /var/cache/apt/archives/gitlab-ee_14.0.9-ee.0_amd64.deb (--unpack):
 new gitlab-ee package pre-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 /var/cache/apt/archives/gitlab-ee_14.0.9-ee.0_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Même problème que précédement. Le système me demande d’installer la dernière version en 13.12.x, qui est gitlab-ee_13.12.8-ee.0_amd64.deb.

$ sudo apt install gitlab-ee=13.12.9-ee.0
...
Upgrade complete! If your GitLab server is misbehaving try running
  sudo gitlab-ctl restart
before anything else.
If you need to roll back to the previous version you can use the database
backup made during the upgrade (scroll up for the filename).

Puis,

$ sudo apt install gitlab-ee=14.0.9-ee.0
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  gitlab-ee
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/1,001 MB of archives.
After this operation, 53.0 MB of additional disk space will be used.
(Reading database ... 116886 files and directories currently installed.)
Preparing to unpack .../gitlab-ee_14.0.9-ee.0_amd64.deb ...
* unicorn['worker_timeout'] has been deprecated since 13.10 and was removed in 14.0. Starting with GitLab 14.0, Unicorn is no longer supported and users must switch to Puma, following https://docs.gitlab.com/ee/administration/operations/puma.html.
* unicorn['worker_processes'] has been deprecated since 13.10 and was removed in 14.0. Starting with GitLab 14.0, Unicorn is no longer supported and users must switch to Puma, following
 https://docs.gitlab.com/ee/administration/operations/puma.html.
Deprecations found. Please correct them and try again.
dpkg: error processing archive /var/cache/apt/archives/gitlab-ee_14.0.9-ee.0_amd64.deb (--unpack):
 new gitlab-ee package pre-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 /var/cache/apt/archives/gitlab-ee_14.0.9-ee.0_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

La màj vers la version 14.0.9 n’est pas possible, puisque l’utilisation de l’ancien serveur Web de gitlab (unicorn) est obsolète.

Pour désactiver l’ancien mode de serveur,

$ sudo cat /etc/gitlab/gitlab.rb | grep -e ^unicorn
unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 4

$ sudo sed -i "s/^unicorn/# unicorn/g" gitlab.rb

$ sudo gitlab-ctl reconfigure

$ sudo apt install gitlab-ee=14.0.9-ee.0

Et voilà, la dernière version de gitlab en 14.0.x est installée. Essayons de mettre à jour le système une nouvelle fois.

$ sudo apt upgrade 
...
Warnings:
The version of the running redis service is different than what is installed.
Please restart redis to start the new version.

sudo gitlab-ctl restart redis

The version of the running postgresql service is different than what is installed.
Please restart postgresql to start the new version.

sudo gitlab-ctl restart postgresql

Running handlers complete
Chef Infra Client failed. 19 resources updated in 01 minutes 46 seconds

Ben, faisons ce qu’on nous demande de faire

$ sudo gitlab-ctl restart redis
ok: run: redis: (pid 865) 1s

$ sudo gitlab-ctl restart postgresql
ok: run: postgresql: (pid 877) 0s

Puis,

$ sudo gitlab-ctl reconfigure
..
Running handlers:
There was an error running gitlab-ctl reconfigure:

rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20210902-890-17x6l1n" ----
STDOUT: rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':	{:job_class_name=>"CopyColumnUsingBackgroundMigrationJob", :table_name=>"ci_stages", :column_name=>"id", :job_arguments=>[["id"], ["id_convert_to_bigint"]]}

Finalize it manualy by running

	sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_stages,id,'[["id"]\, ["id_convert_to_bigint"]]']

For more information, check the documentation

	https://docs.gitlab.com/ee/user/admin_area/monitoring/background_migrations.html#database-migrations-failing-because-of-batched-background-migration-not-finished
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:1129:in `ensure_batched_background_migration_is_finished'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20210707210916_finalize_ci_stages_bigint_conversion.rb:13:in `up'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in `block (3 levels) in '
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `

Encore une fois, faisons ce qu’on nous demande de faire.

$ sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_stages,id,'[["id"]\, ["id_convert_to_bigint"]]']
Done.

En lançant de nouveau la commande « gitlab-ctl reconfigure », on me demande de lancer la commande,

$ sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,push_event_payloads,event_id,'[["event_id"]\, ["event_id_convert_to_bigint"]]']
Done.

$ sudo gitlab-ctl reconfigure
...
Running handlers:
Running handlers complete
Chef Infra Client finished, 9/585 resources updated in 01 minutes 20 seconds
gitlab Reconfigured

Et voilà, gitlab est maintenant à jour.

$ grep gitlab /opt/gitlab/version-manifest.txt
gitlab-ee 14.2.3
gitlab-config-template         14.2.3                                     
gitlab-cookbooks               14.2.3                                     
gitlab-ctl                     14.2.3                                     
gitlab-ctl-ee                  14.2.3                                     
gitlab-elasticsearch-indexer   v2.13.0                                    git:31d8f69fc3155cfb266d2d8828722bf25dc8f22e                              
gitlab-exporter                11.2.0                                     
gitlab-geo-psql                bc339ea21bdbb329263ad93788aaa428           
gitlab-healthcheck             90e6447aeead4a29ac9fffc15945ce6b           
gitlab-kas                     v14.2.2                                    git:2b22fa677a333d86c52cbc01d059b0f5a7d1f311                              
gitlab-pages                   v1.42.0                                    git:118a1252ada382e00e53d7ee7e57f059f0e31aba                              
gitlab-pg-ctl                  bcf1e38894e7acf21c429648b0176666           
gitlab-psql                    7e11364159031db0eb55867ad3d5713b           
gitlab-rails                   v14.2.3-ee                                 git:b5eea856ecaa112a6ca45a0a39adc7e370a0fc90                              
gitlab-redis-cli               8866b9c12e308342bc148a794f5cc166           
gitlab-scripts                 14.2.3                                     
gitlab-selinux                 14.2.3                                     
gitlab-shell                   v13.19.1                                   git:757aa7c0e0b8733c75c744f188b0136c1fe1830f                              
registry                       v3.7.0-gitlab                              git:af5f507f08f18178694282570330b9a4a75c8151

Sources

Upgrading from 13.12 to 14.0

[k8s] Introduction aux Labels et NameSpaces

<<< Chap 16 | Sommaire | >>>

Chap 18. Introduction aux Labels et NameSpaces

I. Labels et Sélecteurs

1.1 Exemple d’utilisation des labels (étiquettes)

Nous l’avons vu dans le chap 17, l’importance de l’utilisation des labels.

  • Sans label, il nous a fallu créer un script pour supprimer tous les volumes persistants.
$ for n in {01..10};do kubectl delete pv nfs-sts-pv${n};done
  • Avec un label prédéfini, tous les PVs portant l’étiquette vol=sts-pv, peuvent être détruits en une seule commande
$ kubectl get pv --show-labels
NAME           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                           STORAGECLASS   REASON   AGE   LABELS
nfs-pv-01      100Mi      RWX            Recycle          Bound       default/nfs-pvc-02              slow                    16d   
nfs-sts-pv01   1Gi        RWO            Recycle          Available                                                           9d    vol=sts-pv
nfs-sts-pv02   1Gi        RWO            Recycle          Available                                                           9d    vol=sts-pv
nfs-sts-pv03   1Gi        RWO            Recycle          Available                                                           9d    vol=sts-pv
nfs-sts-pv04   1Gi        RWO            Recycle          Available                                                           9d    vol=sts-pv
nfs-sts-pv05   1Gi        RWO            Recycle          Available                                                           9d    vol=sts-pv
nfs-sts-pv06   1Gi        RWO            Recycle          Bound       default/nfs-pvc-sts-busybox-0   sts-disk                9d    vol=sts-pv
nfs-sts-pv07   1Gi        RWO            Recycle          Available                                   sts-disk                9d    vol=sts-pv
nfs-sts-pv08   1Gi        RWO            Recycle          Bound       default/nfs-pvc-sts-busybox-2   sts-disk                9d    vol=sts-pv
nfs-sts-pv09   1Gi        RWO            Recycle          Bound       default/nfs-pvc-sts-busybox-1   sts-disk                9d    vol=sts-pv
nfs-sts-pv10   1Gi        RWO            Recycle          Available                                   sts-disk                9d    vol=sts-pv

$ kubectl delete pv -l vol=sts-pv

Aussi, les labels nous ont permis de ne sélectionner que certains nodes, y compris le Master, pour déployer les pods créés par Daemonsets.  (voir chap 15)

  • Etape 1:
    • Appliquer un label dsnode avec comme valeur true, aux nodes Master k8sn01et Worker k8sn03,
$ kubectl label node k8sn01 dsnode=true

$ kubectl label node k8sn03 dsnode=true
  • Etape 2:
    • Ajouter ensuite l’option de sélection de Nodes nodeSelector via les labels dans le fichier daemon.yaml,
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginxds
  name: nginx-daemonset
spec:
  selector:
    matchLabels:
      app: nginxds
  template:
    metadata:
      labels:
        app: nginxds
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      nodeSelector:
        dsnode: "true"
      containers:
      - image: nginx
        name: nginx-daemonset

Pour rappel, l’option de tolerations est ce qui nous a permis de déployer un Pod daemonset directement dans le node Master. Autre que pour cette utilisation bien précise, je ne vous conseille pas de le faire.

1.2 Syntaxe des labels

Une étiquette est un morceau de matière (tissu, papier, etc.) sur lequel des informations concernant l’objet auquel il est attaché sont écrites, telles que la marque, le prix, un code barre, des indications de lavage. (Wikipedia)

Avec kubernetes, une étiquette ou label (en anglais), est ce qui nous permet d’identifier un ou plusieurs objects (Pod, Volume Persistant, etc.) ayant les mêmes propriétes, pour ensuite les placer dans le même groupe.

Les labels, tout comme avec configmap et secret (chap 12), utilisent un système de « clé-valeur ».

  • Clé d’étiquette (key)
    • Préfixe d’étiquette (facultatif)
      • Les préfixes d’étiquette ne peuvent pas dépasser 253 caractères
      • Le préfixe d’étiquette doit être un sous-domaine DNS
      • Le préfixe d’étiquette peut également être une série de sous-domaines DNS, séparés par « . »
      • Les préfixes d’étiquette doivent se terminer par « / »
        Exemple: app.kubernetes.io/
    • Nom de l’étiquette
      • Le nom de l’étiquette est requis
      • Les noms d’étiquettes peuvent comporter jusqu’à 63 caractères
      • Les caractères doivent être des caractères alphanumériques
      • Les noms d’étiquettes peuvent également inclure  » –  » ,  » _  » et  » . »
      • Les noms d’étiquettes doivent commencer et se terminer par un caractère alphanumérique
        Exemple: version
  • Valeur de l’étiquette (label)
    • Les valeurs d’étiquette peuvent comporter jusqu’à 63 caractères
    • Les caractères doivent être des caractères alphanumériques
    • Les valeurs d’étiquette peuvent également inclure  » –  » ,  » _  » et  » . »
    • Les valeurs des étiquettes doivent commencer et se terminer par un caractère alphanumérique
      Exemple: "5.7.21"

Chaque clé doit être unique, et devraît apparaitre dans YAML avec les informations suivantes,

metadata: 
  labels: 
    clé-1 : valeur-1
    clé-2 : valeur-2

1.3 Exemple d’utilisation des labels

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxzy
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/created-by: controller-manager
  • Sans préfixes, je vais reprendre l’exemple du chap 15
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: deploy-busybox

Autres exemples couramment utilisés de labels sans préfixes,

  • "release"
    • release : "stable"
    • release : "canary"
  • "environment"
    • environment : "dev"
    • environment : "qa"
    • environment : "production"
  • "tier"
    • tier : "frontend"
    • tier : "backend"
    • tier : "cache"
  • "partition"
    • partition : "customerA"
    • partition : "customerB"
  • "track"
    • track : "daily"
    • track : "weekly"

1.4 Manipulation des labels

Les deux commandes à connaître pour manipuler les labels sont,

  • kubectl get TYPE [NAME | -l label]
$ kubectl get --help | awk '/Usage/{getline; print}'
kubectl get
[(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...]
(TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]
  • kubectl label
$ kubectl label --help | awk '/Usage/{getline; print}'
kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [options]

Si je  reprends l’exemple d’un déploiement de type ReplicaSet de la page de kubernetes.

$ wget https://kubernetes.io/examples/controllers/frontend.yaml

$ kubectl create -f frontend.yaml

$ kubectl get pod -o wide --show-labels
NAME             READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES   LABELS
frontend-b2c29   1/1     Running   0          16s   172.16.1.22    k8sn02                          tier=frontend
frontend-jd4tt   1/1     Running   0          16s   172.16.2.150   k8sn03                          tier=frontend
frontend-w4tw2   1/1     Running   0          16s   172.16.1.21    k8sn02                          tier=frontend
  • Y ajouter des labels supplémentaires aux Pods créés,
$ kubectl label pods --selector=tier=frontend release=canary

$ kubectl get pod --show-labels
NAME             READY   STATUS    RESTARTS   AGE    LABELS
frontend-b2c29   1/1     Running   0          6m1s   release=canary,tier=frontend
frontend-jd4tt   1/1     Running   0          6m1s   release=canary,tier=frontend
frontend-w4tw2   1/1     Running   0          6m1s   release=canary,tier=frontend
  • Sinon, pour ajouter un label spécific par un pod,
$ kubectl label pods frontend-b2c29 environment=dev

$ kubectl label pods frontend-jd4tt environment=prod

$ kubectl label pods frontend-w4tw2 environment=prod

Je n’ai pas trouvé la méthode pour appliquer un label à plusieurs Pods à la fois. Si vous avez cette information, n’hésitez pas à la partager.

$ kubectl get pod --show-labels
NAME             READY   STATUS    RESTARTS   AGE    LABELS
frontend-b2c29   1/1     Running   0          9m8s   environment=dev,release=canary,tier=frontend
frontend-jd4tt   1/1     Running   0          9m8s   environment=prod,release=canary,tier=frontend
frontend-w4tw2   1/1     Running   0          9m8s   environment=prod,release=canary,tier=frontend

Par contre, rien à été modifié pour le réplicaset.

$ kubectl get rs --show-labels
NAME       DESIRED   CURRENT   READY   AGE   LABELS
frontend   3         3         3       12m   app=guestbook,tier=frontend

Pour supprimer un label, ajouter un signe négatif à la fin du nom du label à enlever.

$ kubectl label pods --selector=tier=frontend "release-"

$ kubectl get pod --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
frontend-b2c29   1/1     Running   0          42m   environment=dev,tier=frontend
frontend-jd4tt   1/1     Running   0          42m   environment=prod,tier=frontend
frontend-w4tw2   1/1     Running   0          42m   environment=prod,tier=frontend

Créer ensuite un service, qui utilisera les labels proposés dans le fichier frontend.yaml,

$ kubectl expose rs frontend --port 80

$ kubectl get svc --show-labels
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE    LABELS
frontend     ClusterIP   10.97.33.196           80/TCP    13s    app=guestbook,tier=frontend
kubernetes   ClusterIP   10.96.0.1              443/TCP   162d   component=apiserver,provider=kubernetes

Supression des composants du lab en utilisant le label tier=frontend, qui est commun a tous ces composants.

$ kubectl delete services,rs,deployments -l tier=frontend

J’utiliserai une méthode plus simplifié de cette commande à la fin du chapitre.

Il n’est pas nécessaire à ce niveau de supprimer l’ensemble du lab puisque vous en aurez besoin pour la suite. Sinon, vous pouvez toujours refaire le lab depuis le début.

1.5 Sélecteurs

Un sélecteur est utilisé pour sélectionner des resources kubernetes, basées sur la valeur de leurs labels.

$ kubectl get pod --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
frontend-8g474   1/1     Running   0          14m   environment=dev,tier=frontend
frontend-bzfj2   1/1     Running   0          14m   environment=prod,tier=frontend
frontend-fzfnd   1/1     Running   0          14m   environment=prod,tier=frontend

La méthode de sélection peut être basée sur

  • Comparaison entre valeurs et clés

Opération « = » (égalité):

$ kubectl get pod -l "environment=dev"
NAME             READY   STATUS    RESTARTS   AGE
frontend-8g474   1/1     Running   0          56m

Opération « != » (inégalité):

$ kubectl get pod -l "environment!=dev"
NAME             READY   STATUS    RESTARTS   AGE
frontend-bzfj2   1/1     Running   0          56m
frontend-fzfnd   1/1     Running   0          56m

Pour information, nous avons déjà eu recours à cette méthode pour retrouver tous les pods ayant pour label "tier=frontend" et d’effectuer quelques modification comme,

=> Ajout (release=canary) d’un label:

$ kubectl label pods -l "tier=frontend" release=canary

=> Suppression ("release-") d’un label:

$ kubectl label pods -l "tier=frontend" "release-"

 

Ajoutons un nouveau pod, auquel on associera le label environment=qa,

$ kubectl run nginx --image=nginx -l environment=qa

$ kubectl get pod --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
frontend-8g474   1/1     Running   0          90m   environment=dev,tier=frontend
frontend-bzfj2   1/1     Running   0          90m   environment=prod,tier=frontend
frontend-fzfnd   1/1     Running   0          90m   environment=prod,tier=frontend
nginx            1/1     Running   0          8s    environment=qa
  • Filtrage des clés en fonction d’un ensemble de valeurs
$ kubectl get pod -l "environment in (dev,prod)" --show-labels
NAME             READY   STATUS    RESTARTS   AGE   LABELS
frontend-8g474   1/1     Running   0          67m   environment=dev,tier=frontend
frontend-bzfj2   1/1     Running   0          67m   environment=prod,tier=frontend
frontend-fzfnd   1/1     Running   0          67m   environment=prod,tier=frontend

$ kubectl get pod -l "environment notin (dev,prod)" --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          19m   environment=qa

La première expression permet de lister tous les pods dont la valeur du label est égale à dev ou prod.

Par contre, la deuxième expression ne liste que les pods dont la valeur du label est différent de dev et de prod.

II. NameSpace

2.1 Introduction au NameSpace (espace de nom)

Je vous ai fait une petite introduction sur les NameSpace dans le chap 3, sans vraiment rentrer dans les détails.

Voici ce qui est dit sur la page officielle de kubernetes en ce qui concerne les namespaces.

Kubernetes prend en charge plusieurs clusters virtuels présents sur le même cluster physique. Ces clusters virtuels sont appelés namespaces (espaces de nommage en français).
(…)
Les namespaces sont des groupes de noms. Ils fournissent un modèle d’isolation de nommage des ressources.
(…)
Il n’est pas nécessaire d’utiliser plusieurs namespaces juste pour séparer des ressources légèrement différentes, telles que les versions du même logiciel: utiliser les labels pour distinguer les ressources dans le même namespace.

Cas d’utilisation des namespaces, cette liste n’est pas exhaustive et risque d’être modifiée (voir le blog de kubernetes)

  • Séparer les différents espaces (Production, Développement, etc.)
  • Gérer les contrôles d’accès via RBAC, afin de n’authoriser que les utilisateurs avec les certaines permissions[1] pour accéder aux resources du cluster (rôle d’administrateur, etc.)
  • Assigner son propre cluster à chacun des client pour une demande bien précise. Par exemple,
    • Quota sur les resources par cluster (CPU, RAM, etc.)
    • Isolation[1] d’un projet
    • etc.

Kubernetes démarre initiallement avec quatre namespaces (voir les infos de la documentation officielle):

$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   163d
kube-node-lease   Active   163d
kube-public       Active   163d
kube-system       Active   163d
  • default
    Le namespace par défaut
  • kube-system
    Le namespace pour les objets créés par Kubernetes lui-même
  • kube-public
    Ce namespace est créé automatiquement et est visible par tous les utilisateurs (y compris ceux qui ne sont pas authentifiés)
  • kube-node-lease
    Ce namespace contient les objets de bail associés à chaque nœud, ce qui améliore les performances des pulsations du nœud à mesure que le cluster évolue

2.2 Création d’un nouveau namespace

Avant de penser à créer votre namespace, je tiens à ajouter l’information suivante, toujours tirée de la page officielle de kubernetes:

Note: Évitez de créer des namespaces avec le préfixe kube-, car il est réservé aux namespaces système de Kubernetes.

Les namespaces peuvent être créés:

  • En ligne de commande,
    • Pour créer un namespace alpha-namespace avec pour label name=alpha,
$ kubectl create namespace alpha-namespace
$ kubectl label namespace alpha-namespace name=alpha
  • Avec un fichier YAML,
    • Récupérer le fichier de configuration du namespace créé par défaut
$ kubectl get ns default -o yaml > beta-namespace.yaml
    • Editer le contenu du fichier namespace-dev.yaml
    • Enfin, supprimer les informations inutiles, et n’oubliez pas d’ajouter un label pour ce namespace
$ vim beta-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
  name: beta-namespace
  labels:
    name: beta

$ kubectl apply -f beta-namespace.yaml

Vérifier ensuite que les nouveaux namespaces ont bien été créé sans problème.

$ kubectl get ns --show-labels
NAME              STATUS   AGE    LABELS
alpha-namespace   Active   16m    name=alpha
beta-namespace    Active   10s    name=beta
default           Active   175d   <none>
kube-node-lease   Active   175d   <none>
kube-public       Active   175d   <none>
kube-system       Active   175d   <none>

2.3 Création de pods dans un namespace dédié

Par défaut, tous les nouveaux pods seront créés dans le namespace default.

Dans cette partie, je vais explicitement choisir mon namespace à utiliser pour déployer mes Pods.

  • Création d’un pods dans alpha-namespace
$ kubectl run nginx --image=nginx -l environment=qa -n alpha-namespace

$ kubectl get pod -A -l environment --show-labels
NAMESPACE         NAME             READY   STATUS    RESTARTS   AGE     LABELS
alpha-namespace   nginx            1/1     Running   0          5m50s   environment=qa
default           frontend-8g474   1/1     Running   0          167m    environment=dev,tier=frontend
default           frontend-bzfj2   1/1     Running   0          167m    environment=prod,tier=frontend
default           frontend-fzfnd   1/1     Running   0          167m    environment=prod,tier=frontend
default           nginx            1/1     Running   0          77m     environment=qa

L’option -A (–all-namespaces) nous permet d’afficher les pods de tous les namespaces, et qui ont pour label "environment=VALEUR".

  • Application d’un fichier YAML pour la création de Pods dans beta-namespace

Je vais réutiliser le fichier frontend.yaml,

$ kubectl create -f frontend.yaml -n beta-namespace

Sinon, ajouter le nom du namespace dans le fichier yaml initial, dans la partie metatada.

metadata:
  name: frontend
  namespace: app

Puis lancer la commande

$ kubectl create -f frontend.yaml

Liste des pods dans beta-namespace,

$ kubectl get pod -n beta-namespace --show-labels
NAME             READY   STATUS    RESTARTS   AGE    LABELS
frontend-7nwkw   1/1     Running   0          105s   tier=frontend
frontend-mzkqj   1/1     Running   0          105s   tier=frontend
frontend-snkwb   1/1     Running   0          105s   tier=frontend

2.4 Basculer entre les differents namespaces

Le basculement d’un namespace à un autre nous facilite l’utilisation de la commande kubectl, puisqu’il n’est plus nécessaire de préciser le nom du namespace dans lequel nous souhaitons travailler.

Ainsi, une fois dans le namespace choisi, vous pouvez omettre l’option --namespace=NAMESPACE à la fin de chaque commande.

La commande à utiliser quand le namespace est déjà créé, est la suivante:kubectl config set-context --current --namespace=NAMESPACE.

Ici, l’option --current fait référence au context courant, que vous pouvez afficher par,

$ kubectl config current-context
kubernetes-admin@kubernetes

Un context kubernetes est décrit comme un ensemble de paramètres d’accès utilisé par un compte utilisateur pour accéder à un cluster ou à un namespace. Je ne vais pas rentrer dans les détails, puisque nous n’allons pas modifier cette option. Si vous souhaitez le faire, jettez un coup d’oeil à la page de kubernetes.

$ kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin 

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.0.200:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED 

Passer maintenant d’un namespace à un autre, en activant ce dernier comme le namespace par défaut.

$ kubectl config set-context --current --namespace=beta-namespace
Context "kubernetes-admin@kubernetes" modified.

$ kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
frontend-7nwkw   1/1     Running   0          144m
frontend-mzkqj   1/1     Running   0          144m
frontend-snkwb   1/1     Running   0          144m

$ kubectl config set-context --current --namespace=alpha-namespace
Context "kubernetes-admin@kubernetes" modified.

$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          173m

Pour revenir au namespace initial, les deux options ci-dessous aboutissent au même résultat.

  • Remplacez le nom du NAMESPACE par « default »
  • Ne mettez rien après --namespace=
$ kubectl config set-context --current --namespace=
Context "kubernetes-admin@kubernetes" modified.

$ kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
frontend-8g474   1/1     Running   0          5h35m
frontend-bzfj2   1/1     Running   0          5h35m
frontend-fzfnd   1/1     Running   0          5h35m
nginx            1/1     Running   0          4h5m

2.5 Terminaison de pods

Appliqué à plusieurs namespaces, la terminaison de Pods et des différentes resources peut se faire, soit:

  • En basculant de le namespace concerné, et y faire le ménage
  • En ajoutant le nom du namspace à la fin de chaque commande kubectl
  • En supprimant le namespace

C’est cette dernière option que je vais choisir pour supprimer toutes les resources en dehors du namespace default, y compris les namespaces nouvellement créés.

$ kubectl delete ns alpha-namespace

$ kubectl delete ns beta-namespace

Pour supprimer tous les Pods du namespace default, qui est le dernier namespace actif du lab,

$ kubectl delete pod --all -n default
pod "frontend-8g474" deleted
pod "frontend-bzfj2" deleted
pod "frontend-fzfnd" deleted
pod "nginx" deleted

Sinon, vous pouvez utiliser les labels pour supprimer toutes les resources déployées dans ce lab.

$ kubectl apply -f frontend.yaml

$ kubectl get all -l tier=frontend
NAME                 READY   STATUS    RESTARTS   AGE
pod/frontend-fc7p9   1/1     Running   0          35s
pod/frontend-gh9wr   1/1     Running   0          35s
pod/frontend-jnkqt   1/1     Running   0          35s

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/frontend   ClusterIP   10.96.168.101           80/TCP    6h54m

NAME                       DESIRED   CURRENT   READY   AGE
replicaset.apps/frontend   3         3         3       35s

$ kubectl delete all -l tier=frontend
pod "frontend-fc7p9" deleted
pod "frontend-gh9wr" deleted
pod "frontend-jnkqt" deleted
service "frontend" deleted
replicaset.apps "frontend" deleted

2.6 Network Namespace (netns)

Cette partie a déjà été traité dans le chap 9, dont je vais reprendre ici un extrait.

Chaque espace de nom, peut fournir à chacun des Pods toutes les resources liées au réseau.
Entre autre, chaque pod peut avoir,

  • Une adresse IP privée
  • Sa propre table de routage, avec ses règles de parefeux, etc.

Ce chapitre est maintenant terminé. J’espère vous avoir convaincu de l’utilité des labels!

Sources

9 Best Practices and Examples for Working with Kubernetes Labels
Labels and Selectors
Recommended Labels
Share a Cluster with Namespaces
Kubernetes Namespace
How to switch namespace in kubernetes