Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server- - Linux
In deze quickstart ziet u hoe u een maximaal beschikbaar SQL Server-exemplaar configureert in een container met permanente opslag, in Azure Kubernetes Service (AKS) of Red Hat OpenShift. Als het SQL Server-exemplaar mislukt, maakt de orchestrator deze automatisch opnieuw in een nieuwe pod. De clusterservice biedt ook tolerantie tegen een knooppuntfout.
In deze quickstart worden de volgende opdrachtregelprogramma's gebruikt om het cluster te beheren.
| Clusterservice | Opdrachtregelprogramma |
|---|---|
| Azure Kubernetes Service (AKS) | kubectl (Kubernetes CLI) |
| Azure Red Hat OpenShift | oc (OpenShift CLI) |
Vereiste voorwaarden
Een Azure-account met een actief abonnement. Gratis een account maken
Een Kubernetes-cluster. Zie
kubectlvoor meer informatie over het maken van en verbinden met een Kubernetes-cluster in AKS.Opmerking
Ter bescherming tegen storingen in een knooppunt heeft een Kubernetes-cluster meer dan één knooppunt nodig.
Azure CLI. Zie Hoe u de Azure CLI installeert om de nieuwste versie te installeren.
Een SA-wachtwoord maken
Het account van de systeembeheerder (sa) moet worden beveiligd met een sterk wachtwoord. Uw wachtwoord moet voldoen aan het standaard SQL Server-wachtwoordbeleid . Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Maak een
sawachtwoord in het Kubernetes-cluster. Kubernetes kan gevoelige configuratie-informatie, zoals wachtwoorden, beheren als geheimen.Om een secret in Kubernetes aan te maken met de naam
mssqldie de waarde<password>voor deMSSQL_SA_PASSWORDbevat, voert u de volgende opdracht uit. Vervang<password>door uw complexe wachtwoord.Belangrijk
De omgevingsvariabele
SA_PASSWORDis afgeschaft. Gebruik in plaats daarvanMSSQL_SA_PASSWORD.kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Opslag maken
Voor een database in een Kubernetes-cluster moet u permanente opslag gebruiken. U kunt een permanent volume en permanente volumeclaim configureren in het Kubernetes-cluster met behulp van de volgende stappen:
Maak een manifest om de opslagklasse en de permanente volumeclaim te definiëren. In het manifest worden de opslagvoorziener, parameters en terugvorderingsbeleid gespecificeerd. Het Kubernetes-cluster gebruikt dit manifest voor het maken van de permanente opslag.
In het volgende YAML-voorbeeld wordt een opslagklasse en permanente volumeclaim gedefinieerd. De opslagklasse-provisioner is
azure-disk, omdat dit Kubernetes-cluster zich in Azure bevindt. Het type opslagaccount isStandard_LRS. De naam van de permanente volumeclaim ismssql-data. De metagegevens van de permanente volumeclaim bevatten een aantekening dat het koppelt aan de opslagklasse.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: 8GiSla het bestand op (bijvoorbeeld
pvc.yaml).Maak de permanente volumeclaim in Kubernetes, waar
<path to pvc.yaml file>bevindt zich de locatie waar u het bestand hebt opgeslagen:kubectl apply -f <path to pvc.yaml file>Het permanente volume wordt automatisch gemaakt als een Azure Storage-account en is gebonden aan de permanente volumeclaim.
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" createdControleer de permanente volumeclaim, waar
<persistentVolumeClaim>is de naam van de permanente volumeclaim:kubectl describe pvc <persistentVolumeClaim>In de vorige stap heeft de permanente volumeclaim de naam
mssql-data. Voer de volgende opdracht uit om de metagegevens van de permanente volumeclaim te bekijken:kubectl describe pvc mssql-dataDe geretourneerde metagegevens bevatten een waarde met de naam
Volume. Deze waarde komt overeen met de naam van de 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>De waarde voor het volume komt overeen met een deel van de naam van de blob in Azure Portal.
Controleer het permanente volume.
kubectl describe pvkubectlretourneert metagegevens over het permanente volume dat automatisch is gemaakt en is gebonden aan de permanente volumeclaim.
De implementatie maken
De container die als host fungeert voor het SQL Server-exemplaar, wordt beschreven als een Kubernetes-implementatieobject. Met de implementatie wordt een replicaset gemaakt. De replicaset maakt de pod.
U maakt een manifest om de container te beschrijven, gebaseerd op de SQL Server mssql-server-linux Docker-image.
- Het manifest verwijst naar de
mssql-server-permanente volumeclaim en hetmssql-geheim dat u al hebt toegepast op het Kubernetes-cluster. - In het manifest wordt ook een servicebeschreven. Deze service is een load-balancer. De load balancer garandeert dat het IP-adres blijft bestaan nadat het SQL Server-exemplaar is hersteld.
- In het manifest worden resourceaanvragen en -limieten beschreven. Deze zijn gebaseerd op de minimale systeemvereisten.
Maak een manifest (een YAML-bestand) om de implementatie te beschrijven. In het volgende voorbeeld wordt een implementatie beschreven, inclusief een container op basis van de SQL Server-containerinstallatiekopieën.
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: LoadBalancerKopieer de voorgaande code naar een nieuw bestand met de naam
sqldeployment.yaml. Werk de volgende waarden bij:value: "Developer"MSSQL_PID: hiermee stelt u de container in om de SQL Server Developer-editie uit te voeren. Developer Edition heeft geen licentie voor productiegegevens. Als de implementatie voor productiegebruik is, stelt u de juiste editie in (Enterprise,Standard, ofExpress). Zie SQL Server licentie geven voor meer informatie.persistentVolumeClaim: Deze waarde vereist een invoer voorclaimName:die overeenkomt met de naam die wordt gebruikt voor de persistent volume claim. In deze zelfstudie wordtmssql-datagebruikt.name: MSSQL_SA_PASSWORD: Configureert de containerafbeelding om hetsawachtwoord in te stellen, zoals gedefinieerd in deze sectie.valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORDWanneer Kubernetes de container implementeert, verwijst deze naar het geheim met de naam
mssqlom de waarde voor het wachtwoord op te halen.securityContext: Hiermee definieert u instellingen voor bevoegdheden en toegangsbeheer voor een pod of container. In dit geval wordt deze opgegeven op podniveau, zodat alle containers voldoen aan die beveiligingscontext. In de beveiligingscontext definiëren we defsGroupmet de waarde10001, wat de Groep-ID (GID) is voor demssqlgroep. Deze waarde betekent dat alle processen van de container ook deel uitmaken van de aanvullende GID10001(mssql). De eigenaar van het volume/var/opt/mssqlen alle bestanden die in dat volume zijn gemaakt, zijn GID10001(demssqlgroep).
Waarschuwing
Met behulp van het
LoadBalancerservicetype is het SQL Server-exemplaar extern toegankelijk (via internet) op poort 1433.Sla het bestand op. Bijvoorbeeld:
sqldeployment.yaml.Maak de implementatie, waar
<path to sqldeployment.yaml file>is de locatie waar u het bestand hebt opgeslagen:kubectl apply -f <path to sqldeployment.yaml file>De implementatie en de service worden gemaakt. Het SQL Server-exemplaar bevindt zich in een container die is verbonden met permanente opslag.
deployment "mssql-deployment" created service "mssql-deployment" createdDe implementatie en de service worden gemaakt. Het SQL Server-exemplaar bevindt zich in een container die is verbonden met permanente opslag.
Als u de status van de pod wilt weergeven, typt u
kubectl get pod.NAME READY STATUS RESTARTS AGE mssql-deployment-3813464711-h312s 1/1 Running 0 17mDe pod heeft de status
Running. Deze status geeft aan dat de container klaar is. Nadat de implementatie is gemaakt, kan het enkele minuten duren voordat de pod zichtbaar is. De vertraging is omdat het cluster de mssql-server-linux-installatiekopie ophaalt uit het Microsoft Artifact Registry. Nadat de image de eerste keer is gedownload, kunnen volgende implementaties sneller zijn als de implementatie plaatsvindt op een knooppunt waarop de image al in de cache is opgeslagen.Controleer of de diensten worden uitgevoerd. Voer de volgende opdracht uit:
kubectl get servicesMet deze opdracht worden services geretourneerd die actief zijn, en de interne en externe IP-adressen voor de services. Noteer het externe IP-adres voor de
mssql-deployment-service. Gebruik dit IP-adres om verbinding te maken met 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 2mVoer de volgende opdracht uit voor meer informatie over de status van de objecten in het Kubernetes-cluster. Vergeet niet om
<MyResourceGroup>en<MyKubernetesClustername>te vervangen door uw resourcegroep en de naam van uw Kubernetes-cluster.az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>U kunt ook controleren of de container als niet-root draait door de volgende opdracht uit te voeren, waarbij
<nameOfSqlPod>de naam van uw SQL Server-pod is.kubectl.exe exec <nameOfSqlPod> -it -- /bin/bashU kunt de gebruikersnaam als
mssqlzien wanneer uwhoamiuitvoert.mssqlis een niet-rootgebruiker.whoami
Verbinding maken met het SQL Server-exemplaar
U kunt verbinding maken met een toepassing buiten het virtuele Azure-netwerk met behulp van het sa account en het externe IP-adres voor de service. Gebruik het wachtwoord dat u hebt geconfigureerd als het OpenShift-geheim.
U kunt de volgende toepassingen gebruiken om verbinding te maken met het SQL Server-exemplaar.
- MSSQL-extensie voor Visual Studio Code
- SQL Server Management Studio (SSMS)
- SQL Server Data Tools (SSDT)
Verbinding maken met sqlcmd
Voer de volgende opdracht uit om verbinding te maken met sqlcmd.
sqlcmd -S <External IP address> -U sa -P "<password>"
Vervang <External IP address> door het IP-adres voor de mssql-deployment service en <password> door uw complexe wachtwoord.
Waarschuwing
Uw wachtwoord moet voldoen aan het standaard SQL Server-wachtwoordbeleid . Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Fout en herstel verifiëren
Als u fouten en herstel wilt controleren, kunt u de pod verwijderen met de volgende stappen:
Vermeld de pod waarop SQL Server wordt uitgevoerd.
kubectl get podsNoteer de naam van de pod waarop SQL Server wordt uitgevoerd.
Verwijder de pod.
kubectl delete pod mssql-deployment-0mssql-deployment-0is de waarde die in de vorige stap is geretourneerd voor de naam van de pod.
Kubernetes maakt de pod automatisch opnieuw om een SQL Server-exemplaar te herstellen en maakt verbinding met de permanente opslag. Gebruik kubectl get pods om te controleren of een nieuwe pod is geïmplementeerd. Gebruik kubectl get services om te controleren of het IP-adres voor de nieuwe container hetzelfde is.
Hulpmiddelen opruimen
Als u niet van plan bent om door de zelfstudies te gaan die volgen, schoont u uw onnodige resources op. Gebruik de az group delete opdracht om de resourcegroep, containerservice en alle gerelateerde resources te verwijderen. Vervang <MyResourceGroup> door de naam van de resourcegroep die uw cluster bevat.
az group delete --name <MyResourceGroup> --yes --no-wait