Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server – Linux
Den här snabbstarten visar hur du konfigurerar en SQL Server-instans med hög tillgänglighet i en container med beständig lagring, i Azure Kubernetes Service (AKS) eller Red Hat OpenShift. Om SQL Server-instansen misslyckas, återskapar orkestratorn den automatiskt i en ny pod. Klustertjänsten ger också återhämtning mot ett nodfel.
Den här snabbstarten använder följande kommandoradsverktyg för att hantera klustret.
| Klustertjänsten | Kommandoradsverktyg |
|---|---|
| Azure Kubernetes Service (AKS) | kubectl (Kubernetes CLI) |
| Azure Red Hat OpenShift | oc (OpenShift CLI) |
Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Ett Kubernetes-kluster. Mer information om hur du skapar och ansluter till ett Kubernetes-kluster i AKS med
kubectlfinns i Distribuera ett AKS-kluster (Azure Kubernetes Service).Anmärkning
För att skydda mot nodfel kräver ett Kubernetes-kluster mer än en nod.
Azure CLI. Se Installera Azure CLI för att installera den senaste versionen.
Skapa ett SA-lösenord
Systemadministratörskontot (sa) måste skyddas med ett starkt lösenord. Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
Skapa ett
salösenord i Kubernetes-klustret. Kubernetes kan hantera känslig konfigurationsinformation, till exempel lösenord som hemligheter.Om du vill skapa en hemlighet i Kubernetes med namnet
mssqlsom innehåller värdet<password>förMSSQL_SA_PASSWORDkör du följande kommando. Ersätt<password>med ditt komplexa lösenord.Viktigt!
Miljövariabeln
SA_PASSWORDär inaktuell. AnvändMSSQL_SA_PASSWORDi stället.kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Skapa lagring
För en databas i ett Kubernetes-kluster måste du använda sparad lagring. Du kan konfigurera en beständig volym och ett beständigt volymanspråk i Kubernetes-klustret med hjälp av följande steg:
Skapa ett manifest för att definiera lagringsklassen och det beständiga volymanspråket. Manifestet anger lagringsetableraren, parametrarna och återtagandeprincipen. Kubernetes-klustret använder det här manifestet för att skapa den beständiga lagringen.
I följande YAML-exempel definieras en lagringsklass och beständiga volymanspråk. Etableringsverktyget för lagringsklassen är
azure-disk, eftersom det här Kubernetes-klustret finns i Azure. Lagringskontotypen ärStandard_LRS. Det beständiga volymkravet hetermssql-data. Beständiga metadata för volymanspråk innehåller en anteckning som ansluter tillbaka till lagringsklassen.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: 8GiSpara filen (till exempel
pvc.yaml).Skapa PersistentVolumeClaim i Kubernetes, där
<path to pvc.yaml file>är platsen där du sparade filen:kubectl apply -f <path to pvc.yaml file>Den beständiga volymen skapas automatiskt som ett Azure-lagringskonto och binds till det beständiga volymanspråket.
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" createdVerifiera Persistent Volume Claim, där
<persistentVolumeClaim>är namnet på Persistent Volume Claim:kubectl describe pvc <persistentVolumeClaim>I föregående steg heter det beständiga volymanspråket
mssql-data. För att se metadata om den beständiga volymanspråkningen kör följande kommando:kubectl describe pvc mssql-dataDe returnerade metadata innehåller ett värde som kallas
Volume. Det här värdet mappar till blobens namn.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>Värdet för volymen matchar en del av namnet på bloben i Azure-portalen.
Kontrollera den ihållande volymen.
kubectl describe pvkubectlreturnerar metadata om den beständiga volymen som skapades automatiskt och har bundits till det beständiga volymkravet.
Skapa distributionen
Containern som är värd för SQL Server-instansen beskrivs som ett Kubernetes-distributionsobjekt. Distributionen skapar en replikuppsättning. Replikuppsättningen skapar podden.
Du skapar ett manifest för att beskriva containern, baserat på SQL Server mssql-server-linux Docker-avbildningen .
- Manifestet refererar till det
mssql-serverbeständiga volymanspråket och hemlighetenmssqlsom du redan har tillämpat på Kubernetes-klustret. - Manifestet beskriver också en tjänst. Den här tjänsten är en lastbalanserare. Lastbalanseraren garanterar att IP-adressen bevaras när SQL Server-instansen har återställts.
- Manifestet beskriver resursbegäranden och begränsningar. Dessa baseras på minimikraven för systemet.
Skapa ett manifest (en YAML-fil) för att beskriva distributionen. I följande exempel beskrivs en distribution, inklusive en container baserat på SQL Server-containeravbildningen.
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: LoadBalancerKopiera föregående kod till en ny fil med namnet
sqldeployment.yaml. Uppdatera följande värden:value: "Developer"MSSQL_PID : Anger att containern ska köra SQL Server Developer Edition. Utvecklarutgåvan är inte licensierad för produktionsdata. Om distributionen är för produktionsanvändning anger du lämplig utgåva (Enterprise,Standard, ellerExpress). Mer information finns i Så här licensierar du SQL Server.persistentVolumeClaim: Det här värdet kräver en post förclaimName:som mappar till namnet som används för det beständiga volymkravet. I den här handledningen användsmssql-data.name: MSSQL_SA_PASSWORD: Konfigurerar containeravbildningensaför att ange lösenordet enligt definitionen i det här avsnittet.valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORDNär Kubernetes distribuerar containern refererar den till hemligheten med namnet
mssqlför att hämta värdet för lösenordet.securityContext: Definierar behörighets- och åtkomstkontrollinställningar för en podd eller container. I det här fallet anges den på poddnivå, så alla containrar följer den säkerhetskontexten. I säkerhetskontextenfsGroupdefinierar vi med värdet10001, som är grupp-ID (GID) förmssqlgruppen. Det här värdet innebär att alla processer i containern också ingår i den kompletterande GID:en10001(mssql). Ägaren för volymen/var/opt/mssqloch alla filer som skapas på volymen är GID10001(mssqlgruppen).
Varning
Med hjälp av
LoadBalancertjänsttypen är SQL Server-instansen fjärransluten (via Internet) på port 1433.Spara filen. Till exempel
sqldeployment.yaml.Skapa distributionen, där
<path to sqldeployment.yaml file>är platsen där du sparade filen:kubectl apply -f <path to sqldeployment.yaml file>Distributionen och tjänsten skapas. SQL Server-instansen finns i en container som är ansluten till beständig lagring.
deployment "mssql-deployment" created service "mssql-deployment" createdDistributionen och tjänsten skapas. SQL Server-instansen finns i en container som är ansluten till beständig lagring.
Om du vill visa status för podden skriver du
kubectl get pod.NAME READY STATUS RESTARTS AGE mssql-deployment-3813464711-h312s 1/1 Running 0 17mPodden har statusen
Running. Den här statusen anger att containern är klar. När distributionen har skapats kan det ta några minuter innan podden visas. Fördröjningen beror på att klustret hämtar mssql-server-linux-avbildningen från Microsoft Artifact Registry. När avbildningen hämtas första gången kan efterföljande distributioner gå snabbare om distributionen är till en nod som redan har avbildningen cachelagrad.Kontrollera att tjänsterna körs. Kör följande kommando:
kubectl get servicesDet här kommandot returnerar tjänster som körs och de interna och externa IP-adresserna för tjänsterna. Observera den externa IP-adressen för
mssql-deploymenttjänsten. Använd den här IP-adressen för att ansluta till 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 2mKör följande kommando för mer information om status för objekten i Kubernetes-klustret. Kom ihåg att ersätta
<MyResourceGroup>och<MyKubernetesClustername>med resursgruppen och Kubernetes-klusternamnet:az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>Du kan också kontrollera att containern körs som icke-root genom att köra följande kommando, där
<nameOfSqlPod>är namnet på SQL Server-podden:kubectl.exe exec <nameOfSqlPod> -it -- /bin/bashDu kan se användarnamnet som
mssqlom du körwhoami.mssqlär en icke-rootanvändare.whoami
Ansluta till SQL Server-instansen
Du kan ansluta med ett program utanför det virtuella Azure-nätverket med hjälp av sa kontot och den externa IP-adressen för tjänsten. Använd lösenordet som du konfigurerade som OpenShift-hemligheten.
Du kan använda följande program för att ansluta till SQL Server-instansen.
- MSSQL-tillägg för Visual Studio Code
- SQL Server Management Studio (SSMS)
- SQL Server Data Tools (SSDT)
Ansluta med sqlcmd
Kör följande kommando för att ansluta med sqlcmd.
sqlcmd -S <External IP address> -U sa -P "<password>"
Ersätt <External IP address> med IP-adressen för mssql-deployment tjänsten och <password> med ditt komplexa lösenord.
Försiktighet
Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
Verifiera fel och återställning
För att verifiera fel och återställning kan du ta bort podden med följande steg:
Visa en lista över podden som kör SQL Server.
kubectl get podsObservera namnet på podden som kör SQL Server.
Ta bort podden.
kubectl delete pod mssql-deployment-0mssql-deployment-0är värdet som returnerades från föregående steg för poddnamnet.
Kubernetes återskapar automatiskt podden för att återställa en SQL Server-instans och ansluter till den beständiga lagringen. Använd kubectl get pods för att kontrollera att en ny pod har distribuerats. Använd kubectl get services för att kontrollera att IP-adressen för den nya containern är densamma.
Rensa resurser
Om du inte planerar att gå igenom självstudierna som följer rensar du dina onödiga resurser.
az group delete Använd kommandot för att ta bort resursgruppen, containertjänsten och alla relaterade resurser. Ersätt <MyResourceGroup> med namnet på resursgruppen som innehåller klustret.
az group delete --name <MyResourceGroup> --yes --no-wait