Ceci est une ancienne révision du document !
Table des matières
Notes Kubernetes k8s - Utilisation
Voir :
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 <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 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 --stdin --tty nginx -- /bin/bash kubectl exec -t -i nginx -- /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
