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.
Visão geral
Para criar uma Instância Gerenciada de SQL, você precisa:
- Criar um segredo Kubernetes para armazenar o logon e a senha do administrador do sistema com segurança
- 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.
Conteúdo relacionado
Conectar-se à Instância Gerenciada de SQL habilitada pelo Azure Arc