Partilhar via


Implantar um contêiner do Azure SQL Edge no Kubernetes

Importante

O Azure SQL Edge será desativado em 30 de setembro de 2025. Para obter mais informações e opções de migração, consulte o Aviso de aposentadoria.

Nota

O Azure SQL Edge não suporta mais a plataforma ARM64.

O SQL Edge do Azure pode ser implantado em um cluster do Kubernetes como um módulo do IoT Edge por meio do Azure IoT Edge em execução no Kubernetes ou como um pod de contêiner autônomo. Para o restante deste artigo, nos concentraremos na implantação de contêiner autônomo em um cluster Kubernetes. Para obter informações sobre como implantar o Azure IoT Edge no Kubernetes, consulte Azure IoT Edge no Kubernetes (visualização).

Este tutorial demonstra como configurar uma instância altamente disponível do Azure SQL Edge em um contêiner em um cluster Kubernetes.

  • Criar uma palavra-passe SA
  • Criar armazenamento
  • Criar a implantação
  • Conectar-se ao SQL Server Management Studio (SSMS)
  • 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 do Azure SQL 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 o papel de orquestrador de cluster. Quando uma instância do Azure SQL Edge em um contêiner falha, o orquestrador inicializa outra instância do contêiner que se anexa ao mesmo armazenamento persistente.

Diagrama do Azure SQL Edge em um cluster Kubernetes.

No diagrama anterior, azure-sql-edge é um recipiente em um pod. O Kubernetes orquestra os recursos no cluster. Um conjunto de réplicas garante que o pod seja recuperado automaticamente após uma falha de nó. Os aplicativos se conectam 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 falha azure-sql-edgedo .

No diagrama a seguir, o azure-sql-edge contêiner falhou. Como orquestrador, o Kubernetes garante 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 se conecta ao recriado azure-sql-edge.

Diagrama do Azure SQL Edge em um cluster Kubernetes após falha do pod.

No diagrama a seguir, o nó que hospeda o azure-sql-edge contêiner falhou. O orquestrador inicia o novo pod em um nó diferente e azure-sql-edge se reconecta ao mesmo armazenamento persistente. O serviço se conecta ao recriado azure-sql-edge.

Diagrama do Azure SQL Edge em um cluster Kubernetes após falha do nó.

Pré-requisitos

  • Cluster do Kubernetes

    • O tutorial requer um cluster Kubernetes. As etapas usam kubectl para gerenciar o cluster.

    • Para o propósito deste tutorial, estamos usando o Serviço Kubernetes do Azure para implantar o Azure SQL Edge. Consulte Implantar um cluster do Serviço Kubernetes do Azure (AKS) para criar e conectar-se a um cluster Kubernetes de nó único no AKS com kubectl.

    Nota

    Para proteger contra falha de nó, um cluster Kubernetes requer mais de um nó.

  • CLI do Azure

    • As instruções neste tutorial foram validadas em relação à CLI do Azure 2.10.1.

Criar um namespace Kubernetes para implantação do SQL Edge

Crie um novo namespace no cluster kubernetes. Esse namespace é usado para implantar o SQL Edge e todos os artefatos necessários. Para obter mais informações sobre namespaces do Kubernetes, consulte namespaces.

kubectl create namespace <namespace name>

Criar uma palavra-passe SA

Crie uma senha SA no cluster do Kubernetes. O Kubernetes pode gerenciar informações confidenciais de configuração, como 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 os seguintes passos:

  1. 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 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 do Kubernetes está no Azure. O tipo de conta de armazenamento é Standard_LRS. A declaração de volume persistente é denominada mssql-data. Os metadados de declaração de volume persistente incluem uma anotação conectando-os 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).

  2. 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> é o local onde você salvou o arquivo.

    O volume persistente é criado automaticamente como uma conta de armazenamento do Azure e vinculado à declaração de volume persistente.

    Captura de tela do comando de declaração de volume persistente.

  3. 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.

    Captura de tela dos metadados retornados, incluindo Volume.

  4. Verifique o volume persistente.

    kubectl describe pv -n <namespace name>
    

    kubectl Retorna metadados sobre o volume persistente que foi criado automaticamente e vinculado à declaração de volume persistente.

Criar a implantação

