Sdílet prostřednictvím


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

  • Úč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 kubectlnajdete 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á.

  1. Vytvořte sa heslo v clusteru Kubernetes. Kubernetes může spravovat citlivé informace o konfiguraci, jako jsou hesla jako tajné kódy.

  2. Pokud chcete vytvořit tajný kód v Kubernetes pojmenovaném mssql, který obsahuje hodnotu <password> pro MSSQL_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žijte MSSQL_SA_PASSWORD.

    kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
    

Vytvoření úložiště

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.

  1. 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ě.

  2. 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ě je Standard_LRS. Požadavek na trvalý svazek má název mssql-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).

  3. 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
    
  4. 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.

  5. 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í

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.
  1. 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, Standardnebo Express). Další informace naleznete v tématu Jak licencovat SQL Server.

    • persistentVolumeClaim: Tato hodnota vyžaduje položku pro claimName:, 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 heslo sa, 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í definujeme fsGroup s hodnotou 10001, což je ID skupiny (GID) pro skupinu mssql. Tato hodnota znamená, že všechny procesy kontejneru jsou také součástí doplňkového GID 10001 (mssql). Vlastník svazku /var/opt/mssql a všechny soubory vytvořené v daném svazku budou gid 10001 (skupina mssql).

    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.

  2. 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.

  3. 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>
    
  4. 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íte whoami. 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.

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í

Pokud chcete ověřit selhání a obnovení, můžete pod odstranit pomocí následujících kroků:

  1. 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.

  2. 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