Устранение неполадок Кластеров больших данных SQL Server в Kubernetes

Область применения: SQL Server 2019 (15.x)

Важно!

Поддержка надстройки "Кластеры больших данных" Microsoft SQL Server 2019 будет прекращена. Мы прекратим поддержку Кластеров больших данных SQL Server 2019 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на платформе, и программное обеспечение будет продолжать поддерживаться с помощью накопительных обновлений SQL Server до этого времени. Дополнительные сведения см. в записи блога объявлений и в статье о параметрах больших данных на платформе Microsoft SQL Server.

В этой статье описываются несколько полезных команд Kubernetes, которые можно использовать для отслеживания и устранения неполадок в Кластере больших данных SQL Server 2019. Здесь показано, как просмотреть подробные сведения о Pod или других артефактах Kubernetes, расположенных в кластере больших данных. В этой статье также рассматриваются распространенные задачи, такие как копирование файлов в контейнере, где выполняется одна из служб кластеров больших данных SQL Server.

Совет

Для мониторинга состояния компонентов кластеров больших данных можно использовать команды azdata bdc status или встроенные записные книжки для устранения неполадок в составе Azure Data Studio.

Совет

Выполните следующие команды kubectl на клиентском компьютере Windows (cmd или PS) или Linux (bash). Они нуждаются в предварительной проверке подлинности в кластере и контексте кластера для выполнения. Например, для ранее созданного кластера AKS можно запустить az aks get-credentials --name <aks_cluster_name> --resource-group <azure_resource_group_name>, чтобы скачать файл конфигурации кластера Kubernetes и задать контекст кластера.

Получение состояния модулей Pod

С помощью команды kubectl get pods можно получить состояние модулей Pod в кластере для всех пространств имен или пространства имен кластера больших данных. В следующих разделах показаны примеры обоих типов.

Отображение состояния всех модулей Pod в кластере Kubernetes

Выполните следующую команду, чтобы получить все модули Pod и их состояния, включая модули, которые являются частью пространства имен, в котором созданы модули кластера больших данных SQL Server.

kubectl get pods --all-namespaces

Отображение состояния всех модулей Pod в кластере больших данных SQL Server

Используйте параметр -n, чтобы указать определенное пространство имен. Обратите внимание, что модули кластера больших данных SQL Server создаются в новом пространстве имен, созданном во время начальной загрузки кластера на основе имени кластера, указанного в файле конфигурации развертывания. Здесь используется имя по умолчанию — mssql-cluster.

kubectl get pods -n mssql-cluster

Для работающего кластера больших данных вы должны увидеть результат, аналогичный приведенному ниже.

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

Примечание.

Во время развертывания модули Pod со значением STATUS (Состояние), равным ContainerCreating (Создается контейнер), по-прежнему отображаются. Если развертывание по какой либо причине зависает, это может подсказать вам, где может быть проблема. Также взгляните на столбец READY (Готово). Это говорит о том, сколько контейнеров запущено в Pod. Обратите внимание, что развертывание может занять 30 минут или более в зависимости от конфигурации и сети. Значительная часть этого времени тратится на скачивание образов контейнеров для различных компонентов.

Получение сведений о Pod

Выполните следующую команду, чтобы получить подробное описание конкретного Pod в выходных данных формата JSON. Сюда входят такие сведения, как текущий узел Kubernetes, на котором размещен модуль Pod, контейнеры, работающие в Pod, и образ, используемый для начальной загрузки контейнеров. Здесь также отображаются другие сведения, такие как метки, состояние и постоянные тома, связанные с модулем Pod.

kubectl describe pod  <pod_name> -n <namespace_name>

В следующем примере показаны сведения для Pod master-0 в кластере больших данных с именем mssql-cluster:

kubectl describe pod  master-0 -n mssql-cluster

В случае возникновения ошибок может присутствовать ошибка в последних событиях Pod.

Получение журналов Pod

Вы можете получить журналы контейнеров, работающих в Pod. Следующая команда извлекает журналы для всех контейнеров, работающих в Pod master-0, и выводит их в файл master-0-pod-logs.txt:

kubectl logs master-0 --all-containers=true -n mssql-cluster > master-0-pod-logs.txt

Получение состояния служб

Выполните следующую команду, чтобы получить сведения о службах кластеров больших данных. Эти сведения включают в себя их тип и IP-адреса, связанные с соответствующими службами и портами. Обратите внимание, что службы кластера больших данных SQL Server создаются в новом пространстве имен, созданном во время начальной загрузки кластера на основе имени кластера, указанного в файле конфигурации развертывания.

kubectl get svc -n <namespace_name>

В следующем примере показаны сведения о состоянии служб в кластере больших данных с именем mssql-cluster:

kubectl get svc -n mssql-cluster

Следующие службы поддерживают внешние подключения к кластеру больших данных:

Служба Description
master-svc-external Предоставляет доступ к главному экземпляру.
(EXTERNAL-IP,31433 и пользователь SA)
controller-svc-external Поддерживает средства и клиенты, управляющие кластером.
gateway-svc-external Предоставляет доступ к шлюзу HDFS/Spark.
(EXTERNAL-IP и пользователь <AZDATA_USERNAME>)1
appproxy-svc-external Поддержка сценариев развертывания приложений.

