Solucionar problemas do Kubernetes em Clusters de Big Data do SQL Server
Aplica-se a: SQL Server 2019 (15.x)
Importante
O complemento Clusters de Big Data do Microsoft SQL Server 2019 será desativado. O suporte para Clusters de Big Data do SQL Server 2019 será encerrado em 28 de fevereiro de 2025. Todos os usuários existentes do SQL Server 2019 com Software Assurance terão suporte total na plataforma e o software continuará a ser mantido por meio de atualizações cumulativas do SQL Server até esse momento. Para obter mais informações, confira a postagem no blog de anúncio e as opções de Big Data na plataforma do Microsoft SQL Server.
Este artigo descreve vários comandos úteis do Kubernetes que você pode usar para monitorar e solucionar problemas de Clusters de Big Data do SQL Server 2019. Ele mostra como exibir detalhes de um pod ou outros artefatos do Kubernetes que estão localizados no cluster de Big Data. Este artigo também aborda tarefas comuns, como copiar arquivos bidirecionalmente em um contêiner que executa um dos serviços de cluster de Big Data do SQL Server.
Dica
Para monitorar o status de componentes de Clusters de Big Data, você pode usar comandos azdata bdc status ou notebooks de solução de problemas internos fornecidos com o Azure Data Studio.
Dica
Execute os comandos kubectl a seguir em um computador cliente Windows (cmd ou PS) ou Linux (Bash). Eles exigem a autenticação anterior no cluster e um contexto de cluster para execução. Por exemplo, para um cluster do AKS criado anteriormente, você pode executar az aks get-credentials --name <aks_cluster_name> --resource-group <azure_resource_group_name>
para baixar o arquivo de configuração de cluster do Kubernetes e definir o contexto do cluster.
Obter o status de pods
Use o comando kubectl get pods
para obter o status de pods no cluster para todos os namespaces ou o namespace do cluster de Big Data. As seções a seguir mostram exemplos de ambos.
Mostrar o status de todos os pods no cluster do Kubernetes
Execute o comando a seguir para obter todos os pods e os status, incluindo os pods que fazem parte do namespace no qual os pods de clusters de Big Data do SQL Server são criados:
kubectl get pods --all-namespaces
Mostrar o status de todos os pods no cluster de Big Data do SQL Server
Use o parâmetro -n
para especificar um namespace específico. Observe que os pods de clusters de Big Data do SQL Server são criados em um namespace criado no momento de inicialização do cluster com base no nome do cluster especificado no arquivo de configuração de implantação. O nome padrão, mssql-cluster
, é usado aqui.
kubectl get pods -n mssql-cluster
Você deverá ver uma saída semelhante à seguinte lista para um cluster de Big Data em execução:
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
Observação
Durante a implantação, os pods com um STATUS igual a ContainerCreating ainda estão sendo recebidos. Se a implantação travar por qualquer motivo, isso poderá dar uma ideia da possível causa do problema. Examine também a coluna PRONTO. Isso informa quantos contêineres foram iniciados no pod. Observe que as implantações podem levar 30 minutos ou mais, dependendo da configuração e da rede. Grande parte desse tempo é gasto no download das imagens de contêiner para componentes diferentes.
Obter detalhes do pod
Execute o comando a seguir para obter uma descrição detalhada de um pod específico na saída de formato JSON. Ele inclui detalhes, como o nó atual do Kubernetes no qual o pod é colocado, os contêineres em execução no pod e a imagem usada para inicializar os contêineres. Ele também mostra outros detalhes, como rótulos, status e declarações de volumes persistentes associados ao pod.
kubectl describe pod <pod_name> -n <namespace_name>
O seguinte exemplo mostra os detalhes do pod master-0
em um cluster de Big Data chamado mssql-cluster
:
kubectl describe pod master-0 -n mssql-cluster
Caso ocorram erros, às vezes, você poderá ver o erro nos eventos recentes do pod.
Obter os logs do pod
Você poderá recuperar os logs para contêineres em execução em um pod. O seguinte comando recupera os logs de todos os contêineres em execução no pod chamado master-0
e os gera em um arquivo chamado master-0-pod-logs.txt
:
kubectl logs master-0 --all-containers=true -n mssql-cluster > master-0-pod-logs.txt
Obter o status de serviços
Execute o comando a seguir para obter detalhes dos serviços de clusters de Big Data. Esses detalhes incluem o tipo e os IPs associados aos respectivos serviços e às respectivas portas. Observe que os serviços de clusters de Big Data do SQL Server são criados em um namespace criado no momento de inicialização do cluster com base no nome do cluster especificado no arquivo de configuração de implantação.
kubectl get svc -n <namespace_name>
O seguinte exemplo mostra o status dos serviços em um cluster de Big Data chamado mssql-cluster
:
kubectl get svc -n mssql-cluster
Os seguintes serviços dão suporte a conexões externas com o cluster de Big Data:
Serviço | Descrição |
---|---|
master-svc-external | Fornece acesso à instância mestra. (EXTERNAL-IP,31433 e o usuário SA) |
controller-svc-external | Dá suporte a ferramentas e clientes que gerenciam o cluster. |
gateway-svc-external | Fornece acesso ao gateway do HDFS/Spark. (EXTERNAL-IP e o usuário <AZDATA_USERNAME> )1 |
appproxy-svc-external | Dá suporte a cenários de implantação de aplicativos. |
1 A partir do SQL Server 2019 (15.x) CU 5, quando você implanta um novo cluster com a autenticação básica, todos os pontos de extremidade, incluindo o gateway, usam AZDATA_USERNAME
e AZDATA_PASSWORD
. Os pontos de extremidade em clusters que são atualizados para CU 5 continuam usando root
como o nome de usuário para se conectar ao ponto de extremidade do gateway. Essa alteração não se aplica às implantações que usam a autenticação do Active Directory. Confira Credenciais para acessar serviços por meio do ponto de extremidade do gateway nas notas sobre a versão.
Dica
Essa é uma maneira de exibir os serviços com kubectl, mas também é possível usar o comando azdata bdc endpoint list
para exibir esses pontos de extremidade. Para obter mais informações, confira Obter pontos de extremidade de cluster de Big Data.
Obter detalhes do serviço
Execute este comando para obter uma descrição detalhada de um serviço na saída de formato JSON. Ele incluirá detalhes como rótulos, seletores, IP, IP externo (se o serviço for do tipo LoadBalancer), porta etc.
kubectl describe service <service_name> -n <namespace_name>
O seguinte exemplo recupera detalhes do serviço master-svc-external:
kubectl describe service master-svc-external -n mssql-cluster
Copiar arquivos
Caso precise copiar arquivos do contêiner para o computador local, use o comando kubectl cp
com a seguinte sintaxe:
kubectl cp <pod_name>:<source_file_path> -c <container_name> -n <namespace_name> <target_local_file_path>
Da mesma forma, use kubectl cp
para copiar arquivos do computador local para um contêiner específico.
kubectl cp <source_local_file_path> <pod_name>:<target_container_path> -c <container_name> -n <namespace_name>
Copiar arquivos de um contêiner
O seguinte exemplo copia os arquivos de log de SQL Server do contêiner para o caminho ~/temp/sqlserverlogs
no computador local (neste exemplo, o computador local é um cliente Linux):
kubectl cp master-0:/var/opt/mssql/log -c mssql-server -n mssql-cluster ~/tmp/sqlserverlogs
Copiar arquivos para o contêiner
O exemplo a seguir copia o arquivo AdventureWorks2022
do computador local para o contêiner da instância mestra do SQL Server (mssql-server
) no pod master-0
. O arquivo é copiado para o diretório /tmp
no contêiner.
kubectl cp ~/Downloads/AdventureWorks2022.bak master-0:/tmp -c mssql-server -n mssql-cluster
Forçar a exclusão de um pod
Não é recomendável forçar a exclusão de um pod. Porém, para testar a disponibilidade, a resiliência ou a persistência de dados, você pode excluir um pod para simular uma falha de pod com o comando kubectl delete pods
.
kubectl delete pods <pod_name> -n <namespace_name> --grace-period=0 --force
O seguinte exemplo exclui o pod do pool de armazenamento, storage-0-0
:
kubectl delete pods storage-0-0 -n mssql-cluster --grace-period=0 --force
Obter o IP do pod
Para fins de solução de problemas, talvez seja necessário obter o IP do nó em que um pod está sendo executado. Para obter o endereço IP, use o comando kubectl get pods
com a seguinte sintaxe:
kubectl get pods <pod_name> -o yaml -n <namespace_name> | grep hostIP
O seguinte exemplo obtém o endereço IP do nó em que o pod master-0
está em execução:
kubectl get pods master-0 -o yaml -n mssql-cluster | grep hostIP
Painel do Kubernetes
Inicie o painel do Kubernetes para obter mais informações sobre o cluster. As seções a seguir explicam como iniciar o painel do Kubernetes no AKS e do Kubernetes inicializado usando o kubeadm.
Iniciar o painel quando o cluster estiver em execução no AKS
Para iniciar a execução do painel do Kubernetes:
az aks browse --resource-group <azure_resource_group> --name <aks_cluster_name>
Observação
Você verá o seguinte erro: Não é possível ouvir na porta 8001: Falha na criação de todos os ouvintes com os seguintes erros: Não é possível criar o ouvinte: Erro ao escutar na TCP4 127.0.0.1:8001: >bind: Normalmente, apenas um tipo de uso de cada endereço de soquete (endereço de rede/protocolo/porta) é permitido. Não é possível criar o ouvinte: Erro ao escutar na TCP6: endereço [[::1]]:8001: porta ausente no endereço >: Não é possível escutar em nenhuma das portas solicitadas: [{8001 9090}], verifique se você não iniciou o dashboard em outra janela.
Ao iniciar o painel no navegador, você poderá obter avisos de permissão devido ao RBAC estar habilitado por padrão em clusters do AKS. Além disso, a conta de serviço usada pelo painel não tem permissões suficientes para acessar todos os recursos (por exemplo, pods são proibidos: O usuário "system:serviceaccount:kube-system:kubernetes-dashboard" não pode listar os pods no namespace "padrão" ). Execute o seguinte comando para conceder as permissões necessárias ao kubernetes-dashboard
e, em seguida, reinicie o painel:
kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
Iniciar o dashboard quando o cluster do Kubernetes for inicializado usando o kubeadm
Para obter instruções detalhadas sobre como implantar e configurar o painel no cluster do Kubernetes, confira a documentação do Kubernetes. Para iniciar o painel do Kubernetes, execute este comando:
kubectl proxy
Próximas etapas
Para obter mais informações sobre clusters de Big Data, confira O que são Clusters de Big Data do SQL Server.