開始搭配使用 Azure Cache for Redis Enterprise 或 Azure Managed Redis 作用中複寫與 AKS 託管應用程式

在本教學課程中,您會在 Azure Kubernetes Service (AKS) 上裝載清查應用程式,並瞭解如何使用主動式異地複寫,在 Azure 區域中復寫 Azure Cache for Redis Enterprise 或 Azure 受控 Redis 實例中的數據。

先決條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂閱,請建立免費帳戶
  • 一個 Azure Kubernetes Service 叢集 - 如需建立叢集的詳細資訊,請參閱 快速入門:使用 Azure 入口網站部署 Azure Kubernetes Service (AKS) 叢集。 或者,您可以在兩個不同的 AKS 叢集上裝載兩個示範應用程式的實例。 在生產環境中,您會使用位於與叢集相同的區域中的兩個不同的叢集來部署兩個版本的應用程式。 在本教學課程中,您會在相同的 AKS 叢集上部署應用程式的兩個實例。

這很重要

本教學課程假設您已熟悉基本的 Kubernetes 概念,例如容器、Pod 和服務。

概觀

本教學課程使用範例清查頁面,其中顯示三個不同的 T 恤選項。 使用者可以「購買」每個 T 恤,並查看庫存下降。 此示範的獨特之處在於,我們會在兩個不同的區域中執行清查應用程式。 一般而言,您必須執行將清查數據儲存在單一區域中的資料庫,這樣就不會發生一致性問題。 透過其他資料庫後端和同步處理,客戶可能會有令人不快的體驗,因為不同 Azure 區域的呼叫延遲較高。 當您使用 Azure Cache for Redis Enterprise 作為後端時,您可以將兩個快取通過主動異地複寫連結在一起,以確保庫存在兩個區域中保持一致,同時享有相同區域中 Redis Enterprise 的低延遲效能。

設定兩個 Azure Redis 實例

  1. 使用 Azure 入口網站或您慣用的 CLI 工具,在美國 西部 2 區域中建立新的 Azure Cache for Redis Enterprise 或 Azure 受控 Redis 實例。 或者,您可以使用您選擇的任何區域。 使用快速入門指南 (部分機器翻譯) 來開始。

  2. 在 [ 進階] 索引標籤上:

    1. 僅啟用非 TLS 存取
    2. 叢集原則 設定為 企業
    3. 使用本指南設定新的作用中異地複寫群組。 最後,您會將這兩個快取新增至相同的複寫群組。 使用第一個快取建立組名,並將第二個快取新增至相同的群組。

    這很重要

    本教學課程使用非 TLS 埠進行示範,但強烈建議您將 TLS 埠用於生產環境中的任何專案。

  3. 美國東部區域中,使用與第一個快取相同的設定來設定另一個 Azure Cache for Redis Enterprise。 或者,您可以使用您選擇的任何區域。 請確定您選擇與第一個快取相同的複寫群組。

準備 Kubernetes 部署檔案

使用下列程式建立兩個.yml檔案。 針對您在兩個區域中建立的每個快取建立一個檔案。

為了示範跨區域的數據復寫,我們會在不同的區域中執行兩個相同應用程式的實例。 讓我們在 Seattle、west 命名空間中執行一個實例,而第二個實例則執行於紐約東部命名空間。

西部命名空間

更新下列 YAML 檔案中的下列欄位,並將其儲存為 app_west.yaml

  1. 拿掉埠號:10000 的後綴之後,將變數 REDIS_HOST 更新為端點值 URL。
  2. 使用REDIS_PASSWORD 快取的 [存取金鑰] 更新
  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

東部命名空間

將同一個 YAML 檔案的另一個複本儲存為 app_east.yaml。 這次,使用對應至您第二個快取的值。

  1. 移除埠後綴 10000 後,以 REDIS_HOST更新變數
  2. 使用REDIS_PASSWORD快取的 [存取金鑰] 更新
  3. 更新 APP_LOCATION 以顯示此應用程式實例執行所在的區域。 針對此快取,請將 設定 APP_LOCATION紐約 ,以指出此應用程式實例正在紐約執行。
  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 Kubernetes Service 叢集。 您會在相同的 AKS 叢集上部署應用程式的兩個實例。

安裝 Kubernetes CLI

使用 Kubernetes CLI _kubectl,從本機電腦連線到 Kubernetes 叢集。 如果您要在本機執行,您可以使用下列命令來安裝 kubectl。

az aks install-cli

如果您使用 Azure Cloud Shell,kubectl 已經安裝好,而且您可以略過此步驟。

連線至您在兩個區域中的 AKS 叢集

使用入口網站,複製位於美國西部 2 區域中 AKS 叢集的資源群組和叢集名稱。 若要設定 kubectl 以連線到 AKS 叢集,請使用下列命令搭配您的資源群組和叢集名稱:

 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 叢集上執行。 建立一個西區,然後部署應用程式。

執行下列命令,將應用程式實例部署至 西部 命名空間中的 AKS 叢集:

kubectl create namespace west

kubectl apply -f app_west.yaml

您會收到一則回應,表示您的部署和服務已建立。

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

若要測試應用程式,請執行下列命令來檢查 Pod 是否正在執行:

kubectl get pods -n west

您會看到 Pod 成功執行,如下所示:

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 可供使用,請開啟網頁瀏覽器至您服務的 External-IP 位址,您會看到應用程式。

執行相同的部署步驟,並部署示範應用程式的實例,以在美國東部區域執行。

kubectl create namespace east

kubectl apply -f app_east.yml

kubectl get pods -n east

kubectl get service -n east

在瀏覽器中同時開啟這兩個服務時,您會發現更改某個區域中的庫存幾乎會立即反映在另一個區域中。 清查數據會儲存在跨區域複寫數據的 Redis Enterprise 實例中。

您辦到了! 點擊按鈕並探索範例。

兩個顯示相同資料的購物車應用程式在不同區域運行的相符瀏覽器螢幕快照。

若要重設計數,請在網址後面新增 /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 資源群組,以避免衍生費用。

這很重要

刪除資源群組是無法回復的動作。 當您刪除資源群組時,其中包含的所有資源都將永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。 如果您是在包含需保留資源的現有資源群組內部建立資源,則可以個別刪除每個資源,而不必刪除整個資源群組。

刪除資源群組

  1. 登入 Azure 入口網站,然後選取 [資源群組]

  2. 選取您想要刪除的資源群組。

    如果有許多資源群組,請使用 [篩選任何欄位] 方塊,並輸入您針對本文所建立資源群組的名稱。 選取結果清單中的資源群組。

    此螢幕擷取畫面顯示工作窗格中要刪除的資源群組清單。

  3. 選擇 ,刪除資源群組

  4. 系統將會要求您確認是否刪除資源群組。 輸入您的資源群組名稱以進行確認,然後選取 [刪除]

    此螢幕擷取畫面顯示需要資源名稱才能確認刪除的表單。

不久後,系統便會刪除該資源群組及其所有的資源。