AKS でホストされるアプリケーションでの Azure Cache for Redis Enterprise または Azure Managed Redis のアクティブ レプリケーションの使用を開始する

このチュートリアルでは、Azure Kubernetes Service (AKS) でインベントリ アプリケーションをホストし、アクティブ geo レプリケーションを使用して Azure Cache for Redis Enterprise または Azure Managed Redis インスタンス内のデータを Azure リージョン間でレプリケートする方法について説明します。

[前提条件]

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。
  • 1 つの Azure Kubernetes Service クラスター - クラスターの作成の詳細については、「クイック スタート:Azure portal を使用して Azure Kubernetes Service (AKS) クラスターをデプロイする」を参照してください。 または、2 つの異なる AKS クラスターでデモ アプリケーションの 2 つのインスタンスをホストすることもできます。 運用環境では、クラスターと同じリージョンに配置された 2 つの異なるクラスターを使用して、アプリケーションの 2 つのバージョンをデプロイします。 このチュートリアルでは、アプリケーションの両方のインスタンスを同じ AKS クラスターにデプロイします。

Von Bedeutung

このチュートリアルでは、コンテナー、ポッド、サービスなどの Kubernetes の基本的な概念について理解していることを前提としています。

概要

このチュートリアルでは、3 つの異なる T シャツ オプションを示すサンプル在庫ページを使用します。 ユーザーは、各 T シャツを "購入" し、在庫の減少を確認できます。 このデモのユニークな点は、在庫アプリが 2 つの異なるリージョンで実行されることです。 通常、整合性の問題が発生しないように、在庫データを格納するデータベースを単一のリージョンで実行する必要があります。 他のデータベース バックエンドと同期を使用すると、異なる Azure リージョン間での呼び出しの待ち時間が長くなるため、顧客に不快な経験をさせる可能性があります。 Azure Cache for Redis Enterprise をバックエンドとして使用する場合、アクティブ geo レプリケーションを使用して 2 つのキャッシュをリンクすると、両方のリージョン間で在庫の整合性を維持しながら、同じリージョン内の Redis Enterprise の低待機時間のパフォーマンスを実現できます。

2 つの Azure Redis インスタンスを設定する

  1. Azure portal または任意の CLI ツールを使用して、 米国西部 2 リージョンに新しい Azure Cache for Redis Enterprise または Azure Managed Redis インスタンスを作成します。 または、任意のリージョンを使用することもできます。 クイックスタート ガイドを使用して作業を開始します。

  2. [詳細] タブで、次の操作を行います。

    1. [非 TLS アクセスのみ] を有効にします。
    2. [クラスタリング ポリシー][エンタープライズ] に設定します
    3. こちらのガイドを使用して、新しいアクティブ geo レプリケーション グループを構成します。 最終的には、両方のキャッシュを同じレプリケーション グループに追加します。 最初のキャッシュでグループ名を作成し、同じグループに 2 番目のキャッシュを追加します。

    Von Bedeutung

    このチュートリアルでは、デモに非 TLS ポートを使用しますが、運用環境では TLS ポートを使用することを強くお勧めします。

  3. 米国東部リージョンに、最初のキャッシュと同じ構成で別の Azure Cache for Redis Enterprise を設定します。 または、任意のリージョンを使用することもできます。 必ず、最初のキャッシュと同じレプリケーション グループを選択してください。

Kubernetes デプロイ ファイルを準備する

次の手順を使用して、2 つの .yml ファイルを作成します (2 つのリージョンで作成したキャッシュごとに 1 つのファイル)。

リージョン間のデータ レプリケーションを実際に示すために、同じアプリケーションの 2 つのインスタンスを異なるリージョンで実行します。 1 つのインスタンスをシアトル (west 名前空間) で実行し、2 つ目のインスタンスをニューヨーク (east 名前空間) で実行してみましょう。

west 名前空間

