Kubernetes cheatsheet

Quelques commandes k8s fréquentes avec paramètres

Sommaire

Voici mon k8s cheat sheet
couvrant les commandes les plus importantes de Kubernetes et les concepts allant de l’installation jusqu’à l’exécution de conteneurs et au nettoyage :

k8s lights

Installation de Kubernetes

Utilisation de Kubeadm

Pour installer Kubernetes à l’aide de kubeadm, suivez ces étapes :

  1. Préparer l’environnement :

    • Assurez-vous que les modules noyau nécessaires sont activés :
      sudo sysctl net/bridge/bridge-nf-call-ip6tables=1
      sudo sysctl net/bridge/bridge-nf-call-iptables=1
      sudo sysctl net/bridge/bridge-nf-call-arptables=1
      
    • Redémarrez le système pour appliquer les modifications.
  2. Installer Docker et autres prérequis :

    • Installez Docker :
      sudo apt-get update
      sudo apt-get install -y docker.io
      
    • Installez ebtables et ethtool :
      sudo apt-get install ebtables ethtool
      
    • Installez le support HTTPS et curl si nécessaire :
      sudo apt-get update
      sudo apt-get install -y apt-transport-https curl
      
    • Ajoutez le dépôt Kubernetes et installez kubeadm, kubelet et kubectl :
      curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
      sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
      deb http://apt.kubernetes.io/ kubernetes-xenial main
      EOF
      sudo apt-get update
      sudo apt-get install -y kubeadm kubelet kubectl
      
  3. Initialiser le cluster Kubernetes :

    • Initialisez le premier nœud de plan de contrôle :
      sudo kubeadm init
      
    • Joignez d’autres nœuds de plan de contrôle et nœuds de travail :
      kubeadm join <control-plane-node>:8443 --token <token> --discovery-token-ca-cert-hash <hash>
      

Utilisation de Minikube ou Kind

Pour le développement local, vous pouvez utiliser minikube ou kind :

  • Minikube :

    minikube start
    

    Suivez le guide officiel [Get Started!].

  • Kind :

    curl -sfL https://get.k3s.io | sh -
    kind create cluster
    

    Suivez la page [Kind Quick Start].

Commandes courantes de kubectl

Commandes de base

  • Obtenir des informations sur les ressources :

    kubectl get <resource>  # Liste des ressources (ex. pods, services, deployments)
    kubectl get pods --all-namespaces  # Liste tous les pods dans tous les namespaces
    kubectl get pods -o wide  # Liste des pods avec plus de détails
    kubectl get pod my-pod -o yaml  # Obtenir la configuration YAML d’un pod.
    
  • Décrire des ressources :

    kubectl describe <resource>  # Description détaillée d’une ressource (ex. nœuds, pods)
    kubectl describe nodes my-node
    kubectl describe pods my-pod.
    
  • Créer des ressources :

    kubectl create -f <manifest-file>  # Créer des ressources à partir d’un fichier YAML ou JSON
    kubectl create configmap <configmap-name> --from-literal=<key>=<value>  # Créer un ConfigMap
    kubectl create secret generic <secret-name> --from-literal=<key>=<value>  # Créer un Secret.
    
  • Supprimer des ressources :

    kubectl delete <resource> <name>  # Supprimer une ressource (ex. pod, deployment)
    kubectl delete pod my-pod
    kubectl delete deployment my-deployment.
    

Gestion des pods

  • Définir une commande et des arguments pour un conteneur :

    apiVersion: v1
    kind: Pod
    metadata:
      name: command-demo
    spec:
      containers:
      - name: command-demo-container
        image: debian
        command: ["printenv"]
        args: ["HOSTNAME", "KUBERNETES_PORT"]
    
    kubectl apply -f <manifest-file>
    kubectl get pods
    kubectl logs command-demo.
    
  • Exécuter une commande dans un shell :

    apiVersion: v1
    kind: Pod
    metadata:
      name: shell-demo
    spec:
      containers:
      - name: shell-demo-container
        image: debian
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello; sleep 10;done"]
    
    kubectl apply -f <manifest-file>
    kubectl get pods
    kubectl logs shell-demo.
    

Gestion des ConfigMap et Secret

  • Créer un ConfigMap :

    kubectl create configmap <configmap-name> --from-literal=<key>=<value>
    kubectl create configmap app-config --from-literal=environment=production --from-literal=log_level=info.
    
  • Créer un Secret :

    kubectl create secret generic <secret-name> --from-literal=<key>=<value>
    kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=supersecret.
    

Déploiement et gestion des services

  • Créer un déploiement :

    kubectl create deployment <deployment-name> --image=<image-name>
    kubectl create deployment my-deployment --image=nginx:latest.
    
  • Exposer un déploiement en tant que service :

    kubectl expose deployment <deployment-name> --type=NodePort --port=<port>
    kubectl expose deployment my-deployment --type=NodePort --port=80.
    

Gestion des namespaces et nœuds

  • Lister les namespaces :

    kubectl get namespaces
    
  • Créer un namespace :

    kubectl create namespace <namespace-name>
    kubectl create namespace my-namespace.
    
  • Lister les nœuds :

    kubectl get nodes
    kubectl get nodes --selector='!node-role.kubernetes.io/control-plane'.
    

Surveillance et débogage

  • Voir les logs :

    kubectl logs <pod-name>
    kubectl logs -f <pod-name>  # Suivre les logs en temps réel.
    
  • Décrire les événements :

    kubectl describe events
    
  • Vérifier les informations du cluster :

    kubectl cluster-info
    kubectl version  # Vérifier la version de Kubernetes.
    

Commandes avancées

  • Trier les ressources :

    kubectl get pods --sort-by='.status.containerStatuses.restartCount'
    kubectl get services --sort-by=.metadata.name.
    
  • Filtrer les ressources :

    kubectl get pods --field-selector=status.phase=Running
    kubectl get nodes --selector='!node-role.kubernetes.io/control-plane'.
    
  • Récupérer des données spécifiques :

    kubectl get configmap myconfig -o jsonpath='{.data.ca\.crt}'
    kubectl get secret my-secret --template='{{index .data "key-name-with-dashes"}}'.
    

Liens utiles