Implantar um contêiner do SQL do Azure no Edge no Kubernetes
Importante
O SQL do Azure no Edge será desativado em 30 de setembro de 2025. Para obter mais informações e opções de migração, veja o Aviso de aposentadoria.
Observação
O SQL do Azure no Edge encerrou o suporte à plataforma ARM64.
O SQL do Azure no Edge pode ser implantado em um cluster de Kubernetes como um módulo do IoT Edge por meio do SQL do Azure no Edge em execução no Kubernetes ou como um pod de contêiner autônomo. No restante deste artigo, vamos nos concentrar na implantação de um contêiner autônomo em um cluster de Kubernetes. Para obter informações sobre como implantar o Azure IoT Edge no Kubernetes, confira Azure IoT Edge no Kubernetes (versão prévia).
Este tutorial demonstra como configurar uma instância do SQL do Azure no Edge altamente disponível em um contêiner em um cluster de Kubernetes.
- Criar uma senha SA
- Criar armazenamento
- Criar a implantação
- Conectar-se com o SSMS (SQL Server Management Studio)
- Verificar falha e recuperação
O Kubernetes 1.6 e posterior tem suporte para classes de armazenamento, declarações de volume persistentes e o tipo de volume de disco do Azure. Você pode criar e gerenciar suas instâncias de SQL do Azure no Edge nativamente no Kubernetes. O exemplo neste artigo mostra como criar uma implantação para obter uma configuração de alta disponibilidade semelhante a uma instância de cluster de failover de disco compartilhado. Nessa configuração, o Kubernetes desempenha a função do orquestrador de cluster. Quando uma instância de SQL do Azure no Edge em um contêiner falha, o orquestrador inicializa outra instância do contêiner que é anexada ao mesmo armazenamento persistente.
No diagrama anterior, azure-sql-edge
é um contêiner em um Pod. O Kubernetes orquestra os recursos no cluster. Um conjunto de réplicas verifica se o pod está recuperado automaticamente após uma falha de nó. Os aplicativos conectam-se ao serviço. Nesse caso, o serviço representa um balanceador de carga que hospeda um endereço IP que permanece o mesmo após a falha do azure-sql-edge
.
No diagrama a seguir, o contêiner azure-sql-edge
falhou. Como o orquestrador, o Kubernetes garante que a contagem correta de instâncias íntegras no conjunto de réplicas e inicia um novo contêiner de acordo com a configuração. O orquestrador inicia um novo pod no mesmo nó e azure-sql-edge
se reconecta ao mesmo armazenamento persistente. O serviço conecta-se ao azure-sql-edge
recriado.
No diagrama a seguir, o nó que hospeda o contêiner azure-sql-edge
falhou. O orquestrador inicia o novo pod em um nó diferente e azure-sql-edge
reconecta-se ao mesmo armazenamento persistente. O serviço conecta-se ao azure-sql-edge
recriado.
Pré-requisitos
Cluster do Kubernetes
O tutorial requer um cluster do Kubernetes. As etapas usam kubectl para gerenciar o cluster.
Para os fins deste tutorial, usaremos o Serviço de Kubernetes do Azure para implantar o SQL do Azure no Edge. Confira Implantar um cluster do AKS (Serviço de Kubernetes do Azure) para criar e conectar-se a um cluster Kubernetes de nó único no AKS com
kubectl
.
Observação
Para proteger contra falhas de nó, um cluster Kubernetes requer mais de um nó.
CLI do Azure
- As instruções neste tutorial foram validadas com relação à CLI do Azure 2.10.1.
Criar um namespace do Kubernetes para implantação do SQL no Edge
Crie um namespace no cluster de kubernetes. Esse namespace é usado para implantar o SQL no Edge e todos os artefatos necessários. Para obter mais informações sobre os namespaces do Kubernetes, confira Namespaces.
kubectl create namespace <namespace name>
Criar uma senha SA
Crie a senha SA no cluster Kubernetes. O Kubernetes pode gerenciar informações de configuração confidenciais, por exemplo, senhas como segredos.
O comando a seguir cria uma senha para a conta SA:
kubectl create secret generic mssql --from-literal=MSQL_SA_PASSWORD="<password>" -n <namespace name>
Substitua MyC0m9l&xP@ssw0rd
por uma senha complexa.
Criar armazenamento
Configure um volume persistente e uma declaração de volume persistente no cluster Kubernetes. Conclua as seguintes etapas:
Crie um manifesto para definir a classe de armazenamento e a declaração de volume persistente. O manifesto especifica o provisionador de armazenamento, os parâmetros e a política de recuperação. O cluster Kubernetes usa esse manifesto para criar o armazenamento persistente.
O exemplo de yaml a seguir define uma classe de armazenamento e uma declaração de volume persistente. O provisionador de classe de armazenamento é
azure-disk
, porque esse cluster Kubernetes está no Azure. O tipo de conta de armazenamento éStandard_LRS
. A declaração de volume persistente é denominadamssql-data
. Os metadados da declaração de volume persistente incluem uma anotação que os conecta de volta à classe de armazenamento.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azure-disk provisioner: kubernetes.io/azure-disk parameters: storageaccounttype: Standard_LRS kind: managed --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mssql-data annotations: volume.beta.kubernetes.io/storage-class: azure-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi
Salve o arquivo (por exemplo, pvc.yaml).
Crie a declaração de volume persistente no Kubernetes.
kubectl apply -f <Path to pvc.yaml file> -n <namespace name>
<Path to pvc.yaml file>
é a localização em que você salvou o arquivo.O volume persistente é criado automaticamente como uma conta de armazenamento do Azure e associado à declaração de volume persistente.
Verifique a declaração de volume persistente.
kubectl describe pvc <PersistentVolumeClaim> -n <name of the namespace>
<PersistentVolumeClaim>
é o nome da declaração de volume persistente.Na etapa anterior, a declaração de volume persistente é denominada
mssql-data
. Para ver os metadados sobre a declaração de volume persistente, execute o seguinte comando:kubectl describe pvc mssql-data -n <namespace name>
Os metadados retornados incluem um valor chamado
Volume
. Esse valor é mapeado para o nome do blob.Verifique o volume persistente.
kubectl describe pv -n <namespace name>
kubectl
retorna metadados sobre o volume persistente que foi criado automaticamente e associado à declaração de volume persistente.
Criar a implantação
Neste exemplo, o contêiner que hospeda a instância do SQL do Azure no Edge é descrito como um objeto de implantação Kubernetes. A implantação cria um conjunto de réplicas. O conjunto de réplicas cria o pod.
Nesta etapa, crie um manifesto para descrever o contêiner com base na imagem do Docker do SQL do Azure no Edge. O manifesto referencia a declaração de volume persistente do mssql-data
e o segredo mssql
que você já aplicou ao cluster Kubernetes. O manifesto também descreve um serviço. Esse serviço é um balanceador de carga. O balanceador de carga garante que o endereço IP persiste após a recuperação da instância do SQL do Azure no Edge.
Crie um manifesto (um arquivo YAML) para descrever a implantação. O exemplo a seguir descreve uma implantação, incluindo um contêiner baseado na imagem de contêiner do SQL do Azure no Edge.
apiVersion: apps/v1 kind: Deployment metadata: name: sqledge-deployment spec: replicas: 1 selector: matchLabels: app: sqledge template: metadata: labels: app: sqledge spec: volumes: - name: sqldata persistentVolumeClaim: claimName: mssql-data containers: - name: azuresqledge image: mcr.microsoft.com/azure-sql-edge:latest ports: - containerPort: 1433 volumeMounts: - name: sqldata mountPath: /var/opt/mssql env: - name: MSSQL_PID value: "Developer" - name: ACCEPT_EULA value: "Y" - name: MSSQL_SA_PASSWORD valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD - name: MSSQL_AGENT_ENABLED value: "TRUE" - name: MSSQL_COLLATION value: "SQL_Latin1_General_CP1_CI_AS" - name: MSSQL_LCID value: "1033" terminationGracePeriodSeconds: 30 securityContext: fsGroup: 10001 --- apiVersion: v1 kind: Service metadata: name: sqledge-deployment spec: selector: app: sqledge ports: - protocol: TCP port: 1433 targetPort: 1433 name: sql type: LoadBalancer
Copie o código anterior para um novo arquivo, denominado
sqldeployment.yaml
. Atualize os seguintes valores:MSSQL_PID
value: "Developer"
: Define o contêiner para executar o SQL do Azure no Edge Developer Edition. A edição Developer não é licenciada para dados de produção. Se a implantação for para uso em produção, defina a edição comoPremium
.Observação
Para saber mais, confira Como licenciar o SQL do Azure no Edge.
persistentVolumeClaim
: esse valor requer uma entrada paraclaimName:
mapeada para o nome usado para a declaração de volume persistente. Este tutorial usamssql-data
.name: MSSQL_SA_PASSWORD
: configura a imagem de contêiner para definir a senha SA, conforme definido nesta seção.valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD
Quando o Kubernetes implanta o contêiner, ele refere-se ao segredo chamado
mssql
para obter o valor da senha.
Observação
Usando o tipo de serviço
LoadBalancer
, a instância do SQL do Azure no Edge pode ser acessada remotamente (pela Internet) na porta 1433.Salve o arquivo (por exemplo,
sqledgedeploy.yaml
).Crie a implantação.
kubectl apply -f <Path to sqledgedeploy.yaml file> -n <namespace name>
<Path to sqldeployment.yaml file>
é a localização em que você salvou o arquivo.A implantação e o serviço são criados. A instância do SQL do Azure no Edge está em um contêiner, conectada ao armazenamento persistente.
Para exibir o status do pod, digite
kubectl get pod -n <namespace name>
.Na imagem anterior, o pod tem um status de
Running
. Esse status indica que o contêiner está pronto. Isso pode levar alguns minutos.Observação
Após a criação da implantação, pode levar alguns minutos antes que o pod fique visível. O atraso é porque o cluster extrai a imagem de contêiner do SQL do Azure no Edge do Docker Hub. Depois o pull da imagem for efetuado pela primeira vez, implantações subsequentes poderão ser mais rápidas se a implantação for para um nó que já tem a imagem armazenada em cache.
Verifique se os serviços estão em execução. Execute o comando a seguir:
kubectl get services -n <namespace name>
Esse comando retorna serviços em execução, assim como endereços IP internos e externos para os serviços. Observe o endereço IP externo do serviço
mssql-deployment
. Use este endereço IP para se conectar ao SQL do Azure no Edge.Para saber mais sobre o status dos objetos no cluster Kubernetes, execute:
az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
Conectar-se à instância do SQL do Azure no Edge
Se você tiver configurado o contêiner, conforme descrito, poderá conectar-se com um aplicativo de fora da rede virtual do Azure. Use a conta sa
e o endereço IP externo para o serviço. Use a senha que você configurou como o segredo Kubernetes. Para obter mais informações sobre como se conectar a uma instância do SQL do Azure no Edge, confira Conectar-se ao SQL do Azure no Edge.
Verificar falha e recuperação
Para verificar a falha e a recuperação, exclua o pod. Execute as seguintes etapas:
Listar o pod que executa o SQL do Azure no Edge.
kubectl get pods -n <namespace name>
Anote o nome do pod que está executando o SQL do Azure no Edge.
Excluir o pod.
kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
sqledge-deployment-7df66c9999-rc9xl
é o valor retornado da etapa anterior para o nome do pod.
O Kubernetes recria automaticamente o pod para recuperar uma instância do SQL do Azure no Edge e conectar-se ao armazenamento persistente. Use kubectl get pods
para verificar se um novo pod foi implantado. Use kubectl get services
para verificar se o endereço IP do novo contêiner é o mesmo.
Resumo
Neste tutorial, você aprendeu a implantar contêineres do SQL do Azure no Edge em um cluster Kubernetes para alta disponibilidade.
- Criar uma senha SA
- Criar armazenamento
- Criar a implantação
- Conectar-se ao SSMS (Management Studio do SQL do Azure no Edge)
- Verificar falha e recuperação