kubernetes
Table des matières
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
- download
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
- download
--- 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 <YOUR_NAMESPACE> -o json > <YOUR_NAMESPACE>.json
# Supprimer le finalizer: kubernetes vim <YOUR_NAMESPACE>.json
kubectl replace --raw "/api/v1/namespaces/<YOUR_NAMESPACE>/finalize" -f ./<YOUR_NAMESPACE>.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=“<source directory>:<target directory>” –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 :
kubernetes.txt · Dernière modification : de Administrateur