Implantar grupos de disponibilidade no Kubernetes com DH2i DxOperator no Serviço de Kubernetes do Azure
Aplica-se a: SQL Server - Linux
Este tutorial explica como configurar os grupos de disponibilidade (AGs) Always On do SQL Server para contêineres baseados no SQL Server Linux implantados em um cluster do Kubernetes do Serviço de Kubernetes do Azure (AKS), usando DH2i DxOperator. Esses procedimentos também são aplicáveis aos clusters do Red Hat OpenShift no Azure; a principal distinção é a implantação de um cluster do Red Hat OpenShift no Azure, seguido pela substituição de comandos kubectl
por oc
nas etapas a seguir.
Observação
A Microsoft oferece suporte a movimentação de dados, AGs e componentes do SQL Server. O DH2i é responsável pelo suporte do produto DxEnterprise, que inclui o gerenciamento de cluster e quorum. O DxOperator é uma extensão de software para o Kubernetes que usa definições de recursos personalizadas para automatizar a implantação de clusters DxEnterprise. Em seguida, o DxEnterprise fornece toda a instrumentação para criar, configurar, gerenciar e fornecer failover automático para cargas de trabalho de AG do SQL Server no Kubernetes.
Você pode se registrar para uma licença de software gratuita do DxEnterprise. Para obter mais informações, consulte o Guia de início rápido do DxOperator.
Usando as etapas mencionadas neste artigo, saiba como implantar um StatefulSet e usar a solução DH2i DxOperator para criar e configurar um AG com três réplicas hospedadas no AKS.
O tutorial consiste nas seguintes etapas:
- Criar um objeto
configmap
no cluster AKS com configurações mssql-conf - Instalar o DxOperator
- Criar objetos secretos
- Implantar 3 réplicas de AG no SQL usando o arquivo YAML
- Conecte-se ao SQL Server
Pré-requisitos
Um cluster do AKS (Serviço de Kubernetes do Azure) ou do Kubernetes.
Uma licença válida do DxEnterprise com recursos de AG e túneis habilitados. Para obter mais informações, confira a edição do desenvolvedor para uso que não seja de produção ou software DxEnterprise para cargas de trabalho de produção.
Criar o objeto configmap
No AKS, crie o objeto
configmap
, que tem configurações mssql-conf com base em seus requisitos. Neste exemplo, você cria oconfigMap
, usando um arquivo chamadomssqlconfig.yaml
com os seguintes parâmetros.apiVersion: v1 kind: ConfigMap metadata: name: mssql-config data: mssql.conf: | [EULA] accepteula = Y [sqlagent] enabled = true
Crie o objeto executando o comando a seguir.
kubectl apply -f ./mssqlconfig.yaml
Criar objetos secretos
Crie um segredo para armazenar a senha sa
do SQL Server.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="Password123"
Crie um segredo para armazenar a chave de licença para DH2i. Visite o site da DH2i para obter uma licença de desenvolvedor. No exemplo a seguir, substitua XXXX-XXXX-XXXX-XXXX
por sua chave de licença.
kubectl create secret generic dxe --from-literal=DX_PASSKEY="Password123" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX
Instalar o DxOperator
Para instalar o DxOperator, você deve baixar o arquivo YAML do DxOperator usando o exemplo a seguir e, em seguida, aplicar o arquivo YAML.
Implante o YAML descrevendo como configurar um AG usando o comando a seguir. Salve o arquivo com um nome personalizado, por exemplo,
DxOperator.yaml
.curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml kubectl apply –f DxOperator.yaml
Depois de instalar o operador, você pode implantar contêineres do SQL Server, configurar o grupo de disponibilidade, definir réplicas, implantar e configurar o cluster DxEnterprise. Aqui está um exemplo de arquivo YAML de implantação chamado
DxEnterpriseSqlAg.yaml
, que você pode alterar para atender às suas necessidades.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" ]
Implantar o
DxEnterpriseSqlAg.yaml
arquivo.kubectl apply -f DxEnterpriseSqlAg.yaml
Criar um ouvinte de grupo de disponibilidade
Aplique o seguinte YAML para adicionar um balanceador de carga, definindo o seletor como o valor de metadata.name
na etapa anterior. Neste exemplo, é 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
Verifique a implantação e as atribuições de balanceador de carga.
kubectl get pods
kubectl get services
Você deverá ver uma saída semelhante ao exemplo a seguir.
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
Conteúdo relacionado
- Implantar grupos de disponibilidade com o DH2i DxEnterprise no Kubernetes
- Implantar contêineres do SQL Server no Serviço de Kubernetes do Azure
- Implantar contêineres Linux no SQL Server no Kubernetes com StatefulSets
- Tutorial: Configurar a autenticação do Active Directory com contêineres do SQL Server em Linux