{{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