次の YAML ファイル内の次のフィールドを更新し、app_west.yaml として保存します。

  1. ポート サフィックスを削除した後、変数 REDIS_HOSTエンドポイント値 URL (10000) で更新します。
  2. REDIS_PASSWORD を "米国西部 2" キャッシュのアクセス キーで更新します。
  3. APP_LOCATION を更新して、このアプリケーション インスタンスが実行されているリージョンが表示されるようにします。 このキャッシュの場合、APP_LOCATIONSeattle に構成して、このアプリケーション インスタンスがシアトルで実行されていることを示します。
  4. 変数 namespace の値が、ファイル内の両方の場所で west であることを確認します。

コードは、次のようになります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shoppingcart-app
  namespace: west
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: shoppingcart
  template:
    metadata:
      labels:
        app: shoppingcart
    spec:
      containers:
      - name: demoapp
        image: mcr.microsoft.com/azure-redis-cache/redisactivereplicationdemo:latest
        resources:
          limits:
            cpu: "0.5"
            memory: "250Mi"
          requests:
            cpu: "0.5"
            memory: "128Mi"
        env:
         - name: REDIS_HOST
           value: "DemoWest.westus2.redisenterprise.cache.azure.net"
         - name: REDIS_PASSWORD
           value: "myaccesskey"
         - name: REDIS_PORT
           value: "10000"   # redis enterprise port
         - name: HTTP_PORT
           value: "8080"
         - name: APP_LOCATION
           value: "Seattle, WA" 
---
apiVersion: v1
kind: Service
metadata:
  name: shoppingcart-svc
  namespace: west
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: shoppingcart

east 名前空間

同じ YAML ファイルの別のコピーを app_east.yaml として保存します。 今度は、2 番目のキャッシュに対応する値を使用します。

  1. ポート サフィックスを削除した後、変数 REDIS_HOSTエンドポイント値 (10000) で更新します。
  2. REDIS_PASSWORD を "米国東部" キャッシュのアクセス キーで更新します。
  3. APP_LOCATION を更新して、このアプリケーション インスタンスが実行されているリージョンが表示されるようにします。 このキャッシュの場合、APP_LOCATIONNew York に構成して、このアプリケーション インスタンスがニューヨークで実行されていることを示します。
  4. 変数 namespace の値が、ファイル内の両方の場所で east であることを確認します。

コードは、次のようになります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shoppingcart-app
  namespace: east
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: shoppingcart
  template:
    metadata:
      labels:
        app: shoppingcart
    spec:
      containers:
      - name: demoapp
        image: mcr.microsoft.com/azure-redis-cache/redisactivereplicationdemo:latest
        resources:
          limits:
            cpu: "0.5"
            memory: "250Mi"
          requests:
            cpu: "0.5"
            memory: "128Mi"
        env:
         - name: REDIS_HOST
           value: "DemoEast.eastus.redisenterprise.cache.azure.net"
         - name: REDIS_PASSWORD
           value: "myaccesskey"
         - name: REDIS_PORT
           value: "10000"   # redis enterprise port
         - name: HTTP_PORT
           value: "8080"
         - name: APP_LOCATION
           value: "New York, NY" 
---
apiVersion: v1
kind: Service
metadata:
  name: shoppingcart-svc
  namespace: east
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: shoppingcart

Kubernetes CLI をインストールして AKS クラスターに接続する

このセクションでは、まず Kubernetes CLI をインストールしてから、AKS クラスターに接続します。

このチュートリアルでは、Azure Container Service クラスターが必要です。 アプリケーションの両方のインスタンスを同じ AKS クラスターにデプロイします。

Kubernetes CLI のインストール

Kubernetes CLI (kubectl) を使用して、ローカル コンピューターから Kubernetes クラスターに接続します。 ローカルで実行している場合は、次のコマンドを使用して kubectl をインストールできます。

az aks install-cli

Azure Cloud Shell を使用する場合、kubectl は既にインストールされているため、この手順はスキップできます。

2 つのリージョンで AKS クラスターに接続する

ポータルを使用して、米国西部 2 リージョンの AKS クラスターのリソース グループとクラスター名をコピーします。 AKS クラスターに接続するように kubectl を構成するには、リソース グループとクラスター名を指定して次のコマンドを使用します。

 az aks get-credentials --resource-group myResourceGroup --name myClusterName

