Delta Lake avec Apache Spark
Il existe différent format de fichier pour stocker la donnée : parquet, avro, csv. Connaissez-vous le format Delta Lake ? Découvrons les fonctionnalités de ce format.
Sommaire
Dans ce billet de blog je vous propose de découvrir k9s, un outil graphique en ligne de commande pour Kubernetes qui peut faciliter la gestion des ressources d'un cluster, donner pas mal de visibilité sur son état général, et accélérer vos opérations courantes.
En quelques mots, k9s propose différentes vues et raccourcis adaptés à chaque type de ressources. Ce mécanisme permet de facilement accéder aux logs d'un pod, d'attacher un shell à un conteneur, d'activer un port-fowarding, d'agrandir un replicaset, etc.
Croyez moi, c'est super pratique, mais la bête n'est pas si simple à dompter et c'est justement pour aider à sa prise en main que j'ai eu envie d'écrire ce billet aujourd'hui.
k9s est un projet écrit en Go et publié en tant que binaire exécutable. Pour l'installer, récupérez une version depuis le Github du projet et placez la dans le dossier de votre choix (/usr/bin/
par exemple). Assurez-vous que ce dossier est bien référencé dans votre PATH
.
Pour interagir avec un cluster, k9s lit les informations du fichier ~/.kube/config
. Si vous n'avez pas de cluster sous la main, je vous invite à en installer un localement avec des outils tels que kind ou minikube et à y créer quelques ressources. Sinon, il vous suffit de lancer k9s
depuis votre terminal et ce dernier utilisera automatiquement votre contexte Kubernetes courant. Vous pouvez également spécifier le contexte et le namespace via les commandes respectives suivantes k9s --context <context>
et k9s -n <namespace>
(nous verrons comment changer de contexte et de namespace dans k9s à la fin de ce billet).
Enfin, vous pouvez lancer k9s en lecture seule avec l'argument --readonly
. La liste complète des arguments est disponible dans l'aide k9s help
.
Voici maintenant un aperçu de l'interface de k9s qui en résume les principales zones d'intérêt :
?
ouvrira l'aide complète à tout moment.D'une manière générale, k9s reprend plusieurs principes de vim
. La touche esc
sert à revenir en arrière ou à annuler / fermer un prompt et on quitte le programme avec :q
(ou ctrl + c
).
Lorsque vous serez parfaitement à l'aise avec k9s, vous pourrez masquer le panneau principal en pressant ctrl + e
afin d'économiser un peu de place, mais pour l'instant je vous invite à le laisser affiché.
La touche :
ouvre un prompt chien (🐶>
) au-dessus du panneau principal. C'est le mode de k9s qui permet d'exécuter des commandes. Il existe une commande par ressource kubernetes plus quelques autres spécifiques que nous verrons plus tard. Par exemple, :pod⏎
bascule dans la vue Pod et ce sont désormais les informations sur les pods qui sont affichées dans le panneau principal.
k9s fait de l'autosuggestion pour le nom des commandes. Quand je tappe pod
, il me propose la commande poddisruptionbudget
.
tab
ou ctrl + f
permettent de compléter automatiquement la suggestion dans le prompt (autocomplétion), sans toutefois exécuter la commandectrl + u
ou ctrl + w
permettent d'effacer la ligne sans quitter le mode commandePratique non ?
La liste complète des commandes est disponible par le raccourci ctrl + a
ou avec :aliases
.
On notera que toutes les commandes disposent d'un alias plus court qui permet d'accélérer la navigation (e.g. :a
au lieu de :aliases
)
Si vous entrez une commande qui n'existe pas k9s vous le fera savoir avec une cowsay qui malheureusement ne partira pas avec la touche esc
. Pour sortir de cette vue, il faut rejouer une commande valide comme :pod⏎
par exemple.
Voilà, vous savez désormais exécuter différentes commandes qui vous permettent de changer de vues. C'est déjà pas mal ! Vous êtes capables de lister les différentes ressources de votre cluster et de voir si elles sont OK ! Allons un peu plus loin maintenant.
La touche /
ouvre un prompt caniche 🐩>
qui permet d'appliquer un filtre sur la liste d'éléments affichés dans le panneau. C'est le mode filtre de k9s.
En reprenant notre exemple, si l'on est dans la vue pod (:pod
) et que l'on tape /kops⏎
on n'affichera que les Pods qui contiennent kops
dans leur nom. Ce prompt supporte Regex2
et on peut utiliser des syntaxes comme /toto|astronaute⏎
(toto
ou astronaute
dans le nom du pod) ou !tata
(tous les noms de pods qui ne contiennent pas tata
).
On peut aussi filtrer les ressources qui portent un label kubernetes avec la syntaxe /-l <nom_du_label>=<valeur_du_label>
. Dans notre exemple /-l k8s-app=cilium
liste tous les pods qui portent le label k8s-app=cilium
(notez bien qu'on filtre uniquement sur l'existence de label ici et pas sur le nom des pods.)
Ce prompt fonctionne dans toutes les vues de k9s et applique le filtre sur tout ce qui est affiché dans le panneau principal. Il n'est pas réservé aux vues des ressources Kubernetes. Voyez un exemple dans la vue aliases
.
Voilà, désormais vous savez comment retrouver toutes vos petites ressources. On va pouvoir découvrir maintenant comment interagir avec elles.
Intéressons-nous de plus près au panneau des raccourcis. Il contient tout ce qu'il vous faut pour vos opérations courantes. Rappelez-vous que son contenu change en fonction de la vue dans laquelle vous êtes, alors pensez à vous y référer régulièrement 💡. Voici par exemple le contenu des raccourcis pour la vue pod :
Vous pouvez à tout moment appuyer sur la touche ?
pour afficher l'aide complète.
Globalement, un raccourci s'applique à la ligne du panneau principal en surbrillance et vous pouvez changer de ligne en utilisant les flèches de votre clavier.
Les touches numériques affichées en magenta dans le panneau des raccourcis permettent de filtrer le contenu du panneau principal sur la base d'un paramètre qui change d'une vue à l'autre. Pour les pods par exemple, ces touches changent le namespace, mais pour les logs elles changent la plage temporelle à afficher. La valeur du paramètre est rappelée en magenta dans le titre du panneau principal
Dans l'exemple ci-dessus, mon écran se vide lorsque je sélectionne le namespace default (<2>
) car je n'ai pas de pod sur ce namespace. Pensez donc à vérifier régulièrement la valeur de ces paramètres.
Vous avez maintenant toutes les billes pour commencer à faire des opérations sur vos ressources. Voici celles que j'utilise le plus fréquemment.
Pour changer de contexte au sein de k9s, il suffit de taper :ctx <context>⏎
. De même, pour changer de namespace vous pouvez utiliser :ns <namespace>⏎
Dans une vue de ressource, la touche ⏎
permet d'afficher des informations sur les éléments associés à cette ressource. Depuis la vue :pod
par exemple, appuyer sur ⏎
affiche des informations sur les conteneurs du pod, et dans la vue :service
on obtient des informations sur les pods associés au service.
Depuis la vue :secrets
appuyer sur x
permet d'afficher toutes les valeurs du secret en clair.
Dans les différentes vue de ressources, on peut trier les éléments par colonnes. Dans la vue :pod
par exemple on peut utiliser les raccourcis suivants :
Shift + p
— tri par namespaceShift + n
— tri par nomShift + r
— tri par nombre de conteneur readyShift + t
— tri par nombre de redémarrageShift + s
— tri par statusShift + c
— tri par consommation CPUShift + m
— tri par consommation RAMShift + i
— tri par adresse IPShift + o
— tri par adresse du noeudShift + a
— tri par ageUne petite flèche bleue se placera à coté de la colonne et indiquera le sens du tri. Appuyer plusieurs fois sur un même raccourci inverse l'ordre du tri.
Les raccourcis de tri changent d'une vue à l'autre et la liste complète est donnée dans l'aide (touche ?
)
Dans la vue :pod
, la touche l
permet d'afficher des logs du pod sélectionné. Lorsque qu'un pod n'écrit pas beaucoup de logs, on est généralement confronté au message Waiting for logs...
.
Cette vue n'affiche en effet que les logs avec un timestamp vieux de maximum 1 minute et quand il n'y en a pas, elle attend alors qu'un log assez jeune arrive. Si vous cherchez des logs plus vieux, vous pouvez changer la plage temporelle avec les touches 0
à 5
. La durée sélectionnée est rappelée dans le titre du panneau principal représenté par la flèche rouge dans l'image ci-dessous.
On peut naviguer dans les logs à l'aide des flèches ⇞ et ⇟, toutefois, l'autoscroll est activé par défaut et forcera l'affichage vers le bas dès qu'un nouveau log arrivera. On peut activer / désactiver cette fonction avec la touche s
. Aussi, on peut afficher / masquer l'affichage des timestamps avec la touche t
N'oubliez pas également que 🐩>
fonctionne ici également.
Dans la vue :pod
, la touche s
permet d'attacher un shell à un conteneur s'exécutant au sein d'un pod. Si le pod contient plusieurs conteneurs, un prompt demandera de sélectionner celui auquel on souhaite attacher un shell.
Une fois le shell attaché, on peut le déconnecter en pressant ctrl + d
.
Dans la vue :statefulset
ou :replicaset
, on peut modifier le nombre de réplica en appuyant sur la touche s
.
Certaines vues permettent de lister les ressources qui sont consommées par d'autres ressources en utilisant la touche u
(used by). Cela fonctionne pour la vue :secrets
ou :configmap
par exemple.
ctrl + d
permet de détruire une ressource. L'option cascade
, activée par défaut, permet de supprimer en plus les ressources qui lui sont associées. Détruire un déploiement en mode cascade détruira également les pods associés à ce déploiement.
Il est aussi possible de faire un kill avec ctrl +k
pour les pods, mais faites attention, cette opération ne demande pas de confirmation ! 💣
Il est parfois intéressant de lire la description d'une ressource pour vérifier sa liste de labels par exemple. Pour cela on peut soit utiliser la touche d
qui retourne la description formatée par k9s, soit la touche y
pour obtenir le fichier YAML brut. Dans ces vues, lorsque l'on utilise le mode filtre et qu'il correspond à plusieurs résultats, on pourra naviguer vers l'occurence suivante avec la touche n
et l'occurence précédente avec shift+n
(pensez bien à valider le filtre avec ⏎
avant d'appuyer sur ces touches).
Il est également possible d'éditer le ficher YAML correspondant à une ressource en appuyant avec e
. Cela ouvrira votre éditeur de texte par défaut et appliquera les modifications une fois le fichier sauvegardé.
On peut "marquer" des ressources pour leur appliquer une action commune (e.g. supprimer 2 pods d'un coup). On marque la ressource en surbrillance en appuyant sur espace
. La ressource change alors de couleur et on appuiera de nouveau sur espace
pour retirer la marque.
On peut également marquer une plage de ressource. Pour cela :
espace
ctrl+espace
.Toutes les ressources de la plage sont maintenant marquées. On peut effacer toutes les marques d'un coup avec ctrl+\
.
Dès que l'on pose une marque, les actions qui peuvent s'appliquer à un groupe de ressources s'appliqueront aux ressources marquées et non pas à la ligne en surbrillance. Dans l'exemple ci-dessous mon action killed (ctrl+k
) s'applique à tous les ressources marquées et pas à la ressources en surbrillance.
Pulses est un dashboard global qui permet de voir l'état de santé de votre cluster. Il affiche le nombre de ressources OK / KO au cours du temps et permet via les touches numériques ou tab de passer rapidement dans la vue la plus pertinente pour surveiller un paramètre. On active sa vue avec :pulses
Xray est un outil qui permet de visualiser sour forme d'arborescence les dépendances entre les ressources. On active cette vue avec :xray <ressource>
. En utilisant pod
par exemple, Xray donne l'arbre de dépendance des pods par namespaces (leurs conteneurs, configmaps, tokens, etc.) C'est très pratique pour retrouver ses petits quand on commence à avoir un cluster assez gros.
Dans cet exemple, mes pods sont répartis sur 5 namespaces différents (🗂), le namespace pplogs
contient 32 pods (🚛), le pod elastic-client-6d7cdcd4fd-nrmtc
contient 5 types de ressources différentes :
Popeye est un outil qui permet de tester la conformité des ressources d'un cluster selon différents critères. Chaque type de ressources se voit attribué un score de conformité et la navigation permet d'accéder aux différentes erreurs et warnings rencontrés.
Je ne détaillerai pas cette partie dans ce billet mais sachez qu'il est possible de définir un fichier de configuration k9s et également de personnaliser différents aspects tel que son skin, ses plugins et des alias supplémentaires. Vous trouverez plus d'informations dans la documentation du projet.
Voila c'est tout pour cette fois ! J'espère vous avoir convaincu de la puissance de k9s et qu'il trouvera une place dans votre boîte à outil galactique. Malgré sa prise en main un peu exigeante, son utilisation ne devrait plus trop avoir de secret pour vous et je reste convaincu que l'investissement en vaut la chandelle. De mon côté, je ne peux plus m'en passer.
N'hésitez pas à me faire part de vos réactions dans les commentaires. 🚀 To infinity and beyond! 🚀
J'ai utilisé les logiciels Sublime Text 3 pour la rédaction de cet article ; Peek, Screenkey et Key-Mon pour réaliser mes gifs. Un grand merci aux développeurs de ces projets.
Auteur(s)
Dimitri Fert
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Il existe différent format de fichier pour stocker la donnée : parquet, avro, csv. Connaissez-vous le format Delta Lake ? Découvrons les fonctionnalités de ce format.
Aujourd’hui on parle de product management pour qualifier tout et n’importe quoi, ce qui entraîne la mise en place d’organisations produits sur des bases bancales. Quelles sont les principales erreurs commises ? Comment les éviter ? La liste n’est pas exhaustive mais vous permettra assurément de mieux appréhender votre méthodologie produit.
Dans le domaine de la data, la qualité de la donnée est primordiale. Pour s'en assurer, plusieurs moyens existent, et nous allons nous attarder dans cet article sur l'un d'entre eux : tester unitairement avec Pytest.