Suite à l’article d’Antoine sur notre blog Kubernetes pour les nuls, vous vous êtes peut-être décidé(e) à “mettre les mains dans le cambouis”. Mais après utilisation, on se rend compte que Kubernetes dispose d’un environnement complexe avec de nombreux concepts et commandes à retenir. Nous ne sommes que des humains, et nous ne pouvons pas tout retenir. Dans cet article, je souhaite vous partager les pratiques et outils qui m'aident au quotidien avec Kubernetes.
En écrivant les manifests Kubernetes ,vous savez ces longs fichiers YAML composés de clé-valeur, je me pose souvent la question de la syntaxe à appliquer, quelle apiVersion dois-je utiliser ?
Cela peut paraître évident mais la première source de données pour obtenir rapidement ces informations est la documentation du produit. Celle de Kubernetes est en l’occurrence très bien fournie. Elle a même l’avantage d’être traduite dans plusieurs langues et de disposer des versions antérieures pour coller à la version de votre cluster.
En cas de doute, sur un concept, une syntaxe, ayez le réflexe de consulter la documentation. En plus des exemples de code, les pages sont accompagnées de schémas et textes explicatifs pour chaque concept.
En bonus, si vous souhaitez passer une des certifications Kubernetes, sachez que vous aurez le droit à cette documentation, donc apprenez à l’utiliser !
Autre cas d’usage, lorsque vous écrivez puis déployez des ressources sur vos clusters Kubernetes, vous devez mentionner quelle API utiliser pour que les contrôleurs correspondants déploient votre ressource sur le cluster Kubernetes. Or sur Kubernetes, les API ne sont pas fixes, et peuvent évoluer dans le temps. De même, vous pouvez tenter de déployer une ressource dont vous avez entendu parler, sans même que celle-ci soit disponible sur la version que vous utilisez.
Encore une fois, reportez-vous à la documentation :
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#-strong-api-groups-strong-
Cette page vous permettra de connaître les API et les versions associées disponibles sur une version de Kubernetes. A noter qu’on peut utiliser la commande kubectl api-resources pour lister les ressources disponibles depuis votre terminal.
Après avoir installé la commande kubectl, vous pouvez définir des alias sur votre terminal afin de gagner du temps. Le plus connu est sans doute “k” pour kubectl. Mais je vous conseille de ne pas vous arrêter à celui-ci.
À l’usage on peut utiliser la même commande plusieurs fois par jour pour vérifier l’état de nos pods ou encore de nos nœuds. L’idée est donc de définir un alias parlant pour ce type d’action.
Exemple :
A noter qu’en utilisant le plugin kubectl de zsh, vous bénéficierez d’un nombre conséquent d’alias configurés sur votre terminal. Pour l’installer, ajouter la section suivante dans votre fichier .zshrc
plugins=(... kubectl)
Afin de gagner du temps dans vos lignes de commandes et de ne pas toutes les apprendre, vous pouvez installer l’autocompletion si votre système le supporte. Cela vous permet de faire des actions sur vos objets rapidement sans pour autant connaître toutes les options disponibles.
Pour avoir des informations ou de l’aide sur l'autocompletion utiliser la commande :
kubectl completion -h
Exemple d’installation sur ZSH en ajoutant l’instruction dans votre fichier .zshrc :
source < (kubectl completion zsh)
Krew est le manager de plugin de kubectl, il vous permet de rechercher, installer des plugins kubectl. Krew recense un peu plus de 200 plugins actuellement, en cherchant bien, vous trouverez votre bonheur.
Si vous êtes amené(e) à travailler sur plusieurs namespaces, vous devrez alors changer votre configuration sur votre poste afin que la CLI kubectl envoie les instructions sur le bon namespace. Pour changer de namespace courant on peut utiliser la commande ci-dessous :
kubectl config set-context --current --namespace=sandbox-ns
Cette commande, souvent utilisée, peut être fastidieuse à retenir. Le plugin ns va permettre de simplifier le changement de namespace sans pour autant retenir cette ligne de commande. Vous utiliserez kubectl ns pour lister les namespace disponibles et kubectl ns sandbox pour changer le namespace courant.
Vous serez sûrement amené(e) à travailler sur plusieurs contextes (par exemple : dev / prod).
La configuration d’un contexte se fait dans le fichier ~/.kube/config. Mais comment ajouter d’autres contextes ? Plusieurs possibilités s’offrent à vous :
KUBECONFIG="config-demo:config-demo-2"
Une fois les contextes déclarés vous pouvez changer de contexte courant avec la commande :
kubectl config set-context config-demo2
Encore une fois, si vous ne souhaitez pas retenir cette commande, vous pouvez installer le plugin ctx. Il permet de lister les contextes disponibles et de choisir un contexte courant.
À noter qu’il est possible d’installer les CLI kubens / kubectx qui auront le même usage sans utiliser les plugins Kubernetes.
Vous en avez peut-être assez d’utiliser la commande kubectl pour communiquer avec votre cluster Kubernetes ? Sachez qu’il existe des alternatives. Vous avez peut-être la possibilité d’utiliser une interface graphique fournie par Rancher ou encore Openshift si votre cluster est managé par l’un de ces outils ? Voir des clients lourds comme Lens et Octant pour des outils IDE opensource de Mirantis ou de Vmware. Et si vous souhaitez rester dans votre terminal avec une touche graphique ? C’est possible avec l’outil K9s !
Cette CLI vous offre une interface dans votre terminal. Elle permet de réaliser les opérations courantes sur votre cluster.
L’interface se découpe en deux parties :
La première présente les caractéristiques de votre contexte d’utilisation, et les raccourcis clavier disponibles. À noter que les raccourcis clavier peuvent varier selon la page affichée.
Par exemple, les opérations proposées ne seront pas les mêmes sur la vue node & la vue pod.
La seconde partie est un tableau d' objets Kubernetes. Cette vue s’actualise selon contexte courant (Cluster et Namespace) et l’objet souhaité.
Pour lister rapidement tous les objets d’un même type, il faut taper “:” puis le nom de l’objet. Le tableau se met à jour en conséquence et présente les actions disponibles.
Un cas d’usage fréquent pour ma part est de lancer un shell sur un pod. Sans K9s nous pourrions toujours effectuer la commande kubectl exec -ti pod-name bash, mais faut-il encore connaître le nom du pod.
Avec K9s, vous aurez la liste des pods déployés dans votre contexte courant, sélectionnez votre pod puis appuyez sur la touche “s” pour lancer le shell.
Avec quelques raccourcis clavier vous arriverez à éditer ou consulter le manifest yaml associé au pod, ou bien lire les logs du pod.
Tout comme les plugins ctx & ns vous pouvez changer de contexte rapidement avec k9s avec les raccourcis :ctx et :ns.
Vous l’aurez compris, K9s est une alternative à la commande kubectl pour communiquer avec vos clusters Kubernetes. Vous optimisez la gestion de votre cluster à l’aide de quelques raccourcis clavier.
Que ce soit VSCode, ou bien la suite JetBrains, vous aurez la possibilité d’ajouter une extension favorisant l’intégration avec votre cluster Kubernetes ou le développement sur Kubernetes.
Vous pourrez ainsi bénéficier d’une autocomplétion et d’une coloration syntaxique dans le développement de vos manifests
Exemple :
Via votre IDE, vous pouvez consulter les clusters, namespaces, workloads et autres objets Kubernetes. Mais vous pourrez également interagir avec eux. Concrètement, vous pourrez changer de namespace courant avec un simple clic droit → use namespace . Ou bien suivre les logs d’un pods, mais encore lancer un shell sur l’un des pods ! Comme K9s l’idée est d’abstraire la commande kubectl.
Il s’agit d’une courte liste des astuces que j’ai pu identifier de mon expérience avec Kubernetes.Il existe encore beaucoup de plugins qui pourraient optimiser notre utilisation de Kubernetes, par exemple :
Et si vous n’avez pas encore trouvé votre bonheur, vous avez toujours la possibilité de créer votre propre plugin !
Si vous souhaitez en apprendre plus sur les outils & méthodes de développement pour Kubernetes, WeScale peut vous accompagner avec la formation Cloud Native Développeur Kubernetes !