Implementación de SQL Managed Instance habilitada por Azure Arc usando herramientas de Kubernetes
En este artículo se muestra cómo implementar Azure SQL Managed Instance para Azure Arc con las herramientas de Kubernetes.
Requisitos previos
Ya debería haber creado un controlador de datos.
Para crear una instancia de SQL Managed Instance mediante las herramientas de Kubernetes, debe tener instaladas dichas herramientas. En los ejemplos de este artículo se usará kubectl
, pero se podrían emplear enfoques similares con otras herramientas de Kubernetes como el panel de Kubernetes, oc
o helm
si está familiarizado con esas herramientas y los formatos YAML y JSON de Kubernetes.
Instalación de la herramienta kubectl
Información general
Para crear una instancia de SQL Managed Instance, debe hacer lo siguiente:
- Crear un secreto de Kubernetes para almacenar el inicio de sesión y la contraseña del administrador del sistema de forma segura
- Crear un recurso personalizado de SQL Managed Instance basado en la definición de recurso personalizado
SqlManagedInstance
Defina ambos elementos en un archivo yaml.
Creación de un archivo YAML
Use el archivo yaml de plantilla como punto de partida para crear su propio archivo yaml de SQL Managed Instance personalizado. Descargue este archivo en el equipo local y ábralo en un editor de texto. Use un editor de texto como VS Code que admita el linting y el resaltado de la sintaxis en archivos yaml.
Nota:
A partir de la versión de febrero de 2022, es necesario especificar una clase de almacenamiento compatible con ReadWriteMany
(RWX) para las copias de seguridad. Obtenga más información sobre los modos de acceso.
Si no se especifica ninguna clase de almacenamiento para las copias de seguridad, se usa la clase de almacenamiento predeterminada en Kubernetes. Si el valor predeterminado no es compatible con RWX, puede que la instalación de SQL Managed Instance no se realice correctamente.
Archivo yaml de ejemplo
Vea el siguiente ejemplo de un archivo 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
Personalización del inicio de sesión y la contraseña
Un secreto de Kubernetes se almacena como una cadena codificada en Base64, una para el nombre de usuario y otra para la contraseña. Deberá codificar en Base64 el inicio de sesión y la contraseña del administrador del sistema y colocarlos en la ubicación del marcador de posición en data.password
y data.username
. No incluya los símbolos <
y >
que se proporcionan en la plantilla.
Nota:
Para lograr una seguridad óptima, no se permite usar el valor sa
para el inicio de sesión.
Siga la directiva de complejidad de la contraseña.
Puede usar una herramienta en línea para codificar en Base64 el nombre de usuario y la contraseña que desee, o bien puede usar las herramientas de la CLI, en función de la 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
Personalización del nombre
La plantilla tiene un valor de sql1
para el atributo de nombre. Puede cambiar este valor, pero deben incluir caracteres que sigan los estándares de nomenclatura de DNS. También debe cambiar el nombre del secreto para que coincida. Por ejemplo, si cambia el nombre de la instancia de SQL Managed Instance a sql2
, debe cambiar el nombre del secreto de sql1-login-secret
a sql2-login-secret
.
Personalización de los requisitos de recursos
Puede cambiar los requisitos de los recursos (solicitudes y límites de RAM y núcleo), según sea necesario.
Nota:
Puede obtener más información sobre la gobernanza de recursos de Kubernetes.
Requisitos para las solicitudes y los límites de recursos:
- El valor de límite de núcleos es necesario para la facturación.
- El resto de límites y solicitudes de recursos son opcionales.
- La solicitud y el límite de núcleos deben ser un valor entero positivo, si se especifican.
- Se requiere un mínimo de 1 núcleo para la solicitud de núcleos, si se especifica.
- El formato del valor de memoria sigue la notación de Kubernetes.
- Se requiere un mínimo de 2 GB para la solicitud de memoria, si se especifica.
- Como norma general, debe tener 4 GB de RAM por cada núcleo para los casos de uso de producción.
Personalización del tipo de servicio
Si lo desea, el tipo de servicio se puede cambiar a NodePort. Se asignará un número de puerto aleatorio.
Personalización del almacenamiento
Puede personalizar las clases de almacenamiento para que el almacenamiento coincida con su entorno. Si no está seguro de qué clases de almacenamiento están disponibles, ejecute el comando kubectl get storageclass
para verlas.
La plantilla tiene el valor predeterminado de default
.
Por ejemplo
storage:
data:
volumes:
- className: default
Este ejemplo refleja que existe una clase de almacenamiento denominada default
, no que exista una clase de almacenamiento que sea la predeterminada. También tiene la opción de cambiar el tamaño del almacenamiento. Para más información, consulte la configuración del almacenamiento.
Creación de la instancia de SQL Managed Instance
Ahora que ha personalizado el archivo YAML de SQL Managed Instance, puede crear la instancia de SQL Managed Instance mediante la ejecución del siguiente 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
Supervisión del estado de creación
La creación de la instancia de SQL Managed Instance tardará unos minutos en completarse. Puede supervisar el progreso en otra ventana de terminal con los siguientes comandos:
Nota:
En los siguientes comandos de ejemplo se da por hecho que ha creado una instancia de SQL Managed Instance denominada sql1
y un espacio de nombres de Kubernetes con el nombre arc
. Si ha usado otro un nombre para el espacio de nombres o la instancia de SQL Managed Instance, puede reemplazar arc
y sqlmi
por sus nombres.
kubectl get sqlmi/sql1 --namespace arc
kubectl get pods --namespace arc
También puede comprobar el estado de creación de cualquier pod determinado. Ejecute kubectl describe pod ...
. Use este comando para solucionar cualquier problema. Por ejemplo:
kubectl describe pod/<pod name> --namespace arc
#Example:
#kubectl describe pod/sql1-0 --namespace arc
Solución de problemas de implementación
Si tiene problemas con la implementación, consulte la guía de solución de problemas.
Contenido relacionado
Conexión a una instancia administrada de SQL habilitada por Azure Arc