Compartilhar via


Implante a Instância Gerenciada de SQL habilitada pelo Azure Arc usando ferramentas do Kubernetes

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

Pré-requisitos

Você já precisa ter criado um controlador de dados do Azure Arc.

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

Instalar ferramenta kubectl

Visão geral

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

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

Defina ambos esses itens em um arquivo YAML.

Criar um arquivo yaml

Use o arquivo yaml do modelo como um ponto de partida para criar seu próprio arquivo yaml de instância gerenciada de SQL personalizada. Baixe esse arquivo no computador local e abra-o em um editor de texto. Use um editor de texto como VS Code que suportam realce de sintaxe e lint para arquivos yaml.

Observação

A partir da classe de armazenamento compatível com fevereiro de 2022 versão, ReadWriteMany (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 em Kubernetes será usada. Se o padrão não for compatível com RWX, a instalação da Instância Gerenciada de SQL poderá não ter sucesso.

Exemplo de arquivo yaml

Veja o exemplo a seguir 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

Personalização do logon e da senha

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

Observação

Para segurança ideal, o uso do valor sa não é permitido para o logon. Siga a política de complexidade de senha.

Você pode usar uma ferramenta online para codificar em base64 o nome de usuário e a senha desejados ou usar ferramentas de 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 sql1 para o atributo de nome. Você pode alterar esse valor, mas 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 de SQL para sql2, deverá 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 de RAM e de núcleo e as solicitações-conforme necessário.

Observação

Você pode aprender mais sobre a Governança de recursos do kubernetes.

Requisitos para limites e solicitações de recursos:

  • O valor do limite de núcleos é necessário para fins de cobrança.
  • O restante das solicitações e dos limites de recursos são opcionais.
  • O limite e a solicitação de núcleos 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 da 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 uma 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. Um número de porta aleatório será atribuído.

Personalizando armazenamento

Você pode personalizar as classes de armazenamento para armazenamento para corresponder 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 chamadadefault -, não que haja uma classe de armazenamento que seja o padrão. Opcionalmente, você também pode alterar o tamanho do seu armazenamento. Para obter mais informações, confira configuração de armazenamento.

Criando a instância gerenciada do SQL

Agora que personalização do arquivo yaml da instância gerenciada do SQL, você pode criar a instância gerenciada do 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 do SQL levará alguns minutos para ser concluída. Você pode monitorar o progresso em outra janela do terminal com os seguintes comandos:

Observação

Os comandos de exemplo abaixo pressupõem que foi criado um uma instância gerenciada do SQL chamada sql1 e um namespace do Kubernetes com o nome arc. Se você usou um nome de instância gerenciada de namespace/SQL diferente, você pode 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. Execute kubectl describe pod .... Use esse comando para solucionar quaisquer problemas. Por exemplo:

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

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

Solucionar problemas de implantação

Se houver qualquer problema com a implantação, consulte o Guia de solução de problemas.

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