Azure Kubernetes サービス (AKS) での Kubernetes での SQL Server のコンテナーをデプロイします。Deploy a SQL Server container in Kubernetes with Azure Kubernetes Services (AKS)

適用対象: はいSQL サーバー (Linux のみ)ありませんAzure SQL DatabaseありませんAzure SQL Data Warehouseありません並列データ ウェアハウス APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Azure Kubernetes Service (AKS) では、Kubernetes で高可用性 (HA) の永続的なストレージを SQL Server インスタンスを構成する方法について説明します。Learn how to configure a SQL Server instance on Kubernetes in Azure Kubernetes Service (AKS), with persistent storage for high availability (HA). ソリューションでは、回復性を提供します。The solution provides resiliency. SQL Server インスタンスが失敗した場合は、Kubernetes に自動的にし再作成します新しいポッドにします。If the SQL Server instance fails, Kubernetes automatically re-creates it in a new pod. Kubernetes では、ノードの障害に対する復元性も提供します。Kubernetes also provides resiliency against a node failure.

このチュートリアルでは、AKS でのコンテナーで高可用性 SQL Server インスタンスを構成する方法を示します。This tutorial demonstrates how to configure a highly available SQL Server instance in a container on AKS. 作成することもAlways On 可用性グループの SQL Server のコンテナーします。You can also create Always On availability groups for SQL Server containers. 2 つの異なる Kubernetes ソリューションを比較するを参照してください。の高可用性 SQL Server のコンテナーをします。To compare the two different Kubernetes solutions, see High availability for SQL Server containers.

  • SA パスワードを作成します。Create an SA password
  • ストレージを作成します。Create storage
  • 展開を作成します。Create the deployment
  • SQL Server Management Studio (SSMS) による接続します。Connect with SQL Server Management Studio (SSMS)
  • エラーと回復を確認します。Verify failure and recovery

Azure Kubernetes サービスで実行されている Kubernetes 上の HA ソリューションHA solution on Kubernetes running in Azure Kubernetes Service

Kubernetes バージョン 1.6 およびそれ以降はサポートしていますストレージ クラス永続ボリューム要求、およびAzure ディスク ボリュームの種類します。Kubernetes 1.6 and later has support for storage classes, persistent volume claims, and the Azure disk volume type. 作成して Kubernetes でネイティブに、SQL Server インスタンスを管理します。You can create and manage your SQL Server instances natively in Kubernetes. この記事の例では、作成する方法を示します、展開共有ディスク フェールオーバー クラスター インスタンスと同様の高可用性構成を実現するためにします。The example in this article shows how to create a deployment to achieve a high availability configuration similar to a shared disk failover cluster instance. この構成では、Kubernetes は、クラスター オーケストレーターの役割を果たします。In this configuration, Kubernetes plays the role of the cluster orchestrator. コンテナー内の SQL Server インスタンスが失敗したときに、orchestrator を別のインスタンスが同じ永続的な記憶域に接続しているコンテナーのブートス トラップします。When a SQL Server instance in a container fails, the orchestrator bootstraps another instance of the container that attaches to the same persistent storage.

SQL Server の Kubernetes クラスターの図

前の図では、mssql-server内のコンテナーをポッドします。In the preceding diagram, mssql-server is a container in a pod. Kubernetes では、クラスター内のリソースを調整します。Kubernetes orchestrates the resources in the cluster. Aレプリカ セットポッドがノード障害の後に自動的に復旧ことにより、します。A replica set ensures that the pod is automatically recovered after a node failure. アプリケーションは、サービスに接続します。Applications connect to the service. この場合、サービスが障害の後に同じままの IP アドレスをホストするロード バランサーを表します、mssql-serverします。In this case, the service represents a load balancer that hosts an IP address that stays the same after failure of the mssql-server.

