|
Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi. |
Ressources Kubernetes
Les commandes/étapes listées sur cette page peuvent être utilisées pour vérifier les ressources Kubernetes les plus importantes et s’appliquent aux clusters Kubernetes lancé par Rancher.
Assurez-vous d’avoir configuré le bon kubeconfig (par exemple, export KUBECONFIG=$PWD/kube_config_cluster.yml pour Rancher HA) ou d’utiliser le kubectl intégré via l’interface utilisateur.
Noeuds
Obtenir les nœuds
Exécutez la commande ci-dessous et vérifiez ce qui suit :
-
Tous les nœuds de votre cluster doivent être listés, assurez-vous qu’il n’en manque pas un.
-
Tous les nœuds doivent avoir le statut Prêt (s’ils ne sont pas dans l’état Prêt, vérifiez les journaux du conteneur
kubeletsur ce nœud en utilisantdocker logs kubelet). -
Vérifiez si tous les nœuds rapportent la version correcte.
-
Vérifiez si les valeurs OS/noyau Linux/Docker sont affichées comme prévu (il est possible que vous puissiez relier des problèmes à une mise à niveau de l’OS/noyau Linux/Docker).
kubectl get nodes -o wide
Exemple de sortie :
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME controlplane-0 Ready controlplane 31m v1.13.5 138.68.188.91 <none> Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 etcd-0 Ready etcd 31m v1.13.5 138.68.180.33 <none> Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 worker-0 Ready worker 30m v1.13.5 139.59.179.88 <none> Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5
Obtenir les conditions des nœuds
Exécutez la commande ci-dessous pour lister les nœuds avec Conditions des nœuds.
kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{end}}'
Exécutez la commande ci-dessous pour lister les nœuds avec Conditions des nœuds qui sont actifs et pourraient empêcher un fonctionnement normal.
kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{if ne .type "Ready"}}{{if eq .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{else}}{{if ne .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{": "}}{{.status}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'
Exemple de sortie :
worker-0: DiskPressure:True
Élection du leader Kubernetes
Leader du gestionnaire de contrôleur Kubernetes
Le leader est déterminé par un processus d’élection de leader. Après que le leader a été déterminé, le leader (holderIdentity) est enregistré dans le point de terminaison kube-controller-manager (dans cet exemple, controlplane-0).
kubectl -n kube-system get endpoints kube-controller-manager -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
{"holderIdentity":"controlplane-0_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","leaseDurationSeconds":15,"acquireTime":"2018-12-27T08:59:45Z","renewTime":"2018-12-27T09:44:57Z","leaderTransitions":0}>
Leader du planificateur Kubernetes
Le leader est déterminé par un processus d’élection de leader. Après que le leader a été déterminé, le leader (holderIdentity) est enregistré dans le point de terminaison kube-scheduler (dans cet exemple, controlplane-0).
kubectl -n kube-system get endpoints kube-scheduler -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
{"holderIdentity":"controlplane-0_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","leaseDurationSeconds":15,"acquireTime":"2018-12-27T08:59:45Z","renewTime":"2018-12-27T09:44:57Z","leaderTransitions":0}>
Contrôleur d’Ingress
Le contrôleur d’Ingress par défaut est Traefik et est déployé en tant que DaemonSet dans l’espace de noms traefik. Les pods ne sont programmés que sur des nœuds ayant le rôle worker.
Vérifiez si les pods fonctionnent sur tous les nœuds :
kubectl -n traefik get pods -o wide
Exemple de sortie :
kubectl -n traefik get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE default-http-backend-797c5bc547-kwwlq 1/1 Running 0 17m x.x.x.x worker-1 traefik-4qd64 1/1 Running 0 14m x.x.x.x worker-1 traefik-8wxhm 1/1 Running 0 13m x.x.x.x worker-0
Si un pod ne peut pas s’exécuter (le statut n’est pas Running, le statut de disponibilité n’affiche pas 1/1 ou vous constatez un nombre élevé de redémarrages), vérifiez les détails du pod, les journaux et les événements de l’espace de noms.
Journaux du conteneur du pod
La commande ci-dessous peut afficher les journaux de tous les pods étiquetés "app=traefik", mais elle affichera seulement 10 lignes de journal en raison des restrictions de la commande kubectl logs. Reportez-vous à --tail de kubectl logs -h pour plus d’informations.
kubectl -n traefik logs -l app=traefik
Si le journal complet est nécessaire, spécifiez le nom du pod dans la commande suivante :
kubectl -n traefik logs <pod name>
Agents Rancher
La communication avec le cluster (API Kubernetes via cattle-cluster-agent) et la communication avec les nœuds (provisionnement du cluster via cattle-node-agent) se fait par l’intermédiaire des agents Rancher.
cattle-node-agent
Vérifiez si les pods cattle-node-agent sont présents sur chaque nœud, ont le statut Running et n’ont pas un nombre élevé de redémarrages :
kubectl -n cattle-system get pods -l app=cattle-agent -o wide
Exemple de sortie :
NAME READY STATUS RESTARTS AGE IP NODE cattle-node-agent-4gc2p 1/1 Running 0 2h x.x.x.x worker-1 cattle-node-agent-8cxkk 1/1 Running 0 2h x.x.x.x etcd-1 cattle-node-agent-kzrlg 1/1 Running 0 2h x.x.x.x etcd-0 cattle-node-agent-nclz9 1/1 Running 0 2h x.x.x.x controlplane-0 cattle-node-agent-pwxp7 1/1 Running 0 2h x.x.x.x worker-0 cattle-node-agent-t5484 1/1 Running 0 2h x.x.x.x controlplane-1 cattle-node-agent-t8mtz 1/1 Running 0 2h x.x.x.x etcd-2
Vérifiez les journaux d’un pod cattle-node-agent spécifique ou de tous les pods cattle-node-agent :
kubectl -n cattle-system logs -l app=cattle-agent
cattle-cluster-agent
Vérifiez si le pod cattle-cluster-agent est présent dans le cluster, a le statut Running et n’a pas un nombre élevé de redémarrages :
kubectl -n cattle-system get pods -l app=cattle-cluster-agent -o wide
Exemple de sortie :
NAME READY STATUS RESTARTS AGE IP NODE cattle-cluster-agent-54d7c6c54d-ht9h4 1/1 Running 0 2h x.x.x.x worker-1
Vérifiez les journaux du pod cattle-cluster-agent :
kubectl -n cattle-system logs -l app=cattle-cluster-agent
Emplois et Pods
Vérifiez que les pods ou les emplois ont le statut En cours/Terminé
Pour vérifier, exécutez la commande :
kubectl get pods --all-namespaces
Si un pod n’est pas dans l’état En cours, vous pouvez explorer la cause profonde en exécutant :
Journaux du conteneur du pod
kubectl logs NOM_DU_POD -n ESPACE_DE_NOM
Si un emploi n’est pas dans l’état Terminé, vous pouvez explorer la cause profonde en exécutant :
Pods évincés
Les pods peuvent être évincés en fonction des signaux d’éviction.
Récupérer une liste de pods évincés (nom du pod et espace de noms) :
kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}'
Pour supprimer tous les pods évincés :
kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' | while read epod enamespace; do kubectl -n $enamespace delete pod $epod; done
Récupérer une liste de pods évincés, leur nœud programmé et la raison :
kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' | while read epod enamespace; do kubectl -n $enamespace get pod $epod -o=custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,MSG:.status.message; done
L’emploi ne se termine pas
Si vous avez activé Istio et que vous rencontrez des problèmes avec un emploi que vous avez déployé qui ne se termine pas, vous devrez ajouter une annotation à votre pod en suivant ces étapes.
Puisque les Sidecars Istio fonctionnent indéfiniment, un emploi ne peut pas être considéré comme terminé même après que sa tâche soit achevée. Ceci est une solution temporaire et désactivera Istio pour tout le trafic vers/depuis le Pod annoté. Gardez à l’esprit que cela peut ne pas vous permettre de continuer à utiliser un emploi pour les tests d’intégration, car l’emploi n’aura pas accès au maillage de services.