Résoudre les problèmes des clusters Big Data SQL Server Kubernetes
S’applique à : SQL Server 2019 (15.x)
Important
Le module complémentaire Clusters Big Data Microsoft SQL Server 2019 sera mis hors service. La prise en charge de la plateforme Clusters Big Data Microsoft SQL Server 2019 se terminera le 28 février 2025. Tous les utilisateurs existants de SQL Server 2019 avec Software Assurance seront entièrement pris en charge sur la plateforme, et le logiciel continuera à être maintenu par les mises à jour cumulatives SQL Server jusqu’à ce moment-là. Pour plus d’informations, consultez le billet de blog d’annonce et les Options Big Data sur la plateforme Microsoft SQL Server.
Cet article décrit plusieurs commandes Kubernetes utiles que vous pouvez utiliser pour monitorer un cluster Big Data SQL Server 2019 et résoudre les problèmes associés. Il montre comment visualiser les informations détaillées d’un pod ou d’autres artefacts Kubernetes situés dans le cluster Big Data. Cet article traite également de tâches courantes, comme la copie de fichiers vers ou depuis un conteneur exécutant un des services du cluster Big Data SQL Server.
Conseil
Pour la supervision des composants des clusters Big Data, vous pouvez utiliser les commandes azdata bdc status ou les notebooks de résolution des problèmes intégrés fournis avec Azure Data Studio.
Conseil
Exécutez les commandes kubectl suivantes sur une machine cliente Windows (cmd ou PS) ou Linux (bash). Elles nécessitent une authentification antérieure dans le cluster et un contexte de cluster pour s’exécuter. Par exemple, pour un cluster AKS créé précédemment, vous pouvez exécuter az aks get-credentials --name <aks_cluster_name> --resource-group <azure_resource_group_name>
pour télécharger le fichier de configuration de cluster Kubernetes et définir le contexte de cluster.
Obtenir l’état des pods
Vous pouvez utiliser la commande kubectl get pods
pour obtenir l’état des pods dans le cluster pour tous les espaces de noms ou pour l’espace de noms du cluster Big Data. Les sections suivantes montrent des exemples pour les deux.
Voir l’état de tous les pods dans le cluster Kubernetes
Exécutez la commande suivante pour obtenir tous les pods et leur état, y compris les pods qui font partie de l’espace de noms où les pods du cluster Big Data SQL Server sont créés :
kubectl get pods --all-namespaces
Voir l’état de toutes les pods dans le cluster Big Data SQL Server
Utilisez le paramètre -n
pour spécifier un espace de noms spécifique. Notez que les pods de cluster Big Data SQL Server sont créés dans un nouvel espace de noms créé au moment de l’amorçage du cluster, d’après le nom du cluster spécifié dans le fichier de configuration de déploiement. Le nom par défaut, mssql-cluster
, est utilisé ici.
kubectl get pods -n mssql-cluster
La sortie doit se présenter comme la liste suivante pour un cluster Big Data en cours d’exécution :
PS C:\> kubectl get pods -n mssql-cluster
NAME READY STATUS RESTARTS AGE
appproxy-f2qqt 2/2 Running 0 110m
compute-0-0 3/3 Running 0 110m
control-zlncl 4/4 Running 0 118m
data-0-0 3/3 Running 0 110m
data-0-1 3/3 Running 0 110m
gateway-0 2/2 Running 0 109m
logsdb-0 1/1 Running 0 112m
logsui-jtdnv 1/1 Running 0 112m
master-0 7/7 Running 0 110m
metricsdb-0 1/1 Running 0 112m
metricsdc-shv2f 1/1 Running 0 112m
metricsui-9bcj7 1/1 Running 0 112m
mgmtproxy-x6gcs 2/2 Running 0 112m
nmnode-0-0 1/1 Running 0 110m
storage-0-0 7/7 Running 0 110m
storage-0-1 7/7 Running 0 110m
Notes
Pendant un déploiement, les pods avec un ÉTATContainerCreating sont toujours en cours de création. Si le déploiement se bloque pour une raison quelconque, cela peut vous donner une idée de l’origine du problème. Examinez également la colonne PRÊT. Ceci vous indique le nombre de conteneurs démarrés dans le pod. Notez que les déploiements peuvent prendre 30 minutes ou plus, selon votre configuration et votre réseau. La majeure partie de ce temps est consacrée au téléchargement des images de conteneur pour différents composants.
Obtenir les détails d’un pod
Exécutez la commande suivante pour obtenir une description détaillée d’un pod spécifique au format JSON. Elle comprend des informations détaillées, comme le nœud Kubernetes actuel sur lequel le pod est placé, les conteneurs s’exécutant dans le pod et l’image utilisée pour démarrer les conteneurs. Elle montre également d’autres détails, comme les étiquettes, l’état et les revendications de volumes persistants qui sont associés au pod.
kubectl describe pod <pod_name> -n <namespace_name>
L’exemple suivant montre les détails pour le pod master-0
dans un cluster Big Data nommé mssql-cluster
:
kubectl describe pod master-0 -n mssql-cluster
Si des erreurs se sont produites, vous pouvez parfois voir l’erreur dans les événements récents pour le pod.
Obtenir les journaux d’un pod
Vous pouvez récupérer les journaux pour les conteneurs qui s’exécutent dans un pod. La commande suivante récupère les journaux pour tous les conteneurs s’exécutant dans le pod nommé master-0
et les place dans un fichier nommé master-0-pod-logs.txt
:
kubectl logs master-0 --all-containers=true -n mssql-cluster > master-0-pod-logs.txt
Obtenir l’état des services
Exécutez la commande suivante pour obtenir des détails sur les services du cluster Big Data. Ces détails incluent leur type et les adresses IP associées aux services et aux ports respectifs. Notez que les services de cluster Big Data SQL Server sont créés dans un nouvel espace de noms créé au moment de l’amorçage du cluster, d’après le nom du cluster spécifié dans le fichier de configuration de déploiement.
kubectl get svc -n <namespace_name>
L’exemple suivant montre l’état des services dans un cluster Big Data nommé mssql-cluster
:
kubectl get svc -n mssql-cluster
Les services suivants prennent en charge les connexions externes au cluster Big Data :
Service | Description |
---|---|
master-svc-external | Fournit l’accès à l’instance principale. (EXTERNAL-IP,31433 et l’utilisateur SA) |
controller-svc-external | Prend en charge les outils et les clients qui gèrent le cluster. |
gateway-svc-external | Fournit l’accès à la passerelle HDFS/Spark. (EXTERNAL-IP et l’utilisateur <AZDATA_USERNAME> )1 |
appproxy-svc-external | Prend en charge les scénarios de déploiement d’applications. |
1 À partir de SQL Server 2019 (15.x) CU 5, quand vous déployez un nouveau cluster avec l’authentification de base, tous les points de terminaison, dont la passerelle, utilisent AZDATA_USERNAME
et AZDATA_PASSWORD
. Les points de terminaison sur les clusters mis à niveau vers la CU 5 continuent à utiliser root
comme nom d’utilisateur pour se connecter au point de terminaison de la passerelle. Cette modification ne s’applique pas aux déploiements utilisant l’authentification Active Directory. Voir Informations d’identification pour l’accès aux services via le point de terminaison de passerelle dans les notes de publication.
Conseil
Il s’agit d’un moyen de voir les services avec kubectl, mais il est également possible d’utiliser la commande azdata bdc endpoint list
pour voir ces points de terminaison. Pour plus d’informations, consultez Obtenir les points de terminaison d’un cluster Big Data.
Obtenir les détails d’un service
Exécutez cette commande pour obtenir une description détaillée d’un service au format JSON. Il inclut des détails comme les étiquettes, le sélecteur, l’adresse IP, l’adresse IP externe (si le service est de type LoadBalancer), le port, etc.
kubectl describe service <service_name> -n <namespace_name>
L’exemple suivant récupère les détails du service master-svc-external :
kubectl describe service master-svc-external -n mssql-cluster
Copie des fichiers
Si vous devez copier des fichiers depuis le conteneur sur votre machine locale, utilisez la commande kubectl cp
avec la syntaxe suivante :
kubectl cp <pod_name>:<source_file_path> -c <container_name> -n <namespace_name> <target_local_file_path>
De même, vous pouvez utiliser kubectl cp
pour copier des fichiers depuis la machine locale dans un conteneur spécifique.
kubectl cp <source_local_file_path> <pod_name>:<target_container_path> -c <container_name> -n <namespace_name>
Copier des fichiers à partir d’un conteneur
L’exemple suivant copie les fichiers journaux de SQL Server depuis le conteneur dans le chemin ~/temp/sqlserverlogs
sur la machine locale (dans cet exemple, la machine locale est un client Linux) :
kubectl cp master-0:/var/opt/mssql/log -c mssql-server -n mssql-cluster ~/tmp/sqlserverlogs
Copier des fichiers dans un conteneur
L'exemple suivant copie le fichier AdventureWorks2022
depuis la machine locale dans le conteneur de l'instance maître SQL Server (mssql-server
) dans le pod master-0
. Le fichier est copié dans le répertoire /tmp
dans le conteneur.
kubectl cp ~/Downloads/AdventureWorks2022.bak master-0:/tmp -c mssql-server -n mssql-cluster
Forcer la suppression d’un pod
Il n’est pas recommandé de forcer la suppression d’un pod. Cependant, pour tester la disponibilité, la résilience ou la persistance des données, vous pouvez supprimer un pod pour simuler la défaillance d’un pod avec la commande kubectl delete pods
.
kubectl delete pods <pod_name> -n <namespace_name> --grace-period=0 --force
L’exemple suivant supprime le pod du pool de stockage, storage-0-0
:
kubectl delete pods storage-0-0 -n mssql-cluster --grace-period=0 --force
Obtenir l’adresse IP d’un pod
À des fins de dépannage, il peut être nécessaire d’obtenir l’adresse IP du nœud sur lequel un pod est en cours d’exécution. Pour obtenir l’adresse IP, utilisez la commande kubectl get pods
avec la syntaxe suivante :
kubectl get pods <pod_name> -o yaml -n <namespace_name> | grep hostIP
L’exemple suivant obtient l’adresse IP du nœud sur lequel le pod master-0
s’exécute :
kubectl get pods master-0 -o yaml -n mssql-cluster | grep hostIP
Tableau de bord Kubernetes
Vous pouvez lancer le tableau de bord Kubernetes pour obtenir des informations supplémentaires sur le cluster. Les sections suivantes expliquent comment lancer le tableau de bord pour Kubernetes sur AKS et pour Kubernetes amorcé avec kubeadm.
Démarrer le tableau de bord quand le cluster s’exécute dans AKS
Pour lancer l’exécution du tableau de bord Kubernetes :
az aks browse --resource-group <azure_resource_group> --name <aks_cluster_name>
Notes
Si vous obtenez l’erreur suivante : Impossible d’écouter sur le port 8001 : toutes les créations d’écouteur échouent avec les erreurs suivantes : Impossible de créer l’écouteur : Error listen tcp4 127.0.0.1:8001 : >bind: une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est normalement autorisée. Impossible de créer l’écouteur : Error listen tcp6: address [[::1]]:8001 : missing port in >address erreur : Impossible d’écouter sur l’un des ports demandés : [{8001 9090}], vérifiez que vous n’avez pas déjà démarré le tableau de bord à partir d’une autre fenêtre.
Quand vous lancez le tableau de bord sur votre navigateur, vous pouvez obtenir des avertissements liés aux autorisations en raison de l’activation par défaut de RBAC dans les clusters AKS et du fait que le compte de service utilisé par le tableau de bord ne dispose pas d’autorisations suffisantes pour accéder à toutes les ressources (par exemple, pods est interdit : L’utilisateur « system:serviceaccount:kube-system:kubernetes-dashboard » ne peut pas lister les pods de l’espace de noms « default » ). Exécutez la commande suivante pour accorder les autorisations nécessaires à kubernetes-dashboard
, puis redémarrez le tableau de bord :
kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
Démarrer le tableau de bord quand le cluster Kubernetes est démarré avec kubeadm
Pour obtenir des instructions détaillées sur le déploiement et la configuration du tableau de bord dans votre cluster Kubernetes, consultez la documentation de Kubernetes. Pour lancer le tableau de bord Kubernetes, exécutez cette commande :
kubectl proxy
Étapes suivantes
Pour plus d’informations sur les clusters Big Data, consultez Que sont les Clusters Big Data SQL Server ?.