1 Начиная с SQL Server 2019 (15.x) CU 5 при развертывании нового кластера с базовой проверкой подлинности всех конечных точек, включая использование AZDATA_USERNAME шлюза и AZDATA_PASSWORD. Конечные точки в кластерах, которые обновлены до накопительного пакета обновления 5, продолжают использовать root в качестве имени пользователя для подключения к конечной точке шлюза. Это изменение не применяется к развертываниям, в которых используется проверка подлинности с помощью Active Directory. Подробные сведения см. в заметках о выпуске в разделе Учетные данные для доступа к службам через конечную точку шлюза.

Совет

Это способ просмотра служб с помощью kubectl, но для просмотра этих конечных точек можно также использовать команду azdata bdc endpoint list. Дополнительные сведения см. в разделе Получение конечных точек кластера больших данных.

Получение сведений о службе

Выполните следующую команду, чтобы получить подробное описание конкретной службы в выходных данных формата JSON. Оно будет включать такие сведения, как метки, селектор, IP-адреса, внешние IP-адреса (если служба имеет тип подсистемы балансировки нагрузки), порт и т. д.

kubectl describe service <service_name> -n <namespace_name>

В следующем примере извлекаются сведения о службе master-svc-external:

kubectl describe service master-svc-external -n mssql-cluster

Копирование файлов

Если необходимо скопировать файлы из контейнера на локальный компьютер, используйте команду kubectl cp со следующим синтаксисом:

kubectl cp <pod_name>:<source_file_path> -c <container_name> -n <namespace_name> <target_local_file_path>

Аналогичным образом можно использовать kubectl cp для копирования файлов с локального компьютера в конкретный контейнер.

kubectl cp <source_local_file_path> <pod_name>:<target_container_path> -c <container_name>  -n <namespace_name>

Копирование файлов из контейнера

В следующем примере файлы журнала SQL Server копируются из контейнера в путь ~/temp/sqlserverlogs на локальном компьютере (в этом примере локальный компьютер является клиентом Linux):

kubectl cp master-0:/var/opt/mssql/log -c mssql-server -n mssql-cluster ~/tmp/sqlserverlogs

Копирование файлов в контейнер

В следующем примере файл копируется AdventureWorks2022 с локального компьютера в контейнер главного экземпляра SQL Server (mssql-server) в модуле master-0 pod. Файл копируется в каталог /tmp в контейнере.

kubectl cp ~/Downloads/AdventureWorks2022.bak master-0:/tmp -c mssql-server -n mssql-cluster

Принудительное удаление модуля pod

Принудительно удалять Pod не рекомендуется. Однако для тестирования доступности, устойчивости или сохраняемости данных можно удалить модуль Pod, чтобы имитировать сбой Pod, с помощью команды kubectl delete pods.

kubectl delete pods <pod_name> -n <namespace_name> --grace-period=0 --force

В следующем примере удаляется модуль Pod пула носителей, storage-0-0:

kubectl delete pods storage-0-0 -n mssql-cluster --grace-period=0 --force

Получение IP-адреса pod

В целях устранения неполадок может потребоваться получить IP-адрес узла, на котором сейчас выполняется модуль. Чтобы получить IP-адрес, используйте команду kubectl get pods со следующим синтаксисом:

kubectl get pods <pod_name> -o yaml -n <namespace_name> | grep hostIP

В следующем примере показано получение IP-адреса узла, на котором работает модуль Pod master-0:

kubectl get pods master-0 -o yaml -n mssql-cluster | grep hostIP

Панель мониторинга Kubernetes

Для получения дополнительных сведений о кластере можно запустить панель мониторинга Kubernetes. В следующих разделах объясняется, как запустить панель мониторинга для Kubernetes на AKS и для Kubernetes, подготовленного с помощью kubeadm.

Запуск панели мониторинга при работе кластера в AKS

Чтобы запустить панель мониторинга Kubernetes, выполните следующие действия.

az aks browse --resource-group <azure_resource_group> --name <aks_cluster_name>

Примечание.

Если возникает следующее сообщение об ошибке: Не удалось прослушать порт 8001: не удалось создать прослушиватели со следующими ошибками: ошибка прослушивания tcp4 127.0.0.1:8001: >bind: обычно разрешено только одно использование каждого адреса сокета (протокол/сетевой адрес/порт). Не удалось создать прослушиватель: ошибка прослушивания tcp6: адрес [[::1]]:8001: отсутствует порт в >ошибка адреса: не удалось прослушать ни один из запрошенных портов: [{8001 9090}], убедитесь, что панель мониторинга не была запущена из другого окна.

При запуске панели мониторинга в браузере вы можете получать предупреждения о разрешениях из-за включения RBAC по умолчанию в кластерах AKS, а учетная запись службы, используемая панелью мониторинга, не имеет достаточных разрешений для доступа ко всем ресурсам (например, pod запрещено: User "system:serviceaccount:kube-system:kubernetes-dashboard" не может перечислять модули pod в пространстве имен "по умолчанию". Выполните следующую команду, чтобы предоставить необходимые разрешения для kubernetes-dashboard, а затем перезапустите панель мониторинга:

kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

Запуск панели мониторинга при начальной загрузке кластера Kubernetes с помощью kubeadm

Подробные инструкции по развертыванию и настройке панели мониторинга в кластере Kubernetes см. в документации по Kubernetes. Чтобы запустить панель мониторинга Kubernetes, выполните команду:

kubectl proxy

Следующие шаги

Дополнительные сведения о кластерах больших данных см. в статье "Что такое SQL Server Кластеры больших данных".