Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a: SQL Server - Linux
En este inicio rápido se muestra cómo configurar una instancia de SQL Server de alta disponibilidad en un contenedor con almacenamiento persistente de Azure Kubernetes Service (AKS) o Red Hat OpenShift. Si se produce un error en la instancia de SQL Server, el orquestador vuelve a crearla automáticamente en un pod nuevo. El servicio de clúster también proporciona resistencia frente a un error de nodo.
En este inicio rápido se usan las herramientas de línea de comandos siguientes para administrar el clúster.
Servicio de clúster | Texto de línea de comandos |
---|---|
Azure Kubernetes Service (AKS) | kubectl (CLI de Kubernetes) |
Red Hat OpenShift en Azure | oc (CLI de OpenShift) |
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
Un clúster de Kubernetes. Para más información sobre la creación y conexión a un clúster de Kubernetes en AKS con kubectl
, consulte Tutorial: Implementación de un clúster de Azure Kubernetes Service (AKS).
Nota
Para protegerse frente a errores de nodo, un clúster de Kubernetes requiere más de un nodo.
CLI de Azure. Para instalar la versión más reciente, vea Instalación de la CLI de Azure.
Cree una contraseña de administrador del sistema en el clúster de Kubernetes. Kubernetes puede administrar información de configuración confidencial (por ejemplo, las contraseñas) como secretos.
Para crear un secreto en Kubernetes denominado mssql
que contenga el valor MyC0m9l&xP@ssw0rd
de MSSQL_SA_PASSWORD
, ejecute el comando siguiente. Recuerde elegir su propia contraseña compleja:
Importante
La variable de entorno SA_PASSWORD
está en desuso. En su lugar, use MSSQL_SA_PASSWORD
.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="MyC0m9l&xP@ssw0rd"
Para una base de datos de un clúster de Kubernetes, debe usar el almacenamiento persistente. Configure un volumen persistente y una notificación de volumen persistente en el clúster de Kubernetes mediante los pasos siguientes:
Cree un manifiesto para definir la clase de almacenamiento y la notificación de volumen persistente. El manifiesto especifica el aprovisionamiento de almacenamiento, los parámetros y la directiva de recuperación. El clúster de Kubernetes usa este manifiesto para crear el almacenamiento persistente.
En el siguiente ejemplo de YAML se define una clase de almacenamiento y una notificación de volumen persistente. El almacenamiento de la clase de almacenamiento es azure-disk
porque este clúster de Kubernetes está en Azure. El tipo de cuenta de almacenamiento es Standard_LRS
. La notificación de volumen persistente se denomina mssql-data
. Los metadatos de la notificación de volumen persistente incluyen una anotación que lo vuelve a conectar con la clase de almacenamiento.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azure-disk
provisioner: kubernetes.io/azure-disk
parameters:
storageaccounttype: Standard_LRS
kind: Managed
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mssql-data
annotations:
volume.beta.kubernetes.io/storage-class: azure-disk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
Guarde el archivo (por ejemplo, pvc.yaml
).
Cree la notificación de volumen persistente en Kubernetes, donde <path to pvc.yaml file>
es la ubicación donde guardó el archivo:
kubectl apply -f <path to pvc.yaml file>
El volumen persistente se crea automáticamente como una cuenta de Azure Storage y se enlaza a la notificación de volumen persistente.
storageclass "azure-disk" created
persistentvolumeclaim "mssql-data" created
Compruebe la notificación de volumen persistente, donde <persistentVolumeClaim>
es el nombre de la notificación de volumen persistente:
kubectl describe pvc <persistentVolumeClaim>
En el paso anterior, la notificación de volumen persistente se denomina mssql-data
. Para ver los metadatos sobre la notificación de volumen persistente, ejecute el siguiente comando:
kubectl describe pvc mssql-data
Los metadatos devueltos incluyen un valor denominado Volume
. Este valor se asigna al nombre del blob.
Name: mssql-data
Namespace: default
StorageClass: azure-disk
Status: Bound
Volume: pvc-d169b88e-f26d-11e7-bc3e-0a58ac1f09a4
Labels: ‹none>
Annotations: kubectl.kubernetes.io/last-applied-configuration-{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta. kubernetes.io/storage-class":"azure-disk"},"name":"mssq1-data...
pv.kubernetes.io/bind-completed-yes
pv.kubernetes.io/bound-by-controller=yes
volume.beta.kubernetes.io/storage-class=azure-disk
volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/azure-disk
Capacity: 8Gi
Access Modes: RWO
Events: <none>
El valor del volumen coincide con parte del nombre del blob en la siguiente imagen de Azure Portal:
Compruebe el volumen persistente.
kubectl describe pv
kubectl
devuelve metadatos sobre el volumen persistente que se ha creado automáticamente y se ha enlazado a la notificación de volumen persistente.
El contenedor que hospeda la instancia de SQL Server se describe como un objeto de implementación de Kubernetes. La implementación crea un conjunto de réplicas. El conjunto de réplicas crea el pod.
Crea un manifiesto para describir el contenedor basado en la imagen de Docker mssql-server-linux de SQL Server.
mssql-server
y al secreto mssql
que ya ha aplicado al clúster de Kubernetes.Cree un manifiesto (un archivo YAML) para describir la implementación. En el ejemplo siguiente se describe una implementación, incluido un contenedor basado en la imagen de contenedor de SQL Server.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mssql-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mssql
template:
metadata:
labels:
app: mssql
spec:
terminationGracePeriodSeconds: 30
hostname: mssqlinst
securityContext:
fsGroup: 10001
containers:
- name: mssql
image: mcr.microsoft.com/mssql/server:2022-latest
resources:
requests:
memory: "2G"
cpu: "2000m"
limits:
memory: "2G"
cpu: "2000m"
ports:
- containerPort: 1433
env:
- name: MSSQL_PID
value: "Developer"
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_SA_PASSWORD
valueFrom:
secretKeyRef:
name: mssql
key: MSSQL_SA_PASSWORD
volumeMounts:
- name: mssqldb
mountPath: /var/opt/mssql
volumes:
- name: mssqldb
persistentVolumeClaim:
claimName: mssql-data
---
apiVersion: v1
kind: Service
metadata:
name: mssql-deployment
spec:
selector:
app: mssql
ports:
- protocol: TCP
port: 1433
targetPort: 1433
type: LoadBalancer
Copie el código anterior en un nuevo archivo denominado sqldeployment.yaml
. Actualice los siguientes valores:
MSSQL_PID value: "Developer"
: establece el contenedor para ejecutar la edición SQL Server Developer. La edición Developer no tiene licencia para los datos de producción. Si la implementación es para su uso en producción, establezca la edición adecuada (Enterprise
, Standard
o Express
). Para obtener más información, vea Cómo obtener una licencia de SQL Server.
persistentVolumeClaim
: este valor requiere una entrada para claimName:
que se asigne al nombre usado para la notificación de volumen persistente. En este tutorial se usa mssql-data
.
name: MSSQL_SA_PASSWORD
: Configura la imagen de contenedor para establecer la contraseña de administrador del sistema, tal como se define en esta sección.
valueFrom:
secretKeyRef:
name: mssql
key: MSSQL_SA_PASSWORD
Cuando Kubernetes implementa el contenedor, hace referencia al secreto denominado mssql
para obtener el valor de la contraseña.
securityContext
: define la configuración de privilegios y control de acceso para un pod o contenedor. En este caso, se especifica a nivel de pod, por lo que todos los contenedores se adhieren a ese contexto de seguridad. En el contexto de seguridad, definimos fsGroup
con el valor 10001
, que es el identificador de grupo (GID) del grupo mssql
. Este valor significa que todos los procesos del contenedor también forman parte del GID 10001
complementario (mssql
). El propietario del volumen /var/opt/mssql
y todos los archivos creados en ese volumen será el GID 10001
(el grupo mssql
).
Advertencia
Al usar el tipo de servicio LoadBalancer
, se puede acceder a la instancia de SQL Server de forma remota (mediante Internet) en el puerto 1433.
Guarde el archivo. Por ejemplo, sqldeployment.yaml
.
Cree la implementación, donde <path to sqldeployment.yaml file>
es la ubicación donde guardó el archivo:
kubectl apply -f <path to sqldeployment.yaml file>
Se crean la implementación y el servicio. La instancia de SQL Server está en un contenedor, que está conectado al almacenamiento persistente.
deployment "mssql-deployment" created
service "mssql-deployment" created
Se crean la implementación y el servicio. La instancia de SQL Server está en un contenedor, que está conectado al almacenamiento persistente.
Para ver el estado del pod, escriba kubectl get pod
.
NAME READY STATUS RESTARTS AGE
mssql-deployment-3813464711-h312s 1/1 Running 0 17m
El pod tiene un estado de Running
. Este estado indica que el contenedor está listo. Una vez creada la implementación, pueden pasar unos minutos hasta que el pod se pueda ver. El retraso se debe a que el clúster extrae la imagen mssql-server-linux del Registro de artefactos Microsoft. Una vez que se extrae la imagen por primera vez, las implementaciones posteriores pueden ser más rápidas si la implementación se realiza en un nodo que ya tiene la imagen almacenada en la memoria caché.
Compruebe que los servicios se está ejecutando. Ejecute el siguiente comando:
kubectl get services
Este comando devuelve los servicios que se están ejecutando, así como sus direcciones IP internas y externas. Anote la dirección IP externa del servicio mssql-deployment
. Use esta dirección IP para conectarse a SQL Server.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 52m
mssql-deployment LoadBalancer 10.0.113.96 52.168.26.254 1433:30619/TCP 2m
Para obtener más información sobre el estado de los objetos en el clúster de Kubernetes, ejecute el comando siguiente. No olvide reemplazar <MyResourceGroup>
y <MyKubernetesClustername>
po el grupo de recursos y el nombre del clúster de Kubernetes:
az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
También puede comprobar que el contenedor se ejecuta como no raíz ejecutando el siguiente comando, donde <nameOfSqlPod>
es el nombre del pod de SQL Server:
kubectl.exe exec <nameOfSqlPod> -it -- /bin/bash
Puede ver el nombre de usuario como mssql
si ejecuta whoami
. mssql
es un usuario no raíz.
whoami
Puede conectarse a una aplicación desde fuera de la red virtual de Azure mediante la cuenta sa
y la dirección IP externa del servicio. Use la contraseña que ha configurado como secreto de OpenShift.
Puede usar las siguientes aplicaciones para conectarse a la instancia de SQL Server.
Para conectarse a sqlcmd
, ejecute el siguiente comando:
sqlcmd -S <External IP Address> -U sa -P "MyC0m9l&xP@ssw0rd"
Reemplace los siguientes valores:
<External IP Address>
por la dirección IP del servicio mssql-deployment
.MyC0m9l&xP@ssw0rd
por su contraseña complejaPara comprobar los errores y la recuperación, puede eliminar el pod con los pasos siguientes:
Enumere el pod que ejecuta SQL Server.
kubectl get pods
Anote el nombre del pod que ejecuta SQL Server.
Elimine el pod.
kubectl delete pod mssql-deployment-0
mssql-deployment-0
es el valor devuelto del paso anterior para el nombre del pod.
Kubernetes vuelve a crear automáticamente el pod para recuperar una instancia de SQL Server y se conecta al almacenamiento persistente. Use kubectl get pods
para comprobar que se ha implementado un nuevo pod. Use kubectl get services
para comprobar que la dirección IP del nuevo contenedor es la misma.
Si no tiene previsto seguir los tutoriales siguientes, limpie los recursos innecesarios. Use el comando az group delete
para quitar el grupo de recursos, el servicio de contenedor y todos los recursos relacionados. Reemplace <MyResourceGroup>
por el nombre del grupo de recursos que contiene el clúster.
az group delete --name <MyResourceGroup> --yes --no-wait
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyCursos
Módulo
Proyecto guiado: implementación de aplicaciones en Azure Kubernetes Service - Training
Le damos la bienvenida a esta experiencia interactiva de validación de aptitudes. Completar este módulo le ayuda a prepararse para la evaluación de Implementación y administración de contenedores con Azure Kubernetes Service.
Certificación
Microsoft Certified: Azure Database Administrator Associate - Certifications
Administre una infraestructura de base de datos de SQL Server para bases de datos relacionales locales e híbridas en la nube mediante las ofertas de bases de datos relacionales PaaS de Microsoft.
Documentación
Implementación de contenedores de SQL Server en Kubernetes con StatefulSets - SQL Server
En este artículo se proporcionan procedimientos recomendados e instrucciones para ejecutar contenedores de SQL Server para Linux en Kubernetes con StatefulSets.
Implementación y conexión a contenedores de Linux de SQL Server - SQL Server
Explore cómo se puede implementar SQL Server en contenedores de Linux y obtenga información sobre diversas herramientas para conectarse a SQL Server desde dentro y fuera del contenedor
Introducción a SQL Server (en Linux) en la nube - SQL Server
Obtenga información sobre cómo instalar SQL Server en Red Hat Enterprise Linux (RHEL), en SUSE Linux Enterprise Server (SLES) o en Ubuntu en la nube que prefiera.