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
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 commandekubectl 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-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
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 une application en CLI
Objectif : Créer et explorer un déploiement impératif.
Action : Créer un déploiement
demonstrationavec l'imagemonachus/rancher-demo
Observation :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/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 7 - Outils CLI supplémentaires
Objectif : Découvrir l'écosystème kubectl.
- Action : Installer
krew(gestionnaire de plugins kubectl) puiskubectxetkubens
Observation :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'é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éelEssayer
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