TP Matin - Premiers pas avec kubectl
Installer Kubernetes, explorer le cluster et déployer un premier pod.
Durée : ~2h
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
- ✅ Installation de k3s : Mettre en place un cluster Kubernetes léger
- ✅ 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
Objectif
- ✅ k3s installé et accessible via kubectl
- ✅ kubeconfig affiché et compris
- ✅ Namespace
mynamespacecréé - ✅ Pod
ubuntudéployé, inspecté, puis supprimé
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.
Action : Installer k3s via le script officiel Observation : La commande
kubectl get nodesretourne un node en étatReadyAction : 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
# Sur ubuntu, supprimer le kubectl snap si présent
sudo rm /snap/bin/kubectl
curl -sfL https://get.k3s.io | sudo sh -
kubectl get nodes
kubectl version
É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-systemObservation : 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
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
mynamespaceObservation : Il apparaît danskubectl get namespaces
Indice
kubectl create namespace mynamespace
Étape 5 - Déployer une application en CLI
Objectif : Créer et explorer un déploiement impératif.
Action : Créer un déploiement
demonstrationavec l'imagemonachus/rancher-demoObservation :kubectl describe deployment/demonstrationmontre les événements de créationAction : Scaler le déploiement à 5 réplicas Observation :
kubectl get podsmontre 5 pods, les événements de scaling apparaissent dans le describeAction : Exposer le déploiement via un service NodePort sur le port 8080 Observation :
kubectl get servicesmontre le service avec un port 3xxxx assigné
Indice
kubectl create deployment demonstration --image=monachus/rancher-demo
kubectl describe deployment/demonstration
kubectl get pods
kubectl scale deployment demonstration --replicas=5
kubectl describe deployment/demonstration
kubectl expose deployment demonstration --type=NodePort --port=8080 --name=demonstration-service
kubectl get services
Étape 6 - 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/nullObservation : Le pod est en étatRunningdanskubectl get pod -n mynamespaceAction : Inspecter le pod avec
getetdescribeObservation :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 voit
Action : 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 7 - Outils CLI supplémentaires
Objectif : Découvrir l'écosystème kubectl.
- Action : Installer
krew(gestionnaire de plugins kubectl) puiskubectxetkubensObservation :kubectxliste vos contextes,kubensliste vos namespaces et permet d'en choisir un par défaut
Indice
# Installer krew : https://krew.sigs.k8s.io/docs/user-guide/setup/install/
kubectl krew install ctx
kubectl krew install ns
kubectx # changer de cluster
kubens # changer de namespace courant
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'état - Lister tous les événements :
kubectl get events --sort-by .lastTimestamp -n mynamespace - Installer
viddy(alternative àwatch) pour observer l'évolution des ressources en temps réel - Essayer
kubectl port-forward svc/demonstration-service 8080:8080— quelle différence avec le NodePort ?
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