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, oc
ou helm
se você estiver familiarizado com essas ferramentas e o Kubernetes yaml/json.
Descrição geral
Para criar uma Instância Gerenciada SQL, você precisa:
- Crie um segredo do Kubernetes para armazenar o login e a senha do administrador do sistema com segurança
- 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 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 - 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.
Conteúdos relacionados
Conectar-se à Instância Gerenciada SQL habilitada pelo Azure Arc