Erstellen einer Azure Arc-fähigen Instanz von SQL Managed Instance mithilfe von Kubernetes-Tools

In diesem Artikel wird veranschaulicht, wie Sie Azure SQL Managed Instance für Azure Arc mit Kubernetes-Tools bereitstellen.

Voraussetzungen

Einen Datencontroller sollten Sie bereits erstellt haben.

Zum Erstellen einer verwalteten SQL-Instanz mithilfe von Kubernetes-Tools müssen die Kubernetes-Tools installiert sein. In den Beispielen in diesem Artikel wird kubectl verwendet, allerdings können auch ähnliche Ansätze mit anderen Kubernetes-Tools verfolgt werden, z. B. dem Kubernetes-Dashboard, oc oder helm, wenn Sie mit diesen Tools und Kubernetes-YAML/JSON-Dateien vertraut sind.

Installieren des kubectl-Tools

Übersicht

Um eine Instanz von SQL Managed Instance zu erstellen, müssen Sie folgende Schritte ausführen:

  1. Erstellen eines Kubernetes-Geheimnisses zum sicheren Speichern Ihres Anmeldenamens und Kennworts als Systemadministrator*in
  2. Erstellen einer benutzerdefinierten SQL Managed Instance-Ressource basierend auf der benutzerdefinierten SqlManagedInstance-Ressourcendefinition

Definieren Sie beide Elemente in einer YAML-Datei.

Erstellen einer YAML-Datei

Verwenden Sie die Datei template yaml als Ausgangspunkt, um Ihre eigene benutzerdefinierte YAML-Datei für die verwaltete SQL-Instanz zu erstellen. Laden Sie diese Datei auf Ihren Computer herunter, und öffnen Sie sie in einem Text-Editor. Verwenden Sie einen Text-Editor wie VS Code, der Syntaxhervorhebung und Linten für YAML-Dateien unterstützen.

Hinweis

Ab dem Release von Februar 2022 muss eine RWX-fähige (ReadWriteMany) Speicherklasse für Sicherungen angegeben werden. Weitere Informationen finden Sie unter Zugriffsmodi. Wenn für Sicherungen keine Speicherklasse angegeben ist, wird die Standardspeicherklasse in Kubernetes verwendet. Wenn die Standardeinstellung nicht für RWX geeignet ist, ist die Installation von SQL Managed Instance möglicherweise nicht erfolgreich.

YAML-Beispieldatei

Sehen Sie sich das folgende Beispiel für eine YAML-Datei an:

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: sql1-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v5
kind: SqlManagedInstance
metadata:
  name: sql1
  annotations:
    exampleannotation1: exampleannotationvalue1
    exampleannotation2: exampleannotationvalue2
  labels:
    examplelabel1: examplelabelvalue1
    examplelabel2: examplelabelvalue2
spec:
  dev: true #options: [true, false]
  licenseType: LicenseIncluded #options: [LicenseIncluded, BasePrice].  BasePrice is used for Azure Hybrid Benefits.
  tier: GeneralPurpose #options: [GeneralPurpose, BusinessCritical]
  security:
    adminLoginSecret: sql1-login-secret
  scheduling:
    default:
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
  services:
    primary:
      type: LoadBalancer
  storage:
    #backups:
    #  volumes:
    #  - className: azurefile # Backup volumes require a ReadWriteMany (RWX) capable storage class
    #    size: 5Gi
    data:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    datalogs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    logs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi

Anpassen des Anmeldenamens und des Kennworts

Ein Kubernetes-Geheimnis wird als Base64-codierte Zeichenfolge gespeichert – eine für den Benutzernamen und eine für das Kennwort. Sie müssen den Anmeldenamen und das Kennwort eines Systemadministrators base64-codieren und sie am Platzhalterort unter data.password und data.username ablegen. Nehmen Sie nicht die Symbole < und > mit auf, die in der Vorlage vorhanden sind.

Hinweis

Um optimale Sicherheit zu garantieren, ist die Verwendung des Werts sa als Anmeldename nicht zulässig. Befolgen Sie die Kennwortkomplexitätsrichtlinie.

Sie können ein Onlinetool verwenden, um den gewünschten Benutzernamen und das zugehörige Kennwort mit einer Base64-Codierung zu versehen, oder Sie können abhängig von Ihrer Plattform integrierte CLI-Tools verwenden.

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

