TP Matin - Premiers pas avec kubectl
TP Matin
Installer Kubernetes, explorer le cluster et déployer un premier pod.
Contexte
Votre environnement de lab est un VPS Ubuntu. Vous allez installer k3s, découvrir les commandes de base de kubectl, et déployer votre premier pod Kubernetes.
Focus
✅ kubeconfig : Comprendre et afficher la configuration de connexion au cluster
✅ kubectl : Maîtriser les commandes de base (get, describe, run, delete, logs, exec)
✅ Namespaces : Créer et utiliser un namespace dédié
✅ Premier pod : Déployer, inspecter et supprimer un pod
✅ k9s : Explorer le cluster depuis une interface terminal
Objectif
✅ k3s installé et accessible via kubectl
✅ kubeconfig affiché et compris
✅ Namespace
mynamespacecréé✅ Pod
ubuntudéployé, inspecté, puis supprimé✅ k9s installé et utilisé pour naviguer dans le cluster
Tips : alias kubectl
# File: .bash_aliases
alias k='kubectl'
alias kcon='kubectl config get-contexts'
alias kx='kubectl config use-context'
alias kn='kubectl config set-context --current --namespace'
alias kg='kubectl get'
alias kdesc='kubectl describe'
alias ka='kubectl apply -f'
alias kc='kubectl create'
alias kdel='kubectl delete'
alias kev='kubectl get events --sort-by .lastTimestamp'
alias kl='kubectl logs'
export yaml='--dry-run=client -o yaml'
export now='--grace-period 0 --force'
source .bash_aliases
Étape 1 - Installer k3s
Objectif : Avoir un cluster Kubernetes opérationnel, piloté par kubectl sans sudo.
- Action : Installer k3s via le script officiel, en lui demandant d'écrire un kubeconfig lisible par votre utilisateur :
curl -sfL https://get.k3s.io | sudo sh -s - --write-kubeconfig-mode 644
Observation : le fichier /etc/rancher/k3s/k3s.yaml existe et est lisible (ls -l /etc/rancher/k3s/k3s.yaml → -rw-r--r--)
Action : Indiquer à
kubectloù trouver ce kubeconfig grâce à la variable d'environnementKUBECONFIG, et rendre ce réglage permanent
Observation :kubectl get nodes(sanssudo) retourne un node en étatReady, y compris dans un nouveau terminalAction : Vérifier les versions client et serveur
Observation :kubectl versionaffiche les deux versions — elles devraient être dans la même version mineure (ex:1.28.x)
Indice
💡 Comment
kubectltrouve-t-il son kubeconfig ? Il regarde d'abord la variable d'environnementKUBECONFIG; si elle n'est pas définie, il utilise~/.kube/config. k3s, lui, écrit son kubeconfig dans/etc/rancher/k3s/k3s.yaml. Il suffit donc de pointerKUBECONFIGvers ce fichier.
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> ~/.bashrc
kubectl get nodes
kubectl version
⚠️ Par défaut, k3s rend ce fichier lisible uniquement par
root: sans l'option--write-kubeconfig-mode 644,kubectlrenverrait une erreurpermission denied. Si k3s est déjà installé, corrigez simplement les droits :sudo chmod 644 /etc/rancher/k3s/k3s.yaml.Ce fichier contient les identifiants administrateur du cluster : le rendre lisible par tous est acceptable sur un VPS de lab mono-utilisateur, pas sur une machine partagée.
Étape 2 - Configurer bash completion et alias
Objectif : Travailler efficacement en ligne de commande.
- Action : Installer l'autocomplétion kubectl et les alias du tips ci-dessus
Observation : La touche<Tab>complète les commandes et noms de ressources kubectl
Indice
sudo apt install bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ${HOME}/.bashrc
La liste complète des raccourcis : https://blog.heptio.com/kubectl-resource-short-names-heptioprotip-c8eff9fb7202
Étape 3 - Explorer le cluster
Objectif : Comprendre la structure d'un cluster Kubernetes.
Action : Afficher le kubeconfig
Observation : Le fichier indique le cluster, l'utilisateur et le contexte courant. Repérez l'adresse de l'API server et le certificat.Action : Lister les nodes et leurs caractéristiques
Observation :kubectl describe node/<nom>montre les ressources disponibles, les labels, et les pods qui tournent dessusAction : Lister tous les namespaces, puis toutes les ressources de
kube-system
Observation : Le namespacekube-systemcontient les composants internes de Kubernetes eux-mêmes sous forme de podsAction : Lister toutes les ressources de tous les namespaces
Observation :kubectl get all -Amontre tout le cluster
Indice
echo $KUBECONFIG
kubectl config view
kubectl get nodes
kubectl describe node/<nom-du-node>
kubectl get namespaces
kubectl get all -n kube-system
kubectl get all -A
kubectl describe namespace/kube-system
Étape 4 - Créer un namespace
Objectif : Isoler vos ressources dans un espace dédié.
- Action : Créer le namespace
mynamespace
Observation : Il apparaît danskubectl get namespaces
Indice
kubectl create namespace mynamespace
Étape 5 - Déployer et inspecter un pod dans votre namespace
Objectif : Créer, observer, exécuter des commandes dans et supprimer un pod.
Action : Lancer un pod
ubuntuavec l'imageubuntu:latestdansmynamespace, commandetail -f /dev/null
Observation : Le pod est en étatRunningdanskubectl get pod -n mynamespaceAction : Inspecter le pod avec
getetdescribe
Observation :describemontre les événements, l'image, le node, les conditions du podAction : Afficher le manifeste YAML complet du pod
Observation : Le YAML généré décrit l'état complet tel que Kubernetes le voitAction : Supprimer le pod
Observation : Le pod disparaît de la liste
Indice
kubectl run ubuntu --image=ubuntu:latest --namespace mynamespace -- tail -f /dev/null
kubectl get pod ubuntu -n mynamespace
kubectl describe pod ubuntu -n mynamespace
kubectl get pod ubuntu -n mynamespace -o yaml
# Filtrer une info précise avec jsonpath
kubectl get pod ubuntu -n mynamespace -o jsonpath='{.spec.containers[0].image}'
kubectl delete pod ubuntu -n mynamespace
Étape 6 - Explorer le cluster avec k9s
Objectif : Découvrir k9s, une interface en mode terminal qui affiche les ressources du cluster en temps réel. k9s utilise le même kubeconfig que kubectl (variable KUBECONFIG).
Action : Installer k9s à partir du paquet
.debpublié sur GitHubhttps://github.com/derailed/k9s
Observation :k9s versionaffiche la version installéeAction : Lancer
k9s, puis afficher les pods de tous les namespaces (:pod)
Observation : La liste se met à jour en continu ; on retrouve les pods dekube-systemvus à l'étape 3
Indice
# Installation sur Ubuntu (cf. https://github.com/derailed/k9s#installation)
wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb
sudo apt install ./k9s_linux_amd64.deb
rm k9s_linux_amd64.deb
k9s version
k9s
| Raccourci | Effet |
|---|---|
:pod, :deploy, :svc, :node, :ns | Changer de type de ressource |
/ | Filtrer la liste |
d | Décrire la ressource (kubectl describe) |
l | Afficher les logs (pods) |
s | Ouvrir un shell dans le conteneur (pods) |
ctrl-d | Supprimer la ressource |
? | Aide |
:q | Quitter |
Avancé
Relancer le pod sans
tail -f /dev/null. Que se passe-t-il ? Pourquoi ?Utiliser
kubectl get pod ubuntu -o jsonpath='{.status.phase}'pour filtrer l'étatLister tous les événements :
kubectl get events --sort-by .lastTimestamp -n mynamespaceInstaller
viddy(alternative àwatch) pour observer l'évolution des ressources en temps réel
Solution
Afficher
kubectl config view
kubectl create namespace mynamespace
kubectl run ubuntu --image=ubuntu:latest --namespace mynamespace -- tail -f /dev/null
kubectl get pod ubuntu --namespace mynamespace
kubectl describe pod ubuntu --namespace mynamespace
kubectl get pod ubuntu -o yaml --namespace mynamespace
kubectl delete pod ubuntu --namespace mynamespace