Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server sur Linux
Ce guide de démarrage rapide montre comment configurer une instance SQL Server hautement disponible dans un conteneur avec stockage persistant sur Azure Kubernetes Service (AKS) ou Red Hat OpenShift. En cas d’échec de l’instance SQL Server, l’orchestrateur la recrée automatiquement dans un nouveau pod. Le service de cluster fournit également une résilience contre les défaillances de nœud.
Ce guide de démarrage rapide utilise les outils en ligne de commande suivants pour gérer le cluster.
| Service de cluster | Outil de ligne de commande |
|---|---|
| Azure Kubernetes Service (AKS) | kubectl (interface CLI Kubernetes) |
| Azure Red Hat OpenShift | oc (interface CLI OpenShift) |
Prerequisites
- Kubernetes
- OpenShift
Compte Azure avec un abonnement actif. Créez un compte gratuitement.
Un cluster Kubernetes. Pour plus d’informations sur la création et la connexion d’un cluster Kubernetes dans AKS avec
kubectl, consultez Déployer un cluster AKS (Azure Kubernetes Service).Note
Pour une protection contre les défaillances de nœuds, un cluster Kubernetes requiert plusieurs nœuds.
Azure CLI. Découvrez comment installer Azure CLI pour installer la dernière version.
Créer un mot de passe AS
Le compte de l’administrateur système (sa) doit être sécurisé avec un mot de passe fort. Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.
- Kubernetes
- OpenShift
Créez un mot de passe
sadans le cluster Kubernetes. Kubernetes peut gérer des informations de configuration sensibles, comme des mots de passe en tant que secrets.Pour créer un secret dans Kubernetes nommé
mssqlqui contient la valeur<password>pour leMSSQL_SA_PASSWORD, exécutez la commande suivante. Remplacez<password>par votre mot de passe complexe.Importante
La variable d’environnement
SA_PASSWORDest dépréciée. Utilisez plutôtMSSQL_SA_PASSWORD.kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Créer un stockage
- Kubernetes
- OpenShift
Pour une base de données dans un cluster Kubernetes, vous devez utiliser le stockage persistant. Vous pouvez configurer un volume persistant et une revendication de volume persistant dans le cluster Kubernetes en suivant les étapes ci-dessous :
Créez un manifeste pour définir la classe de stockage et la revendication de volume persistant. Le manifeste spécifie le fournisseur de stockage, les paramètres et la stratégie de récupération. Le cluster Kubernetes utilise ce manifeste pour créer le stockage persistant.
L’exemple de YAML suivant définit une classe de stockage et une revendication de volume persistant. Le fournisseur de classe de stockage est
azure-disk, car ce cluster Kubernetes est dans Azure. Le type de compte de stockage estStandard_LRS. La revendication de volume persistant est nomméemssql-data. Les métadonnées de revendication de volume persistant incluent une annotation qui les reconnecte à la classe de stockage.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: 8GiEnregistrez le fichier (par exemple,
pvc.yaml).Créez la revendication de volume persistant dans Kubernetes, où
<path to pvc.yaml file>est l’emplacement où vous avez enregistré le fichier :kubectl apply -f <path to pvc.yaml file>Le volume persistant est automatiquement créé en tant que compte de stockage Azure et lié à la revendication de volume persistant.
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" createdVérifiez la revendication de volume persistant, où
<persistentVolumeClaim>est le nom de la revendication de volume persistant :kubectl describe pvc <persistentVolumeClaim>Dans l’étape précédente, la revendication de volume persistant est nommée
mssql-data. Pour afficher les métadonnées relatives à la revendication de volume persistant, exécutez la commande suivante :kubectl describe pvc mssql-dataLes métadonnées retournées incluent une valeur appelée
Volume. Cette valeur correspond au nom du 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>La valeur de volume correspond à une partie du nom du blob dans le Portail Azure.
Vérifiez le volume persistant.
kubectl describe pvkubectlretourne les métadonnées relatives au volume persistant automatiquement créé et lié à la revendication de volume persistant.
Créer le déploiement
- Kubernetes
- OpenShift
Le conteneur qui héberge l’instance SQL Server est décrit comme un objet de déploiement Kubernetes. Le déploiement crée un jeu de réplicas. Le jeu de réplicas crée le pod.
Vous créez un manifeste pour décrire le conteneur en fonction de l’image de Docker mssql-server-linux de SQL Server.
- Le manifeste fait référence à la revendication de volume persistant
mssql-serveret au secretmssqlque vous avez déjà appliqué au cluster Kubernetes. - Le manifeste décrit également un service. Ce service est un équilibreur de charge. L’équilibreur de charge garantit que l’adresse IP persiste après la récupération de l’instance SQL Server.
- Le manifeste décrit les demandes et les limites de ressources. Celles-ci sont basées sur la configuration système minimale requise.
Créez un manifeste (fichier YAML) pour décrire le déploiement. L’exemple suivant décrit un déploiement, y compris un conteneur basé sur l’image de conteneur 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: LoadBalancerCopiez le code précédent dans un nouveau fichier, nommé
sqldeployment.yaml. Utilisez les valeurs suivantes :Paramètre Valeur Descriptif MSSQL_PIDDeveloperDéfinit le conteneur pour exécuter SQL Server 2022 (16.x) Developer Edition. L’édition Développeur n’est pas concédée sous licence pour les données de production. Si le déploiement est destiné à une utilisation en production, définissez l'édition appropriée ( Enterprise,StandardouExpress). Pour plus d'informations, consultez Comment installer SQL Server.persistentVolumeClaimmssql-dataCette valeur nécessite une entrée pour claimNamecorrespondant au nom utilisé pour la revendication de volume persistant. Ce didacticiel utilisemssql-data.nameMSSQL_SA_PASSWORDConfigure l’image conteneur pour définir le samot de passe, tel que défini dans cette section.valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORDQuand Kubernetes déploie le conteneur, il fait référence au secret nommé
mssqlpour obtenir la valeur du mot de passe.Paramètre Descriptif securityContextDéfinit les paramètres de contrôle d’accès et de privilège pour un pod ou un conteneur. Dans ce cas, il est spécifié au niveau du pod, de sorte que tous les conteneurs adhèrent à ce contexte de sécurité. Dans le contexte de sécurité, nous définissons fsGroupavec la valeur10001, qui est l’ID de groupe (GID) du groupemssql. Cette valeur signifie que tous les processus du conteneur font également partie du GID10001supplémentaire (mssql). Le propriétaire du volume/var/opt/mssqlet tous les fichiers créés dans ce volume vont correspondre au GID10001(groupemssql).Avertissement
En utilisant le type de service
LoadBalancer, l’instance SQL Server est accessible à distance (via Internet) sur le port 1433.Enregistrez le fichier. Par exemple :
sqldeployment.yaml.Créez le déploiement, où
<path to sqldeployment.yaml file>est l’emplacement où vous avez enregistré le fichier :kubectl apply -f <path to sqldeployment.yaml file>Le déploiement et le service sont créés. L’instance SQL Server se trouve dans un conteneur, connecté au stockage persistant.
deployment "mssql-deployment" created service "mssql-deployment" createdLe déploiement et le service sont créés. L’instance SQL Server se trouve dans un conteneur, connecté au stockage persistant.
Pour afficher l'état du pod, saisissez
kubectl get pod.NAME READY STATUS RESTARTS AGE mssql-deployment-3813464711-h312s 1/1 Running 0 17mLe pod a l’état
Running. Cet état indique que le conteneur est prêt. Une fois le déploiement créé, plusieurs minutes peuvent être nécessaires avant que le pod ne soit visible. Ce délai est dû au fait que le cluster extrait l’image mssql-server-linux du registre des artefacts Microsoft. Une fois l’image extraite pour la première fois, les déploiements ultérieurs peuvent être plus rapides si le déploiement se fait sur un nœud sur lequel l’image est déjà mise en cache.Vérifiez que les services sont en cours d'exécution. Exécutez la commande suivante :
kubectl get servicesCette commande retourne les services en cours d’exécution, et les adresses IP internes et externes des services. Notez l’adresse IP externe pour le service
mssql-deployment. Utilisez cette adresse IP pour vous connecter à 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 2mPour plus d’informations sur l’état des objets dans le cluster Kubernetes, exécutez la commande suivante. N’oubliez pas de remplacer
<MyResourceGroup>et<MyKubernetesClustername>par le nom de votre groupe de ressources et de votre cluster Kubernetes :az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>Vous pouvez également vérifier que le conteneur s’exécute comme non racine en exécutant la commande suivante, où
<nameOfSqlPod>est le nom de votre pod SQL Server :kubectl.exe exec <nameOfSqlPod> -it -- /bin/bashVous pouvez voir le nom d’utilisateur comme
mssqlsi vous exécutezwhoami.mssqlcorrespond à un utilisateur non-racine.whoami
Se connecter à l'instance SQL Server
Vous pouvez vous connecter à une application en dehors du réseau virtuel Azure, à l’aide du compte sa et de l’adresse IP externe du service. Utilisez le mot de passe que vous avez configuré en tant que secret OpenShift.
Vous pouvez utiliser les applications suivantes pour vous connecter à l’instance SQL Server.
- extension MSSQL pour Visual Studio Code
- SQL Server Management Studio (SSMS)
- SQL Server Data Tools (SSDT)
Se connecter avec sqlcmd
Pour se connecter avec sqlcmd, exécutez la commande suivante.
sqlcmd -S <External IP address> -U sa -P "<password>"
Remplacez <External IP address> par l’adresse IP du service mssql-deployment et <password> par votre mot de passe complexe.
Attention
Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.
Vérifier la défaillance et la récupération
- Kubernetes
- OpenShift
Pour vérifier l’échec et la récupération, vous pouvez supprimer le pod en procédant comme suit :
Répertoriez le pod exécutant SQL Server.
kubectl get podsNotez le nom du pod exécutant SQL Server.
Supprimer le pod.
kubectl delete pod mssql-deployment-0mssql-deployment-0est la valeur retournée de l’étape précédente pour le nom du pod.
Kubernetes recrée automatiquement le pod pour récupérer une instance SQL Server et se connecter au stockage persistant. Utilisez kubectl get pods pour vérifier qu’un nouveau pod est déployé. Utilisez kubectl get services pour vérifier que l’adresse IP du nouveau conteneur est la même.
Nettoyer les ressources
Si vous ne prévoyez pas d’effectuer les tutoriels qui suivent, nettoyez vos ressources inutiles. Utilisez la commande az group delete pour supprimer le groupe de ressources, le service conteneur ainsi que toutes les ressources associées. Remplacez <MyResourceGroup> par le nom du groupe de ressources contenant le cluster.
az group delete --name <MyResourceGroup> --yes --no-wait