次の図に、mssql-serverコンテナーが失敗しました。In the following diagram, the mssql-server container has failed. レプリカの正常なインスタンスの正しい数設定、および構成に従って、新しいコンテナーを開始、オーケストレーターとして Kubernetes が保証されます。As the orchestrator, Kubernetes guarantees the correct count of healthy instances in the replica set, and starts a new container according to the configuration. オーケストレーターは、同じノードで、新しいポッドを開始し、mssql-serverが同じ永続的な記憶域に再接続します。The orchestrator starts a new pod on the same node, and mssql-server reconnects to the same persistent storage. サービスに再作成された接続mssql-serverします。The service connects to the re-created mssql-server.

SQL Server の Kubernetes クラスターの図

次の図では、ノードのホスト、mssql-serverコンテナーが失敗しました。In the following diagram, the node hosting the mssql-server container has failed. オーケストレーターは、別のノードに新しいポッドを開始し、mssql-serverが同じ永続的な記憶域に再接続します。The orchestrator starts the new pod on a different node, and mssql-server reconnects to the same persistent storage. サービスに再作成された接続mssql-serverします。The service connects to the re-created mssql-server.

SQL Server の Kubernetes クラスターの図

前提条件Prerequisites

  • Kubernetes クラスターKubernetes cluster

    • このチュートリアルでは、Kubernetes クラスターが必要です。The tutorial requires a Kubernetes cluster. 手順を使用して、 kubectlクラスターを管理します。The steps use kubectl to manage the cluster.

    • 参照してくださいAzure Container Service (AKS) クラスターのデプロイ作成を使用して AKS での単一ノードの Kubernetes クラスターに接続kubectlします。See Deploy an Azure Container Service (AKS) cluster to create and connect to a single-node Kubernetes cluster in AKS with kubectl.

      注意

      ノードの障害を防ぐには、Kubernetes クラスターには、1 つ以上のノードが必要です。To protect against node failure, a Kubernetes cluster requires more than one node.

  • Azure CLI 2.0.23Azure CLI 2.0.23

    • このチュートリアルの手順は、Azure CLI 2.0.23 に対して検証されました。The instructions in this tutorial have been validated against Azure CLI 2.0.23.

SA パスワードを作成します。Create an SA password

Kubernetes クラスターでは、SA のパスワードを作成します。Create an SA password in the Kubernetes cluster. Kubernetes は、パスワードなどの機密性の高い構成情報を管理できますシークレットします。Kubernetes can manage sensitive configuration information, like passwords as secrets.

次のコマンドでは、SA アカウントのパスワードを作成します。The following command creates a password for the SA account:

kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd"

置換MyC0m9l&xP@ssw0rd複雑なパスワード。Replace MyC0m9l&xP@ssw0rd with a complex password.

という名前の kubernetes シークレットを作成するmssql値を保持しているMyC0m9l&xP@ssw0rdSA_PASSWORDのコマンドを実行します。To create a secret in Kubernetes named mssql that holds the value MyC0m9l&xP@ssw0rd for the SA_PASSWORD, run the command.

ストレージを作成します。Create storage