Anpassen des Namens

Die Vorlage hat einen Wert von sql1 für das Attribut name. Sie können diesen Wert ändern, aber es müssen Zeichen enthalten sein, die den DNS-Namensstandards entsprechen. Sie müssen außerdem den Namen des Geheimnisses entsprechend ändern. Wenn Sie z. B. den Namen der verwalteten SQL-Instanz in sql2 ändern, müssen Sie den Namen des Geheimnisses von sql1-login-secret in sql2-login-secret ändern.

Anpassen der Ressourcenanforderungen

Sie können die Ressourcenanforderungen (Limits und Anforderungen für RAM und Kerne) je nach Bedarf ändern.

Hinweis

Weitere Informationen zur Kubernetes-Ressourcengovernance.

Anforderungen für Ressourcenlimits und -anforderungen:

  • Der Grenzwert für die Anzahl von Kernen ist aus Abrechnungsgründen obligatorisch.
  • Der Rest der Ressourcenanforderungen und -limits ist optional.
  • Das Limit und die Anforderung für Kerne müssen ein positiver ganzzahliger Wert sein, falls angegeben.
  • Für die Kerneanforderung ist mindestens 1 Kern erforderlich, falls angegeben.
  • Das Format des Arbeitsspeicherwerts folgt der Kubernetes-Notation.
  • Für die Arbeitsspeicheranforderung sind mindestens 2 GB erforderlich, falls angegeben.
  • Als generelle Richtlinie sollten Sie 4 GB RAM für jeden Kern bei Produktionsanwendungsfällen haben.

Anpassen des Diensttyps

Der Diensttyp kann bei Bedarf in „NodePort“ geändert werden. Es wird eine zufällige Portnummer zugewiesen.

Anpassen von Speicher

Sie können die Speicherklassen für Speicher so anpassen, dass sie Ihrer Umgebung entsprechen. Wenn Sie nicht sicher sind, welche Speicherklassen verfügbar sind, führen Sie den Befehl kubectl get storageclass aus, um sie anzuzeigen.

Die Vorlage hat einen Standardwert von default.

Beispiel:

storage:
    data:
      volumes:
      - className: default 

Dieses Beispiel bedeutet, dass es eine Speicherklasse mit dem Namen default gibt und nicht, dass es eine Speicherklasse gibt, die der Standard ist. Sie können die Größe Ihres Speichers auch optional ändern. Weitere Informationen finden Sie unter Speicherkonfiguration.

Erstellen der verwalteten SQL-Instanz

Nachdem Sie nun die YAML-Datei der verwalteten SQL-Instanz angepasst haben, können Sie die verwaltete SQL-Instanz erstellen, indem Sie den folgenden Befehl ausführen:

kubectl create -n <your target namespace> -f <path to your yaml file>

#Example
#kubectl create -n arc -f C:\arc-data-services\sqlmi.yaml

Überwachen des Erstellungsstatus

Das Erstellen der verwalteten SQL-Instanz dauert einige Minuten. Mithilfe der folgenden Befehle können Sie den Status in einem anderen Terminalfenster überwachen:

Hinweis

Bei den folgenden Beispielbefehlen wird davon ausgegangen, dass Sie eine verwaltete SQL-Instanz namens sql1 sowie einen Kubernetes-Namespace namens arc erstellt haben. Wenn Sie andere Namen für den Namespace/die verwaltete SQL-Instanz verwendet haben, können Sie arc und sqlmi durch Ihre Namen ersetzen.

kubectl get sqlmi/sql1 --namespace arc
kubectl get pods --namespace arc

Sie können auch den Erstellungsstatus eines bestimmten Pods überprüfen. Führen Sie kubectl describe pod ... aus. Verwenden Sie diesen Befehl, um Probleme zu beheben. Beispiel:

kubectl describe pod/<pod name> --namespace arc

#Example:
#kubectl describe pod/sql1-0 --namespace arc

Behandeln von Bereitstellungsproblemen

Wenn Probleme bei der Bereitstellung auftreten, finden Sie weitere Informationen im Leitfaden zur Problembehandlung.

Nächste Schritte

Herstellen einer Verbindung mit Azure Arc-fähigen SQL Managed Instance-Instanzen