Always On-Verfügbarkeitsgruppen für SQL Server-ContainerAlways On availability groups for SQL Server containers

SQL Server-2019 unterstützt Verfügbarkeitsgruppen für Container in einem Kubernetes-Cluster.SQL Server 2019 supports availability groups on containers in a Kubernetes cluster. Bereitstellen von SQL Server für Verfügbarkeitsgruppen Kubernetes-Operator in Ihrem Kubernetes-Cluster.For availability groups, deploy the SQL Server Kubernetes operator to your Kubernetes cluster. Der Operator packen, bereitstellen und verwalten die verfügbarkeitsgruppe in einem Cluster.The operator helps package, deploy, and manage the availability group in a cluster.

Verfügbarkeitsgruppe im Kubernetes-Container

In der Abbildung oben hosten eine vier-Knoten-Kubernetes-Cluster eine verfügbarkeitsgruppe mit drei Replikaten.In the image above, a four-node kubernetes clusters host an availability group with three replicas. Die Lösung umfasst die folgenden Komponenten:The solution includes the following components:

  • Eine Kubernetes Bereitstellung.A Kubernetes deployment. Die Bereitstellung umfasst auch den Operator und einer Zuordnung für die Konfiguration.The deployment includes the operator and a configuration map. Diese bieten die Container-Abbild, Software und Anweisungen zur Bereitstellung von SQL Server-Instanzen für die verfügbarkeitsgruppe erforderlich.These provide the container image, software, and instructions required to deploy SQL Server instances for the availability group.

  • Drei Knoten, die jede Hosten einer StatefulSet.Three nodes, each hosting a StatefulSet. Die StatefulSet enthält eine Pod.The StatefulSet contains a pod. Jedem Pod enthält:Each pod contains:

    • Ein SQL Server-Container mit einer Instanz von SQL Server.A SQL Server container running one instance of SQL Server.
    • Ein Availability Group-Agent.An availability group agent.
  • Zwei ConfigMaps im Zusammenhang mit der verfügbarkeitsgruppe.Two ConfigMaps related to the availability group. Die ConfigMaps enthalten Informationen über:The ConfigMaps provide information about:

    • Die Bereitstellung für den Operator.The deployment for the operator.
    • Die Verfügbarkeitsgruppe.The availability group.
  • Persistente Volumes sind Teile des Speichers.Persistent volumes are pieces of storage. Ein permanenter volumeanspruch (PVC) ist eine Anforderung für die Speicherung von einem Benutzer.A persistent volume claim (PVC) is a request for storage by a user. Jeder Container ist ein PVC für die Speicherung von Daten- und Protokolldateien zugeordnet.Each container is affiliated with a PVC for the data and log storage. In Azure Kubernetes Service (AKS), Sie erstellen Sie einen persistenten volumeanspruch in den Speicher automatisch bereitstellen basierend auf einer Speicherklasse.In Azure Kubernetes Service (AKS), you create a persistent volume claim to automatically provision storage based on a storage class.

Der Cluster darüber hinaus speichert Geheimnisse für die Kennwörter, Zertifikate, Schlüssel und andere vertrauliche Informationen.In addition, the cluster stores secrets for the passwords, certificates, keys, and other sensitive information.

Bereitstellen der verfügbarkeitsgruppe in KubernetesDeploy the availability group in Kubernetes

Um eine verfügbarkeitsgruppe in Kubernetes bereitzustellen:To deploy an availability group in Kubernetes:

  1. Erstellen des Kubernetes-ClustersCreate the Kubernetes cluster

    Erstellen Sie mindestens drei Knoten für eine verfügbarkeitsgruppe für SQL Server sowie einen Knoten für den Master.For an availability group, create at least three nodes for SQL Server plus a node for the master.

  2. Den Operator bereitstellenDeploy the operator

  3. Konfigurieren des SpeichersConfigure the storage

  4. Bereitstellen der StatefulSetDeploy the StatefulSet

    Der Operator Lauscht auf Anweisungen, um die StatefulSet bereitzustellen.The operator listens for instructions to deploy the StatefulSet. Automatisch Instanzen von SQL Server auf drei separaten Knoten erstellt und konfiguriert die verfügbarkeitsgruppe mit einem externen Cluster-Manager.It automatically creates the instances of SQL Server on three separate nodes and configures the availability group with an external cluster manager.

  5. Erstellen Sie die Datenbanken aus, und fügen Sie sie mit der verfügbarkeitsgruppeCreate the databases and attach them to the availability group

Ausführliche Schritte finden Sie unter Always On-Verfügbarkeitsgruppen für SQL Server-Containern.For detailed steps, see Always On availability groups for SQL Server containers.

SQL Server-Kubernetes-operatorSQL Server Kubernetes operator

Nachdem Sie den Operator bereitgestellt haben, registriert er eine benutzerdefinierte SQL Server-Ressource.After you deploy the operator, it registers a custom SQL Server resource. Verwenden Sie den Operator, um diese Ressource bereitzustellen.Use the operator to deploy this resource. Jede Ressource entspricht einer Instanz von SQL Server und enthält die spezifische Eigenschaften wie sapassword und monitoring policy.Each resource corresponds to an instance of SQL Server and includes specific properties like sapassword and monitoring policy. Der Operator analysiert die Ressource und einem Kubernetes StatefulSet bereitgestellt.The operator parses the resource and deploys a Kubernetes StatefulSet.

