Partilhar via


Implementar Instância Gerida de SQL ativada pelo Azure Arc usando ferramentas de Kubernetes

Este artigo demonstra como implementar o Azure SQL Managed Instance para o Azure Arc com ferramentas de Kubernetes.

Prerequisites

Já deveria ter criado um controlador de dados.

Para criar uma instância gerida de SQL utilizando ferramentas Kubernetes, precisará de ter as ferramentas Kubernetes instaladas. Os exemplos neste artigo irão usar kubectl, mas abordagens similares poderiam ser usadas com outras ferramentas do Kubernetes, como o painel do Kubernetes, oc, ou helm, se estiver familiarizado com essas ferramentas e os ficheiros yaml/json do Kubernetes.

Install the kubectl tool

Overview

Para criar uma Instância Gerida de SQL, é necessário:

  1. Crie um segredo no Kubernetes para armazenar com segurança o login e a palavra-passe do administrador do sistema
  2. Crie um recurso personalizado de instância gerida do SQL com base na definição de recurso personalizado SqlManagedInstance

Defina ambos os itens num ficheiro yaml.

Crie um ficheiro yaml

Use o ficheiro template yaml como ponto de partida para criar o seu próprio ficheiro yaml de instância gerida SQL personalizada. Faça o download deste ficheiro para o seu computador local e abra-o num editor de texto. Utilize um editor de texto como o VS Code que suporte realce de sintaxe e análise estática para arquivos yaml.

Nota

A partir da versão de fevereiro de 2022, a classe de armazenamento capaz de ReadWriteMany (RWX) necessita ser especificada para backups. Saiba mais sobre access modes. Se nenhuma classe de armazenamento for especificada para backups, a classe de armazenamento padrão no Kubernetes será usada. Se a predefinição não for capaz de RWX, a instalação do SQL Managed Instance pode não ser bem-sucedida.

Ficheiro yaml de exemplo

Veja o seguinte exemplo de um ficheiro yaml

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: sql1-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v12
kind: SqlManagedInstance
metadata:
  name: sql1
  annotations:
    exampleannotation1: exampleannotationvalue1
    exampleannotation2: exampleannotationvalue2
  labels:
    examplelabel1: examplelabelvalue1
    examplelabel2: examplelabelvalue2
spec:
  dev: true #options: [true, false]
  licenseType: LicenseIncluded #options: [LicenseIncluded, BasePrice].  BasePrice is used for Azure Hybrid Benefits.
  tier: GeneralPurpose #options: [GeneralPurpose, BusinessCritical]
  security:
    adminLoginSecret: sql1-login-secret
  scheduling:
    default:
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
  services:
    primary:
      type: LoadBalancer
  storage:
    #backups:
    #  volumes:
    #  - className: azurefile # Backup volumes require a ReadWriteMany (RWX) capable storage class
    #    size: 5Gi
    data:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    datalogs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    logs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi

Personalização do login e da senha

Um segredo no Kubernetes é armazenado como uma string codificada em base64 - uma para o nome de utilizador e outra para a palavra-passe. Você precisará codificar um login e senha de administrador de sistema em base64 e colocá-los na localização do marcador em data.password e data.username. Do not include the < and > symbols provided in the template.

Nota

Para segurança ideal, não é permitido usar o valor sa para o login. Siga a política de complexidade de palavras-passe.

Pode utilizar uma ferramenta online para codificar em base64 o nome de utilizador e a palavra-passe desejados, ou pode usar ferramentas de linha de comando (CLI) dependendo da sua plataforma.

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

Personalizar o nome

O modelo tem um valor de sql1 para o atributo de nome. Pode alterar este valor, mas deve incluir caracteres que sigam os padrões de nomenclatura DNS. Também deve alterar o nome do segredo para corresponder. Por exemplo, se alterar o nome da instância gerida do SQL para sql2, deve alterar o nome do segredo de sql1-login-secret para sql2-login-secret

Personalizando os requisitos de recursos

Você pode alterar os requisitos de recursos - os limites e pedidos de RAM e de núcleos - conforme necessário.

Nota

Pode saber mais sobre governança de recursos Kubernetes.

Requisitos para limites e solicitações de recursos:

  • O valor limite de núcleos é necessário para fins de faturação.
  • O restante dos pedidos de recursos e limites são opcionais.
  • O limite e o pedido de núcleos devem ser um valor inteiro positivo, se especificado.
  • É necessário um mínimo de 1 núcleo para o pedido de núcleos, se especificado.
  • O formato do valor da memória segue a notação do Kubernetes.
  • É necessário um mínimo de 2 GB para o pedido de memória, se especificado.
  • Como diretriz geral, deve ter 4 GB de RAM para cada núcleo para casos de uso em produção.

Personalização do tipo de serviço

O tipo de serviço pode ser alterado para NodePort, se desejado. Um número de porta aleatório será atribuído.

Personalização do armazenamento

Step 2: Provide the improved translation. pt-PT: Pode personalizar as classes de armazenamento para adaptar ao seu ambiente. Se não tiver a certeza de quais classes de armazenamento estão disponíveis, execute o comando kubectl get storageclass para visualizá-las.

O modelo tem um valor padrão de default.

Por exemplo

storage:
    data:
      volumes:
      - className: default 

Este exemplo significa que há uma classe de armazenamento chamada default, e não que há uma classe de armazenamento que é a padrão. Também pode opcionalmente alterar o tamanho do seu armazenamento. Para mais informações, veja a configuração de armazenamento.

Criando a instância gerida do SQL

Agora que personalizou o ficheiro yaml da instância gerida de SQL, pode criar a instância gerida de SQL executando o seguinte comando:

kubectl create -n <your target namespace> -f <path to your yaml file>

#Example
#kubectl create -n arc -f C:\arc-data-services\sqlmi.yaml

Monitorização do estado de criação

Criar a instância gerida do SQL demorará alguns minutos a concluir. Pode monitorizar o progresso numa outra janela de terminal com os seguintes comandos:

Nota

Os comandos de exemplo abaixo assumem que você criou uma instância gerida de SQL chamada sql1 e um namespace do Kubernetes com o nome arc. Se utilizou um nome de namespace/instância gerida SQL diferente, pode substituir arc e sqlmi pelos seus nomes.

kubectl get sqlmi/sql1 --namespace arc
kubectl get pods --namespace arc

Pode também verificar o estado de criação de qualquer pod em particular. Executar kubectl describe pod .... Utilize este comando para resolver quaisquer problemas. For example:

kubectl describe pod/<pod name> --namespace arc

#Example:
#kubectl describe pod/sql1-0 --namespace arc

Resolver problemas de implementação

Se encontrar quaisquer problemas com a implementação, por favor consulte o guia de resolução de problemas.

Conectar à Instância Gerida de SQL ativada pelo Azure Arc