構成、永続ボリューム永続ボリューム要求Kubernetes クラスターでします。Configure a persistent volume and persistent volume claim in the Kubernetes cluster. 次の手順を完了するには。Complete the following steps:

  1. ストレージ クラスと永続的なボリュームを定義するマニフェストを作成する要求。Create a manifest to define the storage class and the persistent volume claim. マニフェストはストレージ プロビジョナー、パラメーターを指定し、回収ポリシーします。The manifest specifies the storage provisioner, parameters, and reclaim policy. Kubernetes クラスターでは、このマニフェストを使用して、永続的なストレージを作成します。The Kubernetes cluster uses this manifest to create the persistent storage.

    次の yaml の例では、ストレージ クラスと永続ボリューム要求を定義します。The following yaml example defines a storage class and persistent volume claim. ストレージ クラスのプロビジョナーはazure-diskこの Kubernetes クラスターが Azure ではであるためです。The storage class provisioner is azure-disk, because this Kubernetes cluster is in Azure. ストレージ アカウントの種類はStandard_LRSします。The storage account type is Standard_LRS. 永続ボリューム要求の名前はmssql-dataします。The persistent volume claim is named mssql-data. 永続ボリューム要求メタデータには、記憶域クラスへ、再度接続する注釈が含まれています。The persistent volume claim metadata includes an annotation connecting it back to the storage class.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1beta1
    metadata:
         name: azure-disk
    provisioner: kubernetes.io/azure-disk
    parameters:
      storageaccounttype: Standard_LRS
      kind: Managed
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mssql-data
      annotations:
        volume.beta.kubernetes.io/storage-class: azure-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
    

    保存します (たとえば、 pvc.yaml)。Save the file (for example, pvc.yaml).

  2. Kubernetes 永続ボリューム要求を作成します。Create the persistent volume claim in Kubernetes.

    kubectl apply -f <Path to pvc.yaml file>
    

    <Path to pvc.yaml file> ファイルを保存した場所です。<Path to pvc.yaml file> is the location where you saved the file.

    永続ボリュームは自動的に Azure ストレージ アカウントとして作成され、永続ボリューム要求にバインドします。The persistent volume is automatically created as an Azure storage account, and bound to the persistent volume claim.

    永続ボリューム要求コマンドのスクリーン ショット

  3. 永続ボリューム要求を確認します。Verify the persistent volume claim.

    kubectl describe pvc <PersistentVolumeClaim>
    

    <PersistentVolumeClaim> 永続ボリューム要求の名前です。<PersistentVolumeClaim> is the name of the persistent volume claim.

    前の手順で、永続ボリューム要求の名前はmssql-dataします。In the preceding step, the persistent volume claim is named mssql-data. 永続ボリューム要求に関するメタデータを表示するには、次のコマンドを実行します。To see the metadata about the persistent volume claim, run the following command:

    kubectl describe pvc mssql-data
    

    返されたメタデータには、value という値が含まれています。Volumeします。The returned metadata includes a value called Volume. この値は、blob の名前にマップされます。This value maps to the name of the blob.

    ボリュームを含む、返されるメタデータのスクリーン ショット

    ボリュームの値には、Azure portal から次の図の blob の名前の一部が一致します。The value for volume matches part of the name of the blob in the following image from the Azure portal:

    スクリーン ショットの Azure ポータルの blob 名

  4. 永続ボリュームを確認します。Verify the persistent volume.

    kubectl describe pv
    

    kubectl 永続的なボリュームを自動的に作成され、永続ボリューム要求にバインドされたに関するメタデータを返します。kubectl returns metadata about the persistent volume that was automatically created and bound to the persistent volume claim.

展開を作成します。Create the deployment

この例では、SQL Server インスタンスをホストするコンテナーは Kubernetes デプロイ オブジェクトとしてについて説明します。In this example, the container hosting the SQL Server instance is described as a Kubernetes deployment object. 展開は、レプリカ セットを作成します。The deployment creates a replica set. レプリカ セットでは、ポッドを作成します。The replica set creates the pod.

