Wiki adminsys - Cebador.fr

Wiki d'administration systèmes et réseaux.
Simples notes personnelles et non réelle documentation exhaustive.
Donc désolé pour les coquilles et les inexactitudes.
Doc sous licence GNU FDL 1.3

Outils pour utilisateurs

Outils du site


kubernetes

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 :

  1. helm plugin install https://github.com/helm/helm-mapkubeapis
  2. helm mapkubeapis RELEASE 

Supprimer une namespace bloqué en statut terminating

  1. kubectl get namespace <YOUR_NAMESPACE> -o json > <YOUR_NAMESPACE>.json
  2. # Supprimer le finalizer: kubernetes
    vim <YOUR_NAMESPACE>.json
  3. 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

  1. Supprimer le statefulset :
    k delete sts MON-STS
  2. Modifier la taille du PVC :
    k edit pvc MON-PVC
  3. Appliquer la modification de taille dans le chart Helm du déploiement
  4. Pousser et déployer la modification

Méthode alternative

  1. Unscale le statefulset
  2. Modifier le pv pour mettre reclaimpolicy à Retain
  3. Supprimer le pvc
  4. Modifier le pv pour supprimer le claimref
  5. Supprimer le statefulet
  6. 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