Implantar a Instância Gerenciada SQL habilitada pelo Azure Arc usando as ferramentas do Kubernetes

Este artigo demonstra como implantar a Instância Gerenciada SQL do Azure para o Azure Arc com ferramentas do Kubernetes.

Pré-requisitos

Você já deve ter criado um controlador de dados.

Para criar uma instância gerenciada SQL usando as ferramentas do Kubernetes, você precisará ter as ferramentas do Kubernetes instaladas. Os exemplos neste artigo usarão kubectl, mas abordagens semelhantes podem ser usadas com outras ferramentas do Kubernetes, como o painel do Kubernetes, ocou helm se você estiver familiarizado com essas ferramentas e o Kubernetes yaml/json.

Instale a ferramenta kubectl

Descrição geral

Para criar uma Instância Gerenciada SQL, você precisa:

  1. Crie um segredo do Kubernetes para armazenar o login e a senha do administrador do sistema com segurança
  2. Criar um recurso personalizado de Instância Gerenciada SQL com base na definição de SqlManagedInstance recurso personalizado

Defina ambos os itens em um arquivo yaml.

Criar um arquivo yaml

Use o arquivo yaml de modelo como ponto de partida para criar seu próprio arquivo yaml de instância gerenciada SQL personalizada. Transfira este ficheiro para o seu computador local e abra-o num editor de texto. Use um editor de texto, como o VS Code , que ofereça suporte a realce de sintaxe e revestimento para arquivos yaml.

Nota

A partir da versão de fevereiro de 2022, ReadWriteMany a classe de armazenamento compatível com RWX precisa ser especificada para backups. Saiba mais sobre os modos de acesso. Se nenhuma classe de armazenamento for especificada para backups, a classe de armazenamento padrão no Kubernetes será usada. Se o padrão não for compatível com RWX, a instalação da Instância Gerenciada SQL pode não ter êxito.

Exemplo de arquivo yaml

Veja o seguinte exemplo de um arquivo 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

Personalizando o login e a senha

Um segredo do Kubernetes é armazenado como uma string codificada em base64 - uma para o nome de usuário e outra para a senha. Você precisará basear64 codificar um login e senha de administrador do sistema e colocá-los no local de espaço reservado em data.password e data.username. Não inclua os < símbolos e > fornecidos no modelo.

Nota

Para uma segurança ótima, o uso do valor sa não é permitido para o login. Siga a política de complexidade de senha.

Você pode usar uma ferramenta on-line para codificar base64 seu nome de usuário e senha desejados ou você pode usar ferramentas 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

Personalizando o nome

O modelo tem um valor de para o atributo name sql1 . Você pode alterar esse valor, mas ele deve incluir caracteres que seguem os padrões de nomenclatura DNS. Você também deve alterar o nome do segredo para corresponder. Por exemplo, se você alterar o nome da instância gerenciada SQL para , deverá alterar o nome do segredo de sql1-login-secret para sql2sql2-login-secret

Personalizando os requisitos de recursos

Você pode alterar os requisitos de recursos - a RAM e os limites e solicitações principais - conforme necessário.

Nota

Você pode saber mais sobre a governança de recursos do Kubernetes.

Requisitos para limites de recursos e solicitações:

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

Personalizando o tipo de serviço

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

Personalizando o armazenamento

Você pode personalizar as classes de armazenamento para que o armazenamento corresponda ao seu ambiente. Se você não tiver certeza de quais classes de armazenamento estão disponíveis, execute o comando kubectl get storageclass para exibi-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 - não que há uma classe de armazenamento que é o padrão. Opcionalmente, você também pode alterar o tamanho do seu armazenamento. Para obter mais informações, consulte Configuração de armazenamento.

Criando a instância gerenciada do SQL

Agora que você personalizou o arquivo yaml da instância gerenciada SQL, você pode criar a instância gerenciada 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

Monitorando o status de criação

A criação da instância gerenciada SQL levará alguns minutos para ser concluída. Você pode monitorar o progresso em outra janela do terminal com os seguintes comandos:

Nota

Os comandos de exemplo abaixo pressupõem que você criou uma instância gerenciada SQL chamada sql1 e um namespace Kubernetes com o nome arc. Se você usou um nome de instância gerenciado de namespace/SQL diferente, poderá substituir arc e sqlmi por seus nomes.

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

Você também pode verificar o status de criação de qualquer pod específico. Execute o kubectl describe pod .... Use este comando para solucionar problemas. Por exemplo:

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

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

Solucionar problemas de implantação

Se você encontrar algum problema com a implantação, consulte o guia de solução de problemas.

Conectar-se à Instância Gerenciada SQL habilitada pelo Azure Arc