Outils pour utilisateurs

Outils du site


tech:notes_kubernetes_k8s_-_utilisation

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:notes_kubernetes_k8s_-_utilisation [2026/01/29 17:23] Jean-Baptistetech:notes_kubernetes_k8s_-_utilisation [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Brouillon K8S}}
 +
 +# Notes Kubernetes k8s - Utilisation
 +
 +Voir :
 +  * https://kubernetes.io/fr/docs/reference/kubectl/cheatsheet/
 +  * https://signoz.io/guides/how-to-check-what-port-a-pod-is-listening-on-with-kubectl-and-not-looking-at-the-dockerfile/
 +
 +
 +
 +~~~bash
 +kubectl api-resources -o wide
 +kubectl explain deploy
 +
 +kubectl get nodes
 +kubectl get pods --all-namespaces
 +kubectl --namespace=kube-system get all
 +kubectl --kubeconfig .kube/config  get nodes
 +export KUBECONFIG=/etc/kubernetes/admin.conf
 +#export KUBECONFIG=~/.kube/config
 +cp /etc/kubernetes/admin.conf ~/.kube/config
 +
 +kubectl --server=https://192.168.56.21:6443 get nodes -o wide
 +kubectl get deployment --all-namespaces
 +kubectl get svc
 +~~~
 +
 +
 +## Administration
 +
 +
 +
 +Diagnostiquer le dysfonctionnement d'un pod Kubernetes
 +~~~bash
 +# Voir les logs
 +kubectl logs monpod
 +# Si le pod est en erreur
 +kubectl describe po monpod
 +# Si le pod n'existe pas, voir le replicaset qui devrait le créer (s'il y en a un)
 +kubectl describe rs monreplicaset
 +# Si le replicaset n'existe pas, voir son déploiement/statefulset/autre
 +kubectl describe deploy mondeploiement
 +kubectl describe sts mon statefulset
 +~~~
 +
 +Vous pouvez consulter ce diagramme pour le troubleshooting d'un déploiement
 +Consulter les logs de l'api server Kubernetes
 +
 +On y trouvera notamment les requêtes récentes des utilisateurs et leur droits RBAC
 +~~~bash
 +kubectl -n kube-system logs -l component=kube-apiserver --tail 1000
 +~~~
 +
 +Consulter les logs de plop
 +
 +Peut permettre d'avoir des détails sur les messages d'erreurs de plop
 +~~~bash
 +kubectl -n plop logs -l app=plop -c plop --tail 1000
 +~~~
 +Note: on pourra passer plop en mode debug pour avoir des informations plus complètes (kubectl -n plop edit ds plop, puis "- --log-level=debug" dans les arguments du container)
 +Lister les pvs de chaque node
 +
 +Permet de voir les pvs (persistent volumes) disponibles sur chaque node, par exemple pour débugger un statefulset dont un pvc est en état "Pending"
 +~~~bash
 +export JSONPATH='{range .items[*]}{@.metadata.name}  {@.spec.nodeAffinity.required.nodeSelectorTerms[*].matchExpressions[*].values[]}  {@.status.phase}  {@.spec.capacity.storage};{end}'
 +kubectl get pv -o jsonpath="$JSONPATH" | tr ";" "\n"
 +~~~
 +
 +
 +Objets Kubernetes
 +
 +Commandes pour retrouver le pod / daemonset / deploiement responsable du container "plop":
 +~~~bash
 +# À utiliser sur un master, les noeuds n'ont pas la commande "kubectl"
 +kubectl get pod -A | grep plop
 +kubectl get ds -A | grep plop
 +kubectl get deploy -A | grep plop
 +~~~
 +
 +Attendre un état - ex que les pods soient prêts
 +~~~bash
 +
 +
 +An alternative approach is to use kubectl wait
 +
 +You could:
 +~~~bash
 +kubectl wait pod --all --for=condition=Ready --namespace=${ns}
 +
 +kubectl wait pod --all --for=condition=Ready -A
 +~~~
 +
 +
 +
 +Procédures
 +Restart des pods
 +
 +
 +Se placer dans le namespace des frontaux valplop
 +~~~bash
 +kubectl config set-context $(kubectl config current-context) --namespace=zzz-valplop
 +~~~
 +
 +Vérifier qu'on accède bien au cluster k8s en listant les pods
 +~~~bash
 +kubectl get pods
 +~~~
 +
 +Résultat attendu
 +~~~
 +NAME                          READY   STATUS    RESTARTS   AGE
 +bac-valplop-8686574455-bnplq   4/    Running            6d21h
 +bac-valplop-8686574455-ddxcf   4/    Running            4d3h
 +bac-valplop-8686574455-dr25b   4/    Running            6d21h
 +[...]
 +~~~
 +
 +Vérifier quelle ressource deployment on veut relancer
 +~~~bash
 +kubectl get deployments.apps
 +~~~
 +
 +Lancer un rollout (= restart des pods du deployment ciblé)
 +~~~bash
 +kubectl rollout restart deployment <nom du deployment>
 +~~~
 +
 +On peut surveiller le restart séquentiel des pods avec l'utilitaire k9s, les nouveaux pods passeront successivement les états Pending, ContainerCreating, Running... les anciens passeront en Terminated et disparaitront
 +
 +Restart pod récalcitrant
 +~~~bash
 +kubectl delete pod cassandra-cl02livebgl-a-0 --grace-period=0 --force
 +~~~
 +
 +Je veux savoir ma conso sur mon namespace
 +~~~bash
 +kubectl -n $namespace get ResourceQuota kaas-compute-resources-$namespace -o yaml
 +~~~
 +
 +
 +
 +### Restart a resource
 +
 +
 +Resource rollout will be restarted.
 +~~~bash
 +kubectl rollout restart RESOURCE
 +~~~
 +
 +Examples
 +~~~
 +# Restart all deployments in the test-namespace namespace
 +kubectl rollout restart deployment -n test-namespace
 +
 +# Restart a deployment
 +kubectl rollout restart deployment/nginx
 +
 +# Restart a daemon set
 +kubectl rollout restart daemonset/abc
 +
 +# Restart deployments with the app=nginx label
 +kubectl rollout restart deployment --selector=app=nginx
 +~~~
 +
 +
 +## Notes install nodes
 +
 +Clef SSH /root/.ssh/
 +
 +apt-get install curl
 +
 +Install kubectl
 +Install kubeadm
 +Install Docker
 +
 +~~~bash
 +kubectl get nodes -o wide
 +kubectl version
 +kubectl cluster-info
 +~~~
 +
 +To further debug and diagnose cluster problems, use `kubectl cluster-info dump`
 +~~~bash
 +kubectl get namespaces
 +kubectl api-resources
 +~~~
 +
 +~~~
 +# kubectl run hello --image=hello-world
 +pod/hello created
 +# kubectl get pods
 +NAME    READY   STATUS             RESTARTS     AGE
 +hello   0/    CrashLoopBackOff   1 (4s ago)   10s
 +~~~
 +
 +`CrashLoopBackOff` signifit que le container fait que de cracher, ce qui est normal pour le 'hello-word' qui se termine systématiquement
 +
 +~~~bash
 +kubectl run nginx --image=nginx
 +kubectl describe pod nginx
 +~~~
 +
 +Get a shell to the running container
 +~~~bash
 +kubectl exec -ti nginx -- /bin/bash
 +~~~
 +
 +Get a shell to a specific running container
 +~~~bash
 +# Get containers list
 +kubectl get pod awx-task-777db545b8-7npjl -o jsonpath='{.spec.containers[*].name }{"\n"}'
 +
 +kubectl exec -ti awx-task-777db545b8-7npjl --container awx-ee -- /bin/bash
 +~~~
 +
 +Port mapping
 +~~~bash
 +kubectl port-forward nginx 8080:80
 +~~~
 +
 +~~~bash
 +kubectl create deployment nginx-deployment --image=nginx
 +
 +kubectl expose deployment nginx-deployment --port=8080 --target-port=80
 +kubectl get services
 +~~~
 +
 +~~~
 +# kubectl describe deployment nginx-deployment | grep ^Replicas:
 +Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
 +
 +# kubectl scale deployment nginx-deployment --replicas=2
 +deployment.apps/nginx-deployment scaled
 +~~~
 +
 +Création d'un pod
 +
 +`nginx.yaml`
 +~~~yaml
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  name: www
 +spec:
 +  containers:
 +    - name: nginx
 +      image: nginx:1.12.2
 +~~~
 +
 +~~~bash
 +kubectl create -f pod.yaml
 +~~~
 +
 +
 +## Autres
 +
 +~~~bash
 +export POD_NAME=$(kubectl get pods --namespace kube-system -l "app.kubernetes.io/name=headlamp,app.kubernetes.io/instance=my-headlamp" -o jsonpath="{.items[0].metadata.name}")
 +
 +export CONTAINER_PORT=$(kubectl get pod --namespace kube-system $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
 +
 +kubectl --namespace kube-system port-forward $POD_NAME 8080:$CONTAINER_PORT
 +~~~
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki