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éploiementConsulter 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

Attendre un état - ex que les pods soient prêts

An alternative approach is to use kubectl wait You could: <code bash> kubectl wait pod --all --for=condition=Ready --namespace=${ns} kubectl wait pod --all --for=condition=Ready -A

ProcéduresRestart 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 <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

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 kubectlInstall kubeadmInstall 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

Autres

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