次のコマンドを実行して、クラスターに接続できることを確認します。


kubectl get nodes

クラスター ノードの一覧を示す同様の出力が表示されます。

NAME                                STATUS   ROLES   AGE   VERSION
aks-agentpool-21274953-vmss000001   Ready    agent   1d    v1.24.15
aks-agentpool-21274953-vmss000003   Ready    agent   1d    v1.24.15
aks-agentpool-21274953-vmss000006   Ready    agent   1d    v1.24.15

アプリケーションをデプロイしてテストする

アプリケーションを AKS クラスターで実行するには、2 つの名前空間が必要です。 west を作成して、アプリケーションをデプロイします。

次のコマンドを実行して、アプリケーション インスタンスを west名前空間内の AKS クラスターにデプロイします。

kubectl create namespace west

kubectl apply -f app_west.yaml

デプロイとサービスが作成されたことを示す応答が表示されます。

deployment.apps/shoppingcart-app created
service/shoppingcart-svc created

アプリケーションをテストするには、次のコマンドを実行してポッドが実行されているかどうかをチェックします。

kubectl get pods -n west

次のように表示されれば、ポッドは正常に実行されています。

NAME                                READY   STATUS                       RESTARTS   AGE
shoppingcart-app-5fffdcb5cd-48bl5   1/1     Running                      0          68s

次のコマンドを実行して、アプリケーションのエンドポイントを取得します。

kubectl get service -n west

数分間、EXTERNAL-IP の状態が <pending> と表示される場合があります。 状態が IP アドレスに置き換えられるまで、再試行を続けます。

NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
shoppingcart-svc       LoadBalancer   10.0.166.147   20.69.136.105   80:30390/TCP   90s

External-IP が使用可能になったら、Web ブラウザーを開いてサービスの External-IP アドレスにアクセスすると、アプリケーションが表示されます。

同じデプロイ手順を実行して、米国東部リージョンで実行するデモ アプリケーションのインスタンスをデプロイします。

kubectl create namespace east

kubectl apply -f app_east.yml

kubectl get pods -n east

kubectl get service -n east

ブラウザーで 2 つのサービスをそれぞれ開いて、一方のリージョンで在庫を変更すると、もう一方のリージョンにほぼ即座に反映されることがわかります。 在庫データは、Redis Enterprise インスタンスに格納され、データはリージョン間でレプリケートされます。

おめでとうございます。 ボタンをクリックして、デモを確認してみましょう。

異なるリージョンで実行され、同じデータを表示しているショッピング カート アプリが表示されている 2 つのブラウザーを照合したスクリーンショット。

カウントをリセットするには、URL の後に /reset を追加します。

<IP address>/reset

デプロイをクリーンアップする

クラスターをクリーンアップするには、次のコマンドを実行します。

kubectl delete deployment shoppingcart-app -n west
kubectl delete service shoppingcart-svc -n west

kubectl delete deployment shoppingcart-app -n east
kubectl delete service shoppingcart-svc -n east

リソースをクリーンアップする

この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。

それ以外の場合、リソースを使い終わったら、課金されないように、作成した Azure リソース グループを削除できます。

Von Bedeutung

リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 リソースを既存のリソース グループ内に作成し、そのリソース グループ内に保持したいリソースが含まれている場合は、リソース グループを削除するのではなく、各リソースを個別に削除できます。

リソース グループを削除するには

  1. Azure portal にサインインし、 [リソース グループ] を選択します。

  2. 削除するリソース グループを選択します。

    多数のリソース グループがある場合は、[任意のフィールドのフィルター...] ボックスを使用し、この記事用に作成したリソース グループの名前を入力します。 結果リストでリソース グループを選びます。

    作業ペインの削除するリソース グループの一覧を示すスクリーンショット。

  3. [リソース グループの削除] を選択します。

  4. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、[削除] を選択します。

    削除を確認するためにリソース名を必要とするフォームを示すスクリーンショット。

しばらくすると、リソース グループとそのリソースのすべてが削除されます。