Share via


Azure Kubernetes Service 上の DH2i DxOperator を使用して Kubernetes に可用性グループをデプロイする

適用対象:SQL Server - Linux

このチュートリアルでは、DH2i DxOperator を使って、Azure Kubernetes Service (AKS) Kubernetes クラスターにデプロイされた SQL Server Linux ベースのコンテナーに SQL Server Always On 可用性グループ (AG) を構成する方法について説明します。 これらの手順は、Azure Red Hat OpenShift クラスターにも適用できます。 主な違いは、Azure Red Hat OpenShift クラスターのデプロイメントであり、その後、次の手順で kubectl コマンドを oc に置き換えます。

Note

データ移動、AG、SQL Server コンポーネントは、Microsoft によってサポートされています。 DxEnterprise 製品のサポートは、クラスターとクォーラムの管理も含めて、DH2i によって行われます。 DxOperator は、カスタム リソース定義を使用して DxEnterprise クラスターの展開を自動化する Kubernetes のソフトウェア拡張機能です。 DxEnterprise は、Kubernetes の SQL Server AG ワークロードの自動フェールオーバーを作成、構成、管理、および提供するためのすべてのインストルメンテーションを備えています。

無料の DxEnterprise ソフトウェア ライセンスに登録できます。 詳細については、「DxOperator クイック スタート ガイド」を参照してください。

この記事に記載された手順を用いて、StatefulSet をデプロイし、DH2i DxOperator を使用して、AKS でホストされる 3 個のレプリカで AG を作成および構成する方法について説明します。

このチュートリアルは、以下の手順から構成されています。

  • mssql-conf 設定を使用して AKS クラスターに configmap オブジェクトを作成する
  • DxOperator をインストールする
  • シークレットオブジェクトを作成する
  • YAML ファイルを使用して 3 個のレプリカ SQL AG を配置する
  • SQL Server への接続

前提条件

  • Azure Kubernetes Service (AKS) または Kubernetes クラスター。

  • AG 機能とトンネルが有効になっている、有効な DxEnterprise ライセンス。 詳しくは、開発者向けエディションに関するページ (非運用環境での使用) か、DxEnterprise ソフトウェアに関するページ (運用ワークロード) を参照してください。

configmap オブジェクトを作成する

  1. AKS で、要件に基づいた mssql-conf 設定を持つ configmap オブジェクトを作成します。 この例では、mssqlconfig.yaml というファイルを次のパラメータとともに使用して、configMap を作成します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. 次のコマンドを実行して、オブジェクトを実行します。

    kubectl apply -f ./mssqlconfig.yaml
    

シークレット オブジェクトを作成する

SQL Server の sa パスワードを格納するシークレットを作成します。

kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="Password123"

DH2i のライセンス キーを格納するシークレットを作成します。 DH2i の Web サイト にアクセスして、開発者用ライセンスを取得します。 次の例では、XXXX-XXXX-XXXX-XXXX をご自分の ライセンス キー に置き換えてください。

kubectl create secret generic dxe --from-literal=DX_PASSKEY="Password123" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX

DxOperator をインストールする

DxOperator をインストールするには、次の例を使用して DxOperator YAML ファイルをダウンロードし、その後 YAML ファイルを適用する必要があります。

  1. 次のコマンドを使用して、AG の設定方法を説明する YAML を配置します。 DxOperator.yaml などのカスタム名でファイルを保存します。

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. オペレーターをインストールしたら、SQL Server コンテナーのデプロイ、可用性グループの構成、レプリカの定義、DxEnterprise クラスターのデプロイと構成を行うことができます。 これは、DxEnterpriseSqlAg.yaml というサンプル デプロイメント YAML ファイルです。これは、要件に合わせて変更できます。

    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" ]
    
  3. DxEnterpriseSqlAg.yaml ファイルをデプロイします。

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

可用性グループ リスナーの作成

前の手順でセレクターの値を metadata.name に設定することで、次の YAML を適用してロード バランサーを追加します。 この例では 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

展開とロード バランサーの割り当てを確認します。

kubectl get pods
kubectl get services

次の例のような出力が表示されます。

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