====== Kubernetes ====== ===== Commandes ===== * Activer l'auto-complétion dans bash : source <(kubectl completion bash) && echo "source <(kubectl completion bash)" >> ~/.bashrc * Activer l'auto-complétion en utilisant un alias : # Dans .bash_aliases alias k='kubectl' complete -F __start_kubectl k * Créer un Port-forward pour service : kubectl port-forward svc/mon-service port-local:port-service * Se connecter dans un pod: kubectl exec -it nom-container -- /bin/bash * Se connecter dans un container spécifique :kubectl exec -ti nom-pod -c nom-container -- bash * Sauvegarder la conf d'une ressource dans un fichier yaml :kubectl get pvc mon-pvc-0 -o yaml > pvc0.yml * Copier un fichier dans un pod et un container spécifique : kubectl cp archive.tar.gz namespace/mon-pod:/foo/ -c mon-container * Supprimer tous les pods evicted : kubectl get pod | grep Evicted | awk '{print $1}' | xargs kubectl delete pod * Supprimer tous les pods bloqués en statut Terminating : kubectl get po| grep Terminating | awk '{print $1}' | xargs kubectl delete pod --force * Supprimer un namespace bloqué en statut Terminating : kubectl get namespace "MYNAMESPACE" -o json | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" | kubectl replace --raw /api/v1/namespaces/MYNAMESPACE/finalize -f - * Drainer un node : kubectl drain --ignore-daemonsets --delete-emptydir-data mon-node * Restaurer un dump SQL dans un pod MariaDB :gzcat dump.sql.gz | kubectl exec -i pod-mariadb-0 -- mysql -u root -pPASSWORD ma_db ==== Diagnostic ==== * Voir les metrics d'un pod ou node : kubectl top [node|pod] nom-pod-node * Voir les metrics de tous les nodes d'un cluster : kubectl get no | kubectl top no * Lister tous les pods d'un node : kubectl get pod -A -o wide|grep NODE * Lister les ip des pods d'un cluster : kubectl get pod -A -o wide * Voir l'espace disque restant dans un pod : kubectl exec nom-pod -- df -h ===== Ressources de test ===== ==== Pod ==== apiVersion: v1 kind: Pod metadata: name: debian-test spec: containers: - name: debian image: debian:stable-slim command: - "sleep" - "86400" volumeMounts: - name: data mountPath: /mnt/data volumes: - name: data persistentVolumeClaim: claimName: data-debian-test-0 ==== Volume ==== --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-debian-test-0 spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 50Gi storageClassName: csi-cinder-classic ===== Debug ===== ==== Gérer un conflit de versions API de ressources ==== Suite à une mise à jour du cluster, des ressources peuvent être dans une version API obsolète. Exemple : Error: UPGRADE FAILED: unable to build kubernetes objects from current release manifest: [resource mapping not found for name: "XXXXXXXX" namespace: "" from "": no matches for kind "PodDisruptionBudget" in version "policy/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "XXXXXXXX" namespace: "" from "": no matches for kind "PodDisruptionBudget" in version "policy/v1beta1" La solution consiste à faire tourner Mapkubeapis : - helm plugin install https://github.com/helm/helm-mapkubeapis - helm mapkubeapis RELEASE ==== Supprimer une namespace bloqué en statut terminating ==== - kubectl get namespace -o json > .json - # Supprimer le finalizer: kubernetes vim .json - kubectl replace --raw "/api/v1/namespaces//finalize" -f ./.json source : [[https://stackoverflow.com/questions/52369247/namespace-stuck-as-terminating-how-i-removed-it]] ==== Augmenter la taille d'un volume déclaré dans un statefulset ==== Ce processus n'a été testé que chez AWS avec gp2 pour storageclass - Supprimer le statefulset : k delete sts MON-STS - Modifier la taille du PVC : k edit pvc MON-PVC - Appliquer la modification de taille dans le chart Helm du déploiement - Pousser et déployer la modification === Méthode alternative === - Unscale le statefulset - Modifier le pv pour mettre reclaimpolicy à Retain - Supprimer le pvc - Modifier le pv pour supprimer le claimref - Supprimer le statefulet - Relancer le deploiement Méthode chez OVH : https://support.us.ovhcloud.com/hc/en-us/articles/1500005033982-How-to-Resize-Persistent-Volumes ===== Minikube ===== * Accéder au dashboard : minikube dashboard * Connaître l'url pour accéder à un service : minikube service service-name --url * Démarrer Minikube en intégrant un volume : minikube start --mount-string=":" --mount * Importer des fichiers dans la VM Minikube : rsync -arv -e "ssh -i $(minikube ssh-key)" --rsync-path="sudo rsync" /path/to/source/files/ docker@$(minikube ip):/data/ Ressources de commandes essentielles : * [[https://www.tutorialspoint.com/kubernetes/kubernetes_kubectl_commands]] * [[https://kubernetes.io/docs/reference/kubectl/cheatsheet/]] * [[https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/]]