Distribuire gruppi di disponibilità in Kubernetes con DH2i DxOperator in servizio Azure Kubernetes
Si applica a: SQL Server - Linux
Questa esercitazione illustra come configurare un gruppo di disponibilità Always On (AGs) di SQL Server per contenitori di SQL Server basati su Linux distribuiti in un cluster Kubernetes con il servizio Azure Kubernetes (AKS) usando DH2i DxOperator. Queste procedure sono applicabili anche ai cluster Azure Red Hat OpenShift; la distinzione principale è la distribuzione di un cluster Azure Red Hat OpenShift, seguito da comandi sostitutivi kubectl
con oc
nei passaggi seguenti.
Nota
Microsoft offre supporto per lo spostamento dati, il gruppo di disponibilità e i componenti di SQL Server. DH2i è responsabile del supporto del prodotto DxEnterprise, che include la gestione del cluster e del quorum. DxOperator è un'estensione software per Kubernetes che usa definizioni di risorse personalizzate per automatizzare la distribuzione dei cluster DxEnterprise. DxEnterprise fornisce quindi tutta la strumentazione per creare, configurare, gestire e fornire il failover automatico per i carichi di lavoro del gruppo di disponibilità di SQL Server in Kubernetes.
È possibile registrarsi per ottenere una licenza gratuita del software DxEnterprise. Per ulteriori informazioni, vedere la Guida introduttiva all'uso di DxOperator.
Usando i passaggi descritti in questo articolo, informazioni su come distribuire un oggetto StatefulSet e usare DH2i DxOperator per creare e configurare un gruppo di disponibilità con tre repliche ospitate nel servizio Azure Kubernetes.
L'esercitazione è costituita dai passaggi seguenti:
- Creare un
configmap
oggetto nel cluster del servizio Azure Kubernetes con impostazioni mssql-conf - Installare DxOperator
- Creare un oggetto segreto
- Distribuire un gruppo di disponibilità SQL di replica 3 usando il file YAML
- Connessione a SQL Server
Prerequisiti
Un cluster del servizio Azure Kubernetes o Kubernetes.
Una licenza DxEnterprise valida con funzionalità e tunnel del gruppo di disponibilità abilitati. Per altre informazioni, vedere l'edizione per sviluppatori per l'utilizzo non di produzione o il software DxEnterprise per i carichi di lavoro di produzione.
Creare l'oggetto configmap
Nel servizio Azure Kubernetes creare l'oggetto
configmap
con impostazioni mssql-conf in base alle esigenze. In questo esempio viene creatoconfigMap
, usando un file denominatomssqlconfig.yaml
con i parametri seguenti.apiVersion: v1 kind: ConfigMap metadata: name: mssql-config data: mssql.conf: | [EULA] accepteula = Y [sqlagent] enabled = true
Creare l’oggetto eseguendo i comandi seguenti.
kubectl apply -f ./mssqlconfig.yaml
Creare oggetti segreti
Creare un segreto per archiviare la sa
password per SQL Server.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
Creare un segreto per archiviare il codice di licenza per DH2i. Visitare il sito Web di DH2i per ottenere una licenza per sviluppatori. Sostituire XXXX-XXXX-XXXX-XXXX
nell'esempio seguente con il codice di licenza.
kubectl create secret generic dxe --from-literal=DX_PASSKEY="<password>" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX
Installare DxOperator
Per installare DxOperator, è necessario scaricare il file YAML DxOperator usando l'esempio seguente e quindi applicare il file YAML.
Distribuire YAML che descrive come configurare un gruppo di disponibilità usando il comando seguente. Salvare il file con un nome personalizzato, come
DxOperator.yaml
.curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml kubectl apply –f DxOperator.yaml
Dopo aver installato l'operatore è possibile distribuire i contenitori di SQL Server, configurare il gruppo di disponibilità, definire le repliche, distribuire e configurare il cluster DxEnterprise. Ecco un file YAML di distribuzione di esempio denominato
DxEnterpriseSqlAg.yaml
, che è possibile modificare in base alle esigenze.apiVersion: dh2i.com/v1 kind: DxEnterpriseSqlAg metadata: name: contoso-sql spec: synchronousReplicas: 3 asynchronousReplicas: 0 # ConfigurationOnlyReplicas are only allowed with availabilityGroupClusterType set to EXTERNAL configurationOnlyReplicas: 0 availabilityGroupName: AG1 # Listener port for the availability group (uncomment to apply) availabilityGroupListenerPort: 51433 # For a contained availability group, add the option CONTAINED availabilityGroupOptions: null # Valid options are EXTERNAL (automatic failover) and NONE (no automatic failover) availabilityGroupClusterType: EXTERNAL createLoadBalancers: true template: metadata: labels: label: example annotations: annotation: example spec: dxEnterpriseContainer: image: "docker.io/dh2i/dxe:latest" imagePullPolicy: Always acceptEula: true clusterSecret: dxe vhostName: VHOST1 joinExistingCluster: false # QoS – guaranteed (uncomment to apply) #resources: #limits: #memory: 1Gi #cpu: '1' # Configuration options for the required persistent volume claim for DxEnterprise volumeClaimConfiguration: storageClassName: null resources: requests: storage: 1Gi mssqlServerContainer: image: "mcr.microsoft.com/mssql/server:latest" imagePullPolicy: Always mssqlSecret: mssql acceptEula: true mssqlPID: Developer mssqlConfigMap: mssql-config # QoS – guaranteed (uncomment to apply) #resources: #limits: #memory: 2Gi #cpu: '2' # Configuration options for the required persistent volume claim for SQL Server volumeClaimConfiguration: storageClassName: null resources: requests: storage: 2Gi # Additional side-car containers, such as mssql-tools (uncomment to apply) #containers: #- name: mssql-tools #image: "mcr.microsoft.com/mssql-tools" #command: [ "/bin/sh" ] #args: [ "-c", "tail -f /dev/null" ]
Distribuire il file
DxEnterpriseSqlAg.yaml
.kubectl apply -f DxEnterpriseSqlAg.yaml
Creare un listener del gruppo di disponibilità
Applicare il codice YAML seguente per aggiungere un servizio di bilanciamento del carico impostando il selettore sul valore di metadata.name
nel passaggio precedente. In questo esempio è contoso-sql
.
apiVersion: v1
kind: Service
metadata:
name: contoso-cluster-lb
spec:
type: LoadBalancer
selector:
dh2i.com/entity: contoso-sql
ports:
- name: sql
protocol: TCP
port: 1433
targetPort: 51444
- name: listener
protocol: TCP
port: 51433
targetPort: 51433
- name: dxe
protocol: TCP
port: 7979
targetPort: 7979
Verificare le assegnazioni di distribuzione e bilanciamento del carico.
kubectl get pods
kubectl get services
L'output dovrebbe essere simile all'esempio seguente.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contoso-cluster-lb LoadBalancer 10.1.0.21 172.212.20.29 1433:30484/TCP,14033:30694/TCP,7979:30385/TCP 3m18s
contoso-sql-0 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m
contoso-sql-0-lb LoadBalancer 10.1.0.210 4.255.19.171 7979:32374/TCP,1433:32444/TCP 79m
contoso-sql-1 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m
contoso-sql-1-lb LoadBalancer 10.1.0.158 4.255.19.201 7979:30152/TCP,1433:30868/TCP 79m
contoso-sql-2 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m
contoso-sql-2-lb LoadBalancer 10.1.0.159 4.255.19.218 7979:30566/TCP,1433:31463/TCP 79m
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 87m
PS /home/aravind> kubectl get pods
NAME READY STATUS RESTARTS AGE
contoso-sql-0 2/2 Running 0 74m
contoso-sql-1 2/2 Running 0 74m
contoso-sql-2 2/2 Running 0 74m
Contenuto correlato
- Implementare gruppi di disponibilità con DH2i DxEnterprise in Kubernetes
- Distribuire contenitori SQL Server nel servizio Azure Kubernetes
- Distribuire contenitori Linux di SQL Server nel servizio Kubernetes con StatefulSets
- Esercitazione: Configurare l'autenticazione di Active Directory tramite i contenitori di SQL Server in Linux