この手順で SQL Server ベースのコンテナーを記述するマニフェストを作成mssql server-linux Docker イメージです。In this step, create a manifest to describe the container based on the SQL Server mssql-server-linux Docker image. マニフェストの参照、mssql-server永続ボリューム要求、およびmssqlKubernetes クラスターに既に適用したシークレットです。The manifest references the mssql-server persistent volume claim, and the mssql secret that you already applied to the Kubernetes cluster. マニフェストについても説明します、サービスします。The manifest also describes a service. このサービスは、ロード バランサーです。This service is a load balancer. ロード バランサーは、SQL Server インスタンスが回復後に、IP アドレスが解決しないことを保証します。The load balancer guarantees that the IP address persists after SQL Server instance is recovered.

  1. 展開を記述するマニフェスト (YAML ファイル) を作成します。Create a manifest (a YAML file) to describe the deployment. 次の例では、SQL Server のコンテナー イメージに基づくコンテナーなど、配置について説明します。The following example describes a deployment, including a container based on the SQL Server container image.

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: mssql-deployment
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: mssql
        spec:
          terminationGracePeriodSeconds: 10
          containers:
          - name: mssql
            image: mcr.microsoft.com/mssql/server/mssql-server-linux
            ports:
            - containerPort: 1433
            env:
            - name: ACCEPT_EULA
              value: "Y"
            - name: SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mssql
                  key: SA_PASSWORD 
            volumeMounts:
            - name: mssqldb
              mountPath: /var/opt/mssql
          volumes:
          - name: mssqldb
            persistentVolumeClaim:
              claimName: mssql-data
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mssql-deployment
    spec:
      selector:
        app: mssql
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
      type: LoadBalancer
    

    という名前の新しいファイルに上記のコードをコピーsqldeployment.yamlします。Copy the preceding code into a new file, named sqldeployment.yaml. 次の値を更新します。Update the following values:

    • value: "Developer": SQL Server Developer エディションを実行するコンテナーを設定します。value: "Developer": Sets the container to run SQL Server Developer edition. Developer edition では、実稼働データのライセンスがありません。Developer edition is not licensed for production data. 展開が実稼働環境用の場合は、適切なエディションを設定します。 (EnterpriseStandard、またはExpress)。If the deployment is for production use, set the appropriate edition (Enterprise, Standard, or Express).

      注意

      詳細については、次を参照してください。 SQL Server のライセンス方法します。For more information, see How to license SQL Server.

    • persistentVolumeClaim: この値には、のエントリが必要です。claimName:永続ボリューム要求に使用される名前にマップされます。persistentVolumeClaim: This value requires an entry for claimName: that maps to the name used for the persistent volume claim. このチュートリアルではmssql-dataします。This tutorial uses mssql-data.

    • name: SA_PASSWORD: このセクションで定義されている、SA のパスワードを設定するコンテナー イメージを構成します。name: SA_PASSWORD: Configures the container image to set the SA password, as defined in this section.

      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD 
      

      という名前のシークレットを参照して、コンテナーを展開すると、Kubernetesmssqlパスワードの値を取得します。When Kubernetes deploys the container, it refers to the secret named mssql to get the value for the password.

    注意

    使用して、LoadBalancerサービスの種類、SQL Server インスタンスはからリモート (インターネット) にアクセスできますが、ポート 1433 でします。By using the LoadBalancer service type, the SQL Server instance is accessible remotely (via the internet) at port 1433.

    保存します (たとえば、 sqldeployment.yaml)。Save the file (for example, sqldeployment.yaml).

  2. 展開を作成します。Create the deployment.

    kubectl apply -f <Path to sqldeployment.yaml file>
    

    <Path to sqldeployment.yaml file> ファイルを保存した場所です。<Path to sqldeployment.yaml file> is the location where you saved the file.

    展開コマンドのスクリーン ショット

    展開とサービスが作成されます。The deployment and service are created. SQL Server インスタンスは、永続的な記憶域に接続し、コンテナーでです。The SQL Server instance is in a container, connected to persistent storage.

    ポッドの状態を表示する次のように入力します。kubectl get podします。To view the status of the pod, type kubectl get pod.

    Get pod コマンドのスクリーン ショット

    前のイメージで、ポッドには、ステータスのRunningします。In the preceding image, the pod has a status of Running. この状態は、コンテナー準備ができていることを示します。This status indicates that the container is ready. 数分をかかります。This may take several minutes.

    注意

    展開が作成された後は、ポッドが表示されるまで数分かかります。After the deployment is created, it can take a few minutes before the pod is visible. 遅延は、クラスターをプルするため、 mssql server-linux Docker hub からイメージ。The delay is because the cluster pulls the mssql-server-linux image from the Docker hub. イメージの pull が最初に後、は、キャッシュされたイメージが既にノードへのデプロイが場合以降のデプロイが高速でしょう。After the image is pulled the first time, subsequent deployments might be faster if the deployment is to a node that already has the image cached on it.

  3. サービスが実行されていることを確認します。Verify the services are running. 次のコマンドを実行します。Run the following command:

    kubectl get services 
    

    このコマンドは、実行されているサービスとサービスの内部および外部の IP アドレスを返します。This command returns services that are running, as well as the internal and external IP addresses for the services. 外部 IP アドレスに注意してください、mssql-deploymentサービス。Note the external IP address for the mssql-deployment service. この IP アドレスを使用して、SQL Server に接続します。Use this IP address to connect to SQL Server.

    Get service コマンドのスクリーン ショット

    Kubernetes クラスター内のオブジェクトの状態に関する詳細については、次のコマンドを実行します。For more information about the status of the objects in the Kubernetes cluster, run:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    