Neste exemplo, o contêiner que hospeda a instância do Azure SQL Edge é descrito como um objeto de implantação do 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 de Borda SQL do Azure. O manifesto faz referência à mssql-data declaração de volume persistente e ao mssql segredo que você já aplicou ao cluster do Kubernetes. O manifesto também descreve um serviço. Este serviço é um balanceador de carga. O balanceador de carga garante que o endereço IP persista após a recuperação da instância do SQL Edge do Azure.

  1. 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 Azure SQL 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, chamado sqldeployment.yaml. Atualize os seguintes valores:

    • value: "Developer"MSSQL_PID : Define o contêiner para executar o Azure SQL Edge Developer edition. A edição do desenvolvedor não é licenciada para dados de produção. Se a implantação for para uso em produção, defina a edição como Premium.

      Nota

      Para obter mais informações, consulte Como licenciar o Azure SQL Edge.

    • persistentVolumeClaim: Este valor requer uma entrada para claimName: que mapeie para o nome usado para a declaração de volume persistente. Este tutorial utiliza mssql-data.

    • name: MSSQL_SA_PASSWORD: Configura a imagem do 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 se refere ao segredo nomeado mssql para obter o valor da senha.

    Nota

    Usando o LoadBalancer tipo de serviço, a instância do Azure SQL Edge pode ser acessada remotamente (via Internet) na porta 1433.

    Salve o arquivo (por exemplo, sqledgedeploy.yaml).

  2. Crie a implantação.

    kubectl apply -f <Path to sqledgedeploy.yaml file> -n <namespace name>
    

    <Path to sqldeployment.yaml file> é o local onde você salvou o arquivo.

    Captura de tela do comando de implantação.

    A implantação e o serviço são criados. A instância do Azure SQL Edge está em um contêiner, conectada ao armazenamento persistente.

    Para visualizar o status do pod, digite kubectl get pod -n <namespace name>.

    Screenshot do comando get pod.

    Na imagem anterior, o pod tem um status de Running. Esse status indica que o contêiner está pronto. Este processo pode demorar vários minutos.

    Nota

    Depois que a implantação é criada, pode levar alguns minutos até que o pod fique visível. O atraso ocorre porque o cluster extrai a imagem do contêiner do SQL Edge do Azure do hub do Docker. Depois que a imagem for extraída pela primeira vez, as implantações subsequentes poderão ser mais rápidas se a implantação for para um nó que já tenha a imagem armazenada em cache.

  3. Verifique se os serviços estão em execução. Execute o seguinte comando:

    kubectl get services -n <namespace name>
    

    Este comando retorna os serviços que estão em execução, bem como os endereços IP internos e externos para os serviços. Observe o endereço IP externo do mssql-deployment serviço. Use esse endereço IP para se conectar ao SQL Edge do Azure.

    Captura de tela do comando get service.

    Para obter mais informações sobre o status dos objetos no cluster do Kubernetes, execute:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    

Conectar-se à instância do SQL Edge do Azure

Se você configurou o contêiner conforme descrito, poderá se conectar a um aplicativo de fora da rede virtual do Azure. Use a sa conta e o endereço IP externo para o serviço. Use a senha que você configurou como o segredo do Kubernetes. Para obter mais informações sobre como se conectar a uma instância do Azure SQL Edge, consulte Conectar-se ao Azure SQL Edge.

Verificar falha e recuperação

Para verificar a falha e a recuperação, você pode excluir o pod. Efetue os seguintes passos:

  1. Liste o pod que executa o Azure SQL Edge.

    kubectl get pods -n <namespace name>
    

    Observe o nome do pod que executa o Azure SQL Edge.

  2. Exclua 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 Azure SQL Edge e se conectar ao armazenamento persistente. Use kubectl get pods para verificar se um novo pod está implantado. Use kubectl get services para verificar se o endereço IP do novo contêiner é o mesmo.

Resumo

Neste tutorial, você aprendeu como implantar contêineres do SQL Edge do Azure em um cluster Kubernetes para alta disponibilidade.

  • Criar uma palavra-passe SA
  • Criar armazenamento
  • Criar a implantação
  • Conecte-se com o Azure SQL Edge Management Studios (SSMS)
  • Verificar falha e recuperação