Die StatfulSet enthält:The StatfulSet contains:

  • mssql-server containermssql-server container

  • mssql-ha-supervisor containermssql-ha-supervisor container

Der Code für den Operator, hohe Verfügbarkeit Supervisor und SQL Server wird in ein Docker-Image namens verpackt mcr.microsoft.com/mssql/ha.The code for the operator, HA supervisor, and SQL Server is packaged in a Docker image called mcr.microsoft.com/mssql/ha. Dieses Image enthält die folgenden Binärdateien:This image contains the following binaries:

  • mssql-operator

    Dieser Prozess wird als eine separate Kubernetes-Bereitstellung bereitgestellt.This process is deployed as a separate Kubernetes deployment. Registriert die benutzerdefinierten Kubernetes-Ressource namens SqlServer (sqlservers.mssql.microsoft.com).It registers the Kubernetes custom resource called SqlServer (sqlservers.mssql.microsoft.com). Klicken Sie dann überwacht für diese Ressourcen, die erstellt oder aktualisiert im Kubernetes-Cluster.Then it listens for such resources being created or updated in the Kubernetes cluster. Für jedes Ereignis, erstellt oder aktualisiert die Kubernetes-Ressourcen für die entsprechende Instanz (z. B. die StatefulSet, oder mssql-server-k8s-init-sql Auftrag).For every such event, it creates or updates the Kubernetes resources for the corresponding instance (for example the StatefulSet, or mssql-server-k8s-init-sql job).

  • mssql-server-k8s-health-agent

    Dieser Webserver dient Kubernetes Verfügbarkeitseigenschaften Prüfpunkte zum Ermitteln der Integrität von SQL Server-Instanz.This web server serves Kubernetes liveness probes to determine the health of a SQL Server instance. Überwacht die Integrität der lokalen SQL Server-Instanz durch den Aufruf sp_server_diagnostics und Vergleichen der Ergebnisse mit Ihrem für die Überwachung.Monitors the health of the local SQL Server instance by calling sp_server_diagnostics and comparing the results with your monitor policy.

  • mssql-ha-supervisor

    Verwaltet den ag-Zertifikat und den Endpunkt an.Maintains the ag certificate and endpoint.

  • mssql-server-k8s-ag-agent

    Dieser Prozess überwacht die Integrität eines Replikats der Verfügbarkeitsgruppe auf einer einzelnen SQL Server-Instanz und Failover ausführt.This process monitors the health of an AG replica on a single SQL Server instance and performs failovers.

    Er verwaltet auch die Auswahl einer übergeordneten Instanz.It also maintains the leader election.

  • mssql-server-k8s-init-sql

    Dieser Kubernetes Auftrag gilt eine Konfiguration des gewünschten Zustands auf eine SQL Server-Instanz.This Kubernetes job applies a desired state configuration to a SQL Server instance. Jedes Mal, wenn eine SqlServer-Ressource erstellt oder aktualisiert wird, wird der Auftrag durch den Operator erstellt.The job is created by the operator every time a SqlServer resource is created or updated. Es wird sichergestellt, dass die Ziel SQL Server-Instanz, die für die benutzerdefinierte Ressource die gewünschte Konfiguration in der Ressource beschrieben.It ensures that the target SQL Server instance corresponding to the custom resource has the desired configuration described in the resource.

    Z. B. wenn die folgenden Einstellungen erforderlich sind, führt es diese:For example, if any of the following settings are required, it completes them:

    • Aktualisieren Sie das SA-KennwortUpdate the SA password
    • Erstellt die SQL-Anmeldung für die agentsCreates the SQL login for the agents
    • Den DBM-Endpunkt erstelltCreates the DBM endpoint
  • mssql-server-k8s-rotate-creds

    Dieser Kubernetes-Auftrag implementiert die Rotieren von Anmeldeinformationen-Aufgabe.This Kubernetes job implements the rotate credentials task. Erstellen Sie diesen Auftrag aus, um Updates für das SA-Kennwort, Anmeldekennwort für SQL-Agent, DBM Cert usw. anzufordern. Das SA-Kennwort wird als die Auftragsparameter angegeben.Create this job to request updates to the SA password, agent SQL login password, DBM cert, etc. The SA password is specified as the job parameters. Die anderen sind automatisch generiert.The others are auto-generated.

  • mssql-server-k8s-failover

    Eine Kubernetes-Auftrag, der der Workflow für manuelles Failover implementiert.A Kubernetes job that implements the manual failover workflow.

HinweiseNotes

Unabhängig von der AG-Konfiguration wird der Operator immer den Supervisor hohe Verfügbarkeit bereitstellen.Regardless of the AG configuration, The operator will always deploy the HA supervisor. Wenn die SqlServer-Ressource nicht mit keiner verfügbarkeitsgruppe befinden aufgelistet wird, wird der Operator noch diese Container bereitgestellt.If the SqlServer resource does not list any AG, the operator will still deploy this container.

Die Version für das Operator-Image ist identisch mit der Version für das SQL Server-Image.The version for the operator image is identical to the version for the SQL Server image.

Nächste SchritteNext steps

SQL Server-Containers in KubernetesSQL Server container in Kubernetes