{{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/ 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 # 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 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 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" 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": # À 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 Procédures Restart des pods Se placer dans le namespace des frontaux valplop 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 kubectl get pods Résultat attendu NAME READY STATUS RESTARTS AGE bac-valplop-8686574455-bnplq 4/4 Running 0 6d21h bac-valplop-8686574455-ddxcf 4/4 Running 0 4d3h bac-valplop-8686574455-dr25b 4/4 Running 0 6d21h [...] Vérifier quelle ressource deployment on veut relancer kubectl get deployments.apps Lancer un rollout (= restart des pods du deployment ciblé) kubectl rollout restart 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 kubectl delete pod cassandra-cl02livebgl-a-0 --grace-period=0 --force Je veux savoir ma conso sur mon namespace kubectl -n $namespace get ResourceQuota kaas-compute-resources-$namespace -o yaml === Restart a resource Resource rollout will be restarted. 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 kubectl get nodes -o wide kubectl version kubectl cluster-info To further debug and diagnose cluster problems, use ''kubectl cluster-info dump'' 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/1 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 kubectl run nginx --image=nginx kubectl describe pod nginx Get a shell to the running container kubectl exec -ti nginx -- /bin/bash Get a shell to a specific running container # 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 kubectl port-forward nginx 8080:80 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'' apiVersion: v1 kind: Pod metadata: name: www spec: containers: - name: nginx image: nginx:1.12.2 kubectl create -f pod.yaml