SQL Server インスタンスに接続します。Connect to the SQL Server instance

説明に従って、コンテナーを構成する場合は、Azure の仮想ネットワークの外部からのアプリケーションで接続することができます。If you configured the container as described, you can connect with an application from outside the Azure virtual network. 使用して、saアカウントと、外部 IP アドレス、サービス。Use the sa account and the external IP address for the service. Kubernetes シークレットとして構成したパスワードを使用します。Use the password that you configured as the Kubernetes secret.

次のアプリケーションを使用すると、SQL Server インスタンスに接続します。You can use the following applications to connect to the SQL Server instance.

  • SSMSSSMS

  • SSDTSSDT

  • sqlcmdsqlcmd

    使用して接続するsqlcmd、次のコマンドを実行します。To connect with sqlcmd, run the following command:

    sqlcmd -S <External IP Address> -U sa -P "MyC0m9l&xP@ssw0rd"
    

    次の値に置き換えます。Replace the following values:

    • <External IP Address> IP アドレスを含む、mssql-deploymentサービス<External IP Address> with the IP address for the mssql-deployment service
    • MyC0m9l&xP@ssw0rd 自分のパスワードMyC0m9l&xP@ssw0rd with your password

エラーと回復を確認します。Verify failure and recovery

エラーと回復を確認するには、ポッドを削除できます。To verify failure and recovery, you can delete the pod. 次の手順を実行します。Do the following steps:

  1. SQL Server を実行して、ポッドを一覧表示します。List the pod running SQL Server.

    kubectl get pods
    

    SQL Server を実行して、ポッドの名前に注意してください。Note the name of the pod running SQL Server.

  2. ポッドを削除します。Delete the pod.

    kubectl delete pod mssql-deployment-0
    

    mssql-deployment-0 ポッド名の前の手順から返される値。mssql-deployment-0 is the value returned from the previous step for pod name.

Kubernetes に自動的に再作成ポッドを SQL Server インスタンスを回復し、永続的ストレージに接続します。Kubernetes automatically re-creates the pod to recover a SQL Server instance, and connect to the persistent storage. 使用kubectl get pods新しいポッドがデプロイされていることを確認します。Use kubectl get pods to verify that a new pod is deployed. 使用kubectl get servicesに新しいコンテナーの IP アドレスが同じであることを確認します。Use kubectl get services to verify that the IP address for the new container is the same.

まとめSummary

このチュートリアルでは、SQL Server のコンテナーを高可用の Kubernetes クラスターにデプロイする方法について説明しました。In this tutorial, you learned how to deploy SQL Server containers to a Kubernetes cluster for high availability.

  • SA パスワードを作成します。Create an SA password
  • ストレージを作成します。Create storage
  • 展開を作成します。Create the deployment
  • SQL Server Management Studio (SSMS) の接続します。Connect with SQL Server Management Studios (SSMS)
  • エラーと回復を確認します。Verify failure and recovery

次の手順Next steps