Rychlý start: Nasazení clusteru kontejnerů SQL Serveru v Azure nebo Red Hat OpenShiftu
platí pro:SQL Server – Linux
Tento rychlý start ukazuje, jak nakonfigurovat vysoce dostupnou instanci SQL Serveru v kontejneru s trvalým úložištěm, ve službě Azure Kubernetes Service (AKS) nebo Red Hat OpenShift. Pokud instance SQL Serveru selže, orchestrátor ji automaticky znovu vytvoří v novém podu. Služba clusteru také poskytuje odolnost proti selhání uzlu.
V tomto rychlém startu se ke správě clusteru používají následující nástroje příkazového řádku.
Clusterová služba | Nástroj příkazového řádku |
---|---|
Azure Kubernetes Service (AKS) | kubectl (Rozhraní příkazového řádku Kubernetes) |
Azure Red Hat OpenShift | oc (OpenShift CLI) |
Požadavky
- Kubernetes
- OpenShift
Účet Azure s aktivním předplatným. Vytvořit účet zdarma.
Kubernetes cluster. Další informace o vytváření a připojování ke clusteru Kubernetes v AKS s
kubectl
najdete v tématu Nasazení clusteru Azure Kubernetes Service (AKS).Poznámka
Kvůli ochraně před selháním uzlu vyžaduje cluster Kubernetes více než jeden uzel.
Azure CLI. Informace o instalaci nejnovější verze najdete v tématu Postup instalace Azure CLI.
Vytvoření hesla SA
Účet správce systému (sa
) musí být zabezpečený silným heslem. Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.
- Kubernetes
- OpenShift
Vytvořte
sa
heslo v clusteru Kubernetes. Kubernetes může spravovat citlivé informace o konfiguraci, jako jsou hesla jako tajné kódy.Pokud chcete vytvořit tajný kód v Kubernetes pojmenovaném
mssql
, který obsahuje hodnotu<password>
proMSSQL_SA_PASSWORD
, spusťte následující příkaz. Nahraďte<password>
složitým heslem.Důležitý
Proměnná prostředí
SA_PASSWORD
je zastaralá. Místo toho použijteMSSQL_SA_PASSWORD
.kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Vytvoření úložiště
- Kubernetes
- OpenShift
Pro databázi v clusteru Kubernetes musíte použít trvalé úložiště. Pomocí následujícího postupu můžete v clusteru Kubernetes nakonfigurovat trvalý svazek a deklarace přidělení trvalého svazku.
Vytvořte manifest pro definování třídy úložiště a přetrvávajícího nárokování svazku. Manifest určuje zřizovatele, parametry a zásady obnovy. Cluster Kubernetes používá tento manifest k vytvoření trvalého úložiště.
Následující příklad YAML definuje třídu úložiště a deklaraci trvalého svazku. Zřizovatel úložné třídy je
azure-disk
, protože tento cluster Kubernetes je v Azure. Typ účtu úložiště jeStandard_LRS
. Požadavek na trvalý svazek má názevmssql-data
. Metadata deklarace identity trvalého svazku obsahují poznámku, která ji připojí zpět ke třídě úložiště.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
Uložte soubor (například
pvc.yaml
).Vytvořte trvalou deklaraci identity svazku v Kubernetes, kde
<path to pvc.yaml file>
je umístění, kam jste soubor uložili:kubectl apply -f <path to pvc.yaml file>
Trvalý svazek se automaticky vytvoří jako účet úložiště Azure a naváže se na deklaraci trvalého svazku.
storageclass "azure-disk" created persistentvolumeclaim "mssql-data" created
Ověřte požadavek na trvalý svazek, kde
<persistentVolumeClaim>
je název tohoto požadavku.kubectl describe pvc <persistentVolumeClaim>
V předchozím kroku má deklarace trvalého svazku název
mssql-data
. Pokud chcete zobrazit metadata o přetrvávajícím požadavku na svazek, spusťte následující příkaz:kubectl describe pvc mssql-data
Vrácená metadata obsahují hodnotu s názvem
Volume
. Tato hodnota odpovídá názvu objektu 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>
Hodnota pro objem odpovídá části názvu blobu v portálu Azure.
Ověřte trvalý svazek.
kubectl describe pv
kubectl
vrátí metadata o trvalém svazku, který byl automaticky vytvořen a svázán s vyžádáním trvalého svazku.
Vytvořte nasazení
- Kubernetes
- OpenShift
Kontejner hostující instanci SQL Serveru je popsán jako objekt nasazení Kubernetes . Nasazení vytvoří sadu replik. Sada replik vytvoří pod.
Vytvoříte manifest, který popisuje kontejner, na základě obrazu Dockeru pro SQL Server mssql-server-linux.
- Manifest odkazuje na požadavek na trvalý svazek
mssql-server
a tajemstvímssql
, které jste už použili v clusteru Kubernetes. - Manifest také popisuje služby. Tato služba je nástroj pro vyrovnávání zatížení. Nástroj pro vyrovnávání zatížení zaručuje, že IP adresa přetrvává po obnovení instance SQL Serveru.
- Manifest popisuje požadavky prostředků a omezení . Jsou založeny na minimálních systémových požadavcích.
Vytvořte manifest (soubor YAML), který popisuje nasazení. Následující příklad popisuje nasazení, včetně kontejneru založeného na imagi kontejneru SQL Serveru.
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
Zkopírujte předchozí kód do nového souboru s názvem
sqldeployment.yaml
. Aktualizujte následující hodnoty:MSSQL_PID
value: "Developer"
: Nastaví kontejner pro spuštění edice SQL Server Developer. Vývojářská edice není licencována pro produkční data. Pokud je nasazení určené pro produkční použití, nastavte příslušnou edici (Enterprise
,Standard
neboExpress
). Další informace naleznete v tématu Jak licencovat SQL Server.persistentVolumeClaim
: Tato hodnota vyžaduje položku proclaimName:
, která se mapuje na název použitý pro přetrvávající požadavek na svazek. Tento kurz používámssql-data
.name: MSSQL_SA_PASSWORD
: Nakonfiguruje image kontejneru tak, aby nastavil heslosa
, jak je definováno v této části.valueFrom: secretKeyRef: name: mssql key: MSSQL_SA_PASSWORD
Když Kubernetes nasadí kontejner, se odkazuje na tajemství pojmenované
mssql
, aby získal hodnotu pro heslo.securityContext
: Definuje oprávnění a nastavení řízení přístupu pro pod nebo kontejner. V tomto případě se zadává na úrovni podu, takže všechny kontejnery odpovídají tomuto kontextu zabezpečení. V kontextu zabezpečení definujemefsGroup
s hodnotou10001
, což je ID skupiny (GID) pro skupinumssql
. Tato hodnota znamená, že všechny procesy kontejneru jsou také součástí doplňkového GID10001
(mssql
). Vlastník svazku/var/opt/mssql
a všechny soubory vytvořené v daném svazku budou gid10001
(skupinamssql
).
Varování
Pomocí typu služby
LoadBalancer
je instance SQL Serveru přístupná vzdáleně (přes internet) na portu 1433.Uložte soubor. Například
sqldeployment.yaml
.Vytvořte nasazení, ve kterém
<path to sqldeployment.yaml file>
je místo, kam jste soubor uložili:kubectl apply -f <path to sqldeployment.yaml file>
Nasazení a služba byly vytvořeny. Instance SQL Serveru je v kontejneru připojeném k trvalému úložišti.
deployment "mssql-deployment" created service "mssql-deployment" created
Nasazení a služba byly vytvořeny. Instance SQL Serveru je v kontejneru připojeném k trvalému úložišti.
Pokud chcete zobrazit stav podu, zadejte
kubectl get pod
.NAME READY STATUS RESTARTS AGE mssql-deployment-3813464711-h312s 1/1 Running 0 17m
Pod má status
Running
. Tento stav označuje, že kontejner je připravený. Po vytvoření nasazení může trvat několik minut, než bude pod viditelný. Zpoždění spočívá v tom, že cluster načítá image mssql-server-linux ze služby Microsoft Artifact Registry. Po prvním načítání image může být následné nasazení rychlejší, pokud je nasazení na uzel, který už má image uloženou v mezipaměti.Ověřte, že jsou služby spuštěné. Spusťte následující příkaz:
kubectl get services
Tento příkaz vrátí služby, které jsou spuštěné, a interní a externí IP adresy služeb. Poznamenejte si externí IP adresu služby
mssql-deployment
. Pomocí této IP adresy se připojte k SQL Serveru.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
Pro více informací o stavu objektů v clusteru Kubernetes spusťte následující příkaz. Nezapomeňte nahradit
<MyResourceGroup>
a<MyKubernetesClustername>
názvem skupiny prostředků a clusteru Kubernetes:az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
Spuštěním následujícího příkazu, kde
<nameOfSqlPod>
název podu SQL Serveru, můžete také ověřit, že kontejner běží jako ne root:kubectl.exe exec <nameOfSqlPod> -it -- /bin/bash
Uživatelské jméno můžete zobrazit jako
mssql
, pokud spustítewhoami
.mssql
je uživatel, který není root.whoami
Připojení k instanci SQL Serveru
Pomocí účtu sa
a externí IP adresy služby se můžete připojit pomocí aplikace mimo virtuální síť Azure. Použijte heslo, které jste nakonfigurovali jako tajný klíč OpenShiftu.
K připojení k instanci SQL Serveru můžete použít následující aplikace.
- SQL Server Management Studio (SSMS)
- SQL Server Data Tools (SSDT)
- Azure Data Studio
Připojení pomocí sqlcmd
Pokud se chcete připojit pomocí sqlcmd
, spusťte následující příkaz.
sqlcmd -S <External IP address> -U sa -P "<password>"
Nahraďte <External IP address>
IP adresou služby mssql-deployment
a <password>
složitým heslem.
Opatrnost
Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.
Ověření selhání a zotavení
- Kubernetes
- OpenShift
Pokud chcete ověřit selhání a obnovení, můžete pod odstranit pomocí následujících kroků:
Zobrazí seznam podů se spuštěným SQL Serverem.
kubectl get pods
Poznamenejte si název podu se spuštěným SQL Serverem.
Odstraňte pod.
kubectl delete pod mssql-deployment-0
mssql-deployment-0
je hodnota vrácená z předchozího kroku pro název podu.
Kubernetes automaticky vytvoří pod pro obnovení instance SQL Serveru a připojí se k trvalému úložišti. Pomocí kubectl get pods
ověřte, že je nový pod nasazen. Pomocí kubectl get services
ověřte, že IP adresa nového kontejneru je stejná.
Vyčištění prostředků
Pokud neplánujete projít následujícími návody, odstraňte své nepotřebné prostředky. Pomocí příkazu az group delete
odeberte skupinu prostředků, službu kontejneru a všechny související prostředky. Nahraďte <MyResourceGroup>
názvem skupiny prostředků obsahující váš cluster.
az group delete --name <MyResourceGroup> --yes --no-wait