Rövid útmutató: Azure Kubernetes Service-fürt üzembe helyezése a Terraform használatával

Az Azure Kubernetes Service (AKS) egy felügyelt Kubernetes-szolgáltatás, amely lehetővé teszi a fürtök gyors üzembe helyezését és kezelését. Ebben a rövid útmutatóban a következőket hajtja végre:

  • AKS-fürt üzembe helyezése a Terraform használatával.
  • Többtárolós mintaalkalmazás futtatása mikroszolgáltatások és webes kezelőfelületek egy kiskereskedelmi forgatókönyvet szimuláló csoportjával.

Feljegyzés

Az AKS-fürtök gyors üzembe helyezésének megkezdéséhez ez a cikk a csak kiértékelési célokra alapértelmezett beállításokkal rendelkező fürtök üzembe helyezésének lépéseit tartalmazza. Az éles üzemre kész fürtök üzembe helyezése előtt javasoljuk, hogy ismerkedjen meg az alapszintű referenciaarchitektúrával, és gondolja át, hogyan igazodik az üzleti követelményekhez.

Mielőtt elkezdené

  • A rövid útmutató feltételezi, hogy rendelkezik a Kubernetes használatára vonatkozó alapvető ismeretekkel. További információkért tekintse meg az Azure Kubernetes Service (AKS) Kubernetes alapfogalmait.
  • Aktív előfizetéssel rendelkező Azure-fiókra van szüksége. Ha nem rendelkezik ilyen fiókkal, hozzon létre ingyenes fiókot.
  • Kövesse az utasításokat a parancssori felület alapján.

Feljegyzés

Az Azure Linux-csomópontkészlet mostantól általánosan elérhető (GA). Az előnyökről és az üzembe helyezés lépéseiről az AKS-hez készült Azure Linux Container Host bemutatása című témakörben olvashat.

Bejelentkezés az Azure-fiókjába

Először jelentkezzen be az Azure-fiókjába, és hitelesítse magát a következő szakaszban ismertetett módszerek egyikével.

Terraform- és Azure-hitelesítési forgatókönyvek

A Terraform csak az Azure CLI-vel támogatja az Azure-ba történő hitelesítést. Az Azure PowerShell használatával történő hitelesítés nem támogatott. Ezért bár használhatja az Azure PowerShell-modult a Terraform-munka során, először hitelesítenie kell magát az Azure-ban az Azure CLI használatával.

Ez a cikk bemutatja, hogyan hitelesítheti a Terraformot az Azure-ban az alábbi helyzetekben. A Terraform Azure-beli hitelesítésének lehetőségeiről további információt az Azure CLI-vel végzett hitelesítés című témakörben talál.

Hitelesítés az Azure-ban Egy Microsoft-fiókon keresztül

A Microsoft-fiók egy felhasználónév (e-mailhez és hitelesítő adataihoz társítva), amely a Microsoft-szolgáltatások – például az Azure – bejelentkezésére szolgál. Egy Microsoft-fiók társítható egy vagy több Azure-előfizetéshez, és ezek közül az egyik az alapértelmezett.

Az alábbi lépések bemutatják, hogyan:

  • Interaktív bejelentkezés az Azure-ba Microsoft-fiókkal
  • A fiók társított Azure-előfizetéseinek listázása (az alapértelmezettet is beleértve)
  • Állítsa be az aktuális előfizetést.
  1. Nyisson meg egy parancssort, amely hozzáfér az Azure CLI-hez.

  2. Futtassa az bejelentkezést paraméterek nélkül, és kövesse az utasításokat az Azure-ba való bejelentkezéshez.

    az login
    

    Főbb pontok:

    • A sikeres bejelentkezés az login után megjelenik a bejelentkezett Microsoft-fiókhoz társított Azure-előfizetések listája, beleértve az alapértelmezett előfizetést is.
  3. Az aktuális Azure-előfizetés megerősítéséhez futtassa az az account show-t.

    az account show
    
  4. Egy adott Microsoft-fiókhoz tartozó Összes Azure-előfizetés nevének és azonosítójának megtekintéséhez futtassa az az account listát.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Főbb pontok:

    • Cserélje le a <microsoft_account_email> helyőrzőt arra a Microsoft-fiók e-mail-címére, amelynek Azure-előfizetéseit listázni szeretné.
    • Élő fiókkal – például Hotmail vagy Outlook – előfordulhat, hogy meg kell adnia a teljes e-mail-címet. Ha például az e-mail-címe, admin@hotmail.comelőfordulhat, hogy a helyőrzőt a következőre live.com#admin@hotmail.comkell cserélnie: .
  5. Egy adott Azure-előfizetés használatához futtassa az az account setet.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Főbb pontok:

    • Cserélje le a <subscription_id_or_subscription_name> helyőrzőt a használni kívánt előfizetés azonosítójára vagy nevére.
    • A hívás az account set nem jeleníti meg a megadott Azure-előfizetésre való váltás eredményét. Ezzel azonban ellenőrizheti, az account show hogy az azure-előfizetés megváltozott-e.
    • Ha az előző lépésben futtatja a az account list parancsot, láthatja, hogy az alapértelmezett Azure-előfizetés a megadott az account setelőfizetésre módosult.

Egyszerű szolgáltatás létrehozása

Az Azure-szolgáltatásokat ( például a Terraformot) üzembe helyező vagy használó automatizált eszközöknek mindig korlátozott engedélyekkel kell rendelkezniük. Ahelyett, hogy az alkalmazások teljes jogosultsággal rendelkező felhasználóként jelentkezzenek be, az Azure egyszerű szolgáltatásneveket biztosít.

A leggyakoribb minta az, hogy interaktívan bejelentkezik az Azure-ba, létrehoz egy szolgáltatásnevet, teszteli a szolgáltatásnevet, majd ezt a szolgáltatásnevet használja a jövőbeli hitelesítéshez (interaktívan vagy a szkriptekből).

  1. Szolgáltatásnév létrehozásához jelentkezzen be az Azure-ba. Miután egy Microsoft-fiókon keresztül hitelesítést végzett az Azure-ban, térjen vissza ide.

  2. Ha szolgáltatásnevet hoz létre a Git Bashből, állítsa be a környezeti változót MSYS_NO_PATHCONV . (Ez a lépés nem szükséges a Cloud Shell használata esetén.)

    export MSYS_NO_PATHCONV=1    
    

    Főbb pontok:

    • A környezeti változót globálisan (az MSYS_NO_PATHCONV összes terminál-munkamenethez) vagy helyileg (csak az aktuális munkamenethez) állíthatja be. Mivel a szolgáltatásnév létrehozása nem gyakran történik, a minta beállítja az aktuális munkamenet értékét. Ha globálisan szeretné beállítani ezt a környezeti változót, adja hozzá a beállítást a ~/.bashrc fájlhoz.
  3. Szolgáltatásnév létrehozásához futtassa az az ad sp create-for-rbac parancsot.

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Főbb pontok:

    • Lecserélheti a <service-principal-name> környezetet egy egyéni névre, vagy teljesen kihagyhatja a paramétert. Ha kihagyja a paramétert, a szolgáltatásnév az aktuális dátum és idő alapján jön létre.
    • Sikeres befejezés után az ad sp create-for-rbac több értéket is megjelenít. A appIdkövetkező lépésben a , passwordés tenant az értékek lesznek használatban.
    • A jelszó nem kérhető le, ha elveszett. Ezért a jelszót biztonságos helyen kell tárolnia. Ha elfelejti a jelszavát, visszaállíthatja a szolgáltatásnév hitelesítő adatait.
    • Ebben a cikkben egy közreműködői szerepkörrel rendelkező szolgáltatásnevet használunk. A szerepköralapú hozzáférés-vezérlési (RBAC-) szerepkörökről további információt az RBAC: Beépített szerepkörök című témakörben talál.
    • A szolgáltatásnév létrehozásának kimenete bizalmas hitelesítő adatokat tartalmaz. Győződjön meg arról, hogy ezeket a hitelesítő adatokat nem tartalmazza a kódban, vagy nem ellenőrzi a hitelesítő adatokat a forrásvezérlőben.
    • A szolgáltatásnév Azure CLI-vel történő létrehozásakor elérhető lehetőségekről további információt az Azure CLI-vel rendelkező Azure-szolgáltatásnév létrehozása című cikkben talál.

Szolgáltatásnév hitelesítő adatainak megadása környezeti változókban

Miután létrehozott egy egyszerű szolgáltatást, környezeti változókon keresztül megadhatja annak hitelesítő adatait a Terraformban.

  1. Szerkessze a ~/.bashrc fájlt a következő környezeti változók hozzáadásával.

    export ARM_SUBSCRIPTION_ID="<azure_subscription_id>"
    export ARM_TENANT_ID="<azure_subscription_tenant_id>"
    export ARM_CLIENT_ID="<service_principal_appid>"
    export ARM_CLIENT_SECRET="<service_principal_password>"
    
  2. A ~/.bashrc szkript végrehajtásához futtassa source ~/.bashrc (vagy annak rövidített megfelelője . ~/.bashrc). A szkript automatikus futtatásához kiléphet és újra megnyithatja a Cloud Shellt.

    . ~/.bashrc
    
  3. A környezeti változók beállítása után az alábbi módon ellenőrizheti az értékeket:

    printenv | grep ^ARM*
    

Főbb pontok:

  • A környezeti változókhoz hasonlóan az Azure-előfizetési érték Terraform-szkriptből való eléréséhez használja a következő szintaxist: ${env.<environment_variable>} Az érték eléréséhez például adja meg a ARM_SUBSCRIPTION_ID .${env.ARM_SUBSCRIPTION_ID}
  • A Terraform végrehajtási terveinek létrehozása és alkalmazása módosításokat hajt végre a szolgáltatásnévhez társított Azure-előfizetésen. Ez a tény néha zavaró lehet, ha egy Azure-előfizetésbe van bejelentkezve, és a környezeti változók egy második Azure-előfizetésre mutatnak. Tekintsük meg a következő példát, hogy elmagyarázzuk. Tegyük fel, hogy két Azure-előfizetése van: SubA és SubB. Ha az aktuális Azure-előfizetés SubA (a rendszer által az account showmeghatározott), míg a környezeti változók AlB-ra mutatnak, a Terraform által végrehajtott módosítások a SubB-en vannak. Ezért be kell jelentkeznie az AlB-előfizetésbe az Azure CLI-parancsok vagy az Azure PowerShell-parancsok futtatásához a módosítások megtekintéséhez.

Szolgáltatásnév hitelesítő adatainak megadása Terraform-szolgáltatói blokkban

Az Azure-szolgáltatói blokk szintaxist határoz meg, amely lehetővé teszi az Azure-előfizetés hitelesítési adatainak megadását.

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

provider "azurerm" {
  features {}

  subscription_id   = "<azure_subscription_id>"
  tenant_id         = "<azure_subscription_tenant_id>"
  client_id         = "<service_principal_appid>"
  client_secret     = "<service_principal_password>"
}

# Your code goes here

Figyelemfelhívás

Az Azure-előfizetés hitelesítő adatainak terraform konfigurációs fájlban való megadása kényelmes lehet , különösen teszteléskor. Nem ajánlott azonban a hitelesítő adatokat olyan világos szöveges fájlban tárolni, amelyet nem megbízható személyek tekinthetnek meg.

A Terraform-kód implementálása

Feljegyzés

A cikk mintakódja az Azure Terraform GitHub-adattárban található. Megtekintheti a Terraform aktuális és korábbi verzióinak teszteredményeit tartalmazó naplófájlt.

További cikkek és mintakód, amelyek bemutatják, hogyan használható a Terraform az Azure-erőforrások kezelésére

  1. Hozzon létre egy könyvtárat, amellyel tesztelheti a Terraform-mintakódot, és az aktuális könyvtárként használhatja.

  2. Hozzon létre egy elnevezett providers.tf fájlt, és szúrja be a következő kódot:

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azapi = {
          source  = "azure/azapi"
          version = "~>1.5"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
        time = {
          source  = "hashicorp/time"
          version = "0.9.1"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Hozzon létre egy elnevezett ssh.tf fájlt, és szúrja be a következő kódot:

    resource "random_pet" "ssh_key_name" {
      prefix    = "ssh"
      separator = ""
    }
    
    resource "azapi_resource_action" "ssh_public_key_gen" {
      type        = "Microsoft.Compute/sshPublicKeys@2022-11-01"
      resource_id = azapi_resource.ssh_public_key.id
      action      = "generateKeyPair"
      method      = "POST"
    
      response_export_values = ["publicKey", "privateKey"]
    }
    
    resource "azapi_resource" "ssh_public_key" {
      type      = "Microsoft.Compute/sshPublicKeys@2022-11-01"
      name      = random_pet.ssh_key_name.id
      location  = azurerm_resource_group.rg.location
      parent_id = azurerm_resource_group.rg.id
    }
    
    output "key_data" {
      value = jsondecode(azapi_resource_action.ssh_public_key_gen.output).publicKey
    }
    
  4. Hozzon létre egy elnevezett main.tf fájlt, és szúrja be a következő kódot:

    # Generate random resource group name
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "random_pet" "azurerm_kubernetes_cluster_name" {
      prefix = "cluster"
    }
    
    resource "random_pet" "azurerm_kubernetes_cluster_dns_prefix" {
      prefix = "dns"
    }
    
    resource "azurerm_kubernetes_cluster" "k8s" {
      location            = azurerm_resource_group.rg.location
      name                = random_pet.azurerm_kubernetes_cluster_name.id
      resource_group_name = azurerm_resource_group.rg.name
      dns_prefix          = random_pet.azurerm_kubernetes_cluster_dns_prefix.id
    
      identity {
        type = "SystemAssigned"
      }
    
      default_node_pool {
        name       = "agentpool"
        vm_size    = "Standard_D2_v2"
        node_count = var.node_count
      }
      linux_profile {
        admin_username = var.username
    
        ssh_key {
          key_data = jsondecode(azapi_resource_action.ssh_public_key_gen.output).publicKey
        }
      }
      network_profile {
        network_plugin    = "kubenet"
        load_balancer_sku = "standard"
      }
    }
    
  5. Hozzon létre egy elnevezett variables.tf fájlt, és szúrja be a következő kódot:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "node_count" {
      type        = number
      description = "The initial quantity of nodes for the node pool."
      default     = 3
    }
    
    variable "msi_id" {
      type        = string
      description = "The Managed Service Identity ID. Set this value if you're running this example using Managed Identity as the authentication method."
      default     = null
    }
    
    variable "username" {
      type        = string
      description = "The admin username for the new cluster."
      default     = "azureadmin"
    }
    
  6. Hozzon létre egy elnevezett outputs.tf fájlt, és szúrja be a következő kódot:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "kubernetes_cluster_name" {
      value = azurerm_kubernetes_cluster.k8s.name
    }
    
    output "client_certificate" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config[0].client_certificate
      sensitive = true
    }
    
    output "client_key" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config[0].client_key
      sensitive = true
    }
    
    output "cluster_ca_certificate" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config[0].cluster_ca_certificate
      sensitive = true
    }
    
    output "cluster_password" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config[0].password
      sensitive = true
    }
    
    output "cluster_username" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config[0].username
      sensitive = true
    }
    
    output "host" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config[0].host
      sensitive = true
    }
    
    output "kube_config" {
      value     = azurerm_kubernetes_cluster.k8s.kube_config_raw
      sensitive = true
    }
    

A Terraform inicializálása

Futtassa a Terraform init parancsot a Terraform üzembe helyezésének inicializálásához. Ez a parancs letölti az Azure-erőforrások kezeléséhez szükséges Azure-szolgáltatót.

terraform init -upgrade

Főbb pontok:

  • A -upgrade paraméter frissíti a szükséges szolgáltatói beépülő modulokat a legújabb verzióra, amely megfelel a konfiguráció verziókorlátozásainak.

Terraform végrehajtási terv létrehozása

Végrehajtási terv létrehozásához futtassa a Terraform-tervet .

terraform plan -out main.tfplan

Főbb pontok:

  • A terraform plan parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat.
  • Az opcionális -out paraméter lehetővé teszi a terv kimeneti fájljának megadását. -out A paraméter használatával biztosítható, hogy a vizsgált terv pontosan az alkalmazott legyen.

Terraform végrehajtási terv alkalmazása

A terraform futtatásával alkalmazza a végrehajtási tervet a felhőinfrastruktúrára.

terraform apply main.tfplan

Főbb pontok:

  • A példaparancs terraform apply feltételezi, hogy korábban futtatott terraform plan -out main.tfplan.
  • Ha másik fájlnevet adott meg a -out paraméterhez, használja ugyanazt a fájlnevet a hívásban terraform apply.
  • Ha nem használta a paramétert -out , hívjon terraform apply paraméterek nélkül.

Az eredmények ellenőrzése

  1. Kérje le az Azure-erőforráscsoport nevét az alábbi paranccsal.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Az új Kubernetes-fürt nevének megjelenítése az az aks list paranccsal.

    az aks list \
      --resource-group $resource_group_name \
      --query "[].{\"K8s cluster name\":name}" \
      --output table
    
  3. Kérje le a Kubernetes-konfigurációt a Terraform állapotából, és tárolja egy olyan fájlban, amely kubectl az alábbi paranccsal olvasható.

    echo "$(terraform output kube_config)" > ./azurek8s
    
  4. Ellenőrizze, hogy az előző parancs nem adott hozzá ASCII EOT-karaktert az alábbi paranccsal.

    cat ./azurek8s
    

    Főbb pontok:

    • Ha az elején és EOT végén látható<< EOT, távolítsa el ezeket a karaktereket a fájlból. Ellenkező esetben a következő hibaüzenet jelenhet meg: error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
  5. Állítson be egy környezeti változót, hogy kubectl az alábbi paranccsal a megfelelő konfigurációt vegye fel.

    export KUBECONFIG=./azurek8s
    
  6. A parancs használatával kubectl get nodes ellenőrizze a fürt állapotát.

    kubectl get nodes
    

Főbb pontok:

  • Az AKS-fürt létrehozásakor a figyelés lehetővé tette a fürtcsomópontok és podok állapotmetrikáinak rögzítését. Ezek az állapotmetrikák elérhetők az Azure Portalon. A tároló állapotának monitorozásával kapcsolatos további információ az Azure Kubernetes Service állapotmonitorozásáról szóló témakörben érhető el.
  • A Terraform végrehajtási terv alkalmazásakor több kulcsérték is kimenetként van besorolva. A gazdagép címe, az AKS-fürt felhasználóneve és az AKS-fürt jelszava például kimenet.

Az alkalmazás üzembe helyezése

Az alkalmazás üzembe helyezéséhez egy jegyzékfájl használatával hozza létre az AKS Store-alkalmazás futtatásához szükséges összes objektumot. A Kubernetes-jegyzékfájl meghatározza a fürt kívánt állapotát, például hogy mely tárolólemezképeket kell futtatni. A jegyzék a következő Kubernetes-üzemelő példányokat és szolgáltatásokat tartalmazza:

Képernyőkép az Azure Store mintaarchitektúrájáról.

  • Áruházi előtér: Webalkalmazás az ügyfelek számára termékek megtekintésére és megrendelések leadására.
  • Termékszolgáltatás: A termékinformációkat jeleníti meg.
  • Rendelési szolgáltatás: Rendeléseket rendel.
  • Nyúl MQ: Üzenetsor rendelési üzenetsorhoz.

Feljegyzés

Nem javasoljuk az állapotalapú tárolók( például a Rabbit MQ) futtatását az éles környezetben tartós tárolás nélkül. Ezeket itt az egyszerűség kedvéért használjuk, de olyan felügyelt szolgáltatások használatát javasoljuk, mint az Azure CosmosDB vagy az Azure Service Bus.

  1. Hozzon létre egy fájlt, aks-store-quickstart.yaml és másolja a következő jegyzékbe:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: rabbitmq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: rabbitmq
      template:
        metadata:
          labels:
            app: rabbitmq
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: rabbitmq
            image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine
            ports:
            - containerPort: 5672
              name: rabbitmq-amqp
            - containerPort: 15672
              name: rabbitmq-http
            env:
            - name: RABBITMQ_DEFAULT_USER
              value: "username"
            - name: RABBITMQ_DEFAULT_PASS
              value: "password"
            resources:
              requests:
                cpu: 10m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            volumeMounts:
            - name: rabbitmq-enabled-plugins
              mountPath: /etc/rabbitmq/enabled_plugins
              subPath: enabled_plugins
          volumes:
          - name: rabbitmq-enabled-plugins
            configMap:
              name: rabbitmq-enabled-plugins
              items:
              - key: rabbitmq_enabled_plugins
                path: enabled_plugins
    ---
    apiVersion: v1
    data:
      rabbitmq_enabled_plugins: |
        [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0].
    kind: ConfigMap
    metadata:
      name: rabbitmq-enabled-plugins            
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: rabbitmq
    spec:
      selector:
        app: rabbitmq
      ports:
        - name: rabbitmq-amqp
          port: 5672
          targetPort: 5672
        - name: rabbitmq-http
          port: 15672
          targetPort: 15672
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: order-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: order-service
      template:
        metadata:
          labels:
            app: order-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: order-service
            image: ghcr.io/azure-samples/aks-store-demo/order-service:latest
            ports:
            - containerPort: 3000
            env:
            - name: ORDER_QUEUE_HOSTNAME
              value: "rabbitmq"
            - name: ORDER_QUEUE_PORT
              value: "5672"
            - name: ORDER_QUEUE_USERNAME
              value: "username"
            - name: ORDER_QUEUE_PASSWORD
              value: "password"
            - name: ORDER_QUEUE_NAME
              value: "orders"
            - name: FASTIFY_ADDRESS
              value: "0.0.0.0"
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
          initContainers:
          - name: wait-for-rabbitmq
            image: busybox
            command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;']
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: order-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: order-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: product-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: product-service
      template:
        metadata:
          labels:
            app: product-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: product-service
            image: ghcr.io/azure-samples/aks-store-demo/product-service:latest
            ports:
            - containerPort: 3002
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 1m
                memory: 7Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: product-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3002
        targetPort: 3002
      selector:
        app: product-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: store-front
      template:
        metadata:
          labels:
            app: store-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: store-front
            image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
            ports:
            - containerPort: 8080
              name: store-front
            env: 
            - name: VUE_APP_ORDER_SERVICE_URL
              value: "http://order-service:3000/"
            - name: VUE_APP_PRODUCT_SERVICE_URL
              value: "http://product-service:3002/"
            resources:
              requests:
                cpu: 1m
                memory: 200Mi
              limits:
                cpu: 1000m
                memory: 512Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: store-front
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: store-front
      type: LoadBalancer
    

    A YAML-jegyzékfájlok lebontásához tekintse meg az üzembe helyezéseket és a YAML-jegyzékeket.

    Ha helyileg hozza létre és menti a YAML-fájlt, feltöltheti a jegyzékfájlt az alapértelmezett könyvtárba a CloudShellben a Fájlok feltöltése/letöltése gombra kattintva, majd kiválasztva a fájlt a helyi fájlrendszerből.

  2. Telepítse az alkalmazást a kubectl apply paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f aks-store-quickstart.yaml
    

    Az alábbi példakimenet az üzemelő példányokat és szolgáltatásokat mutatja be:

    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    

Az alkalmazás tesztelése

Az alkalmazás futtatásakor egy Kubernetes-szolgáltatás elérhetővé teszi az alkalmazás előtérét az interneten. A folyamat eltarthat pár percig.

  1. Ellenőrizze az üzembe helyezett podok állapotát a kubectl get pods paranccsal. Az összes podot a folytatás előtt készítse Running el.

    kubectl get pods
    
  2. Ellenőrizze, hogy van-e nyilvános IP-cím az áruházi előtéralkalmazáshoz. A folyamat figyelése az kubectl get service argumentumot tartalmazó paranccsal --watch .

    kubectl get service store-front --watch
    

    A szolgáltatás KÜLSŐ-IP-kimenetestore-front kezdetben függőben lévőként jelenik meg:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    
  3. Ha a külső IP-cím függőben lévőrőltényleges nyilvános IP-címre változik, állítsa CTRL-C le a kubectl figyelés folyamatát.

    Az alábbi példakimenet a szolgáltatáshoz rendelt érvényes nyilvános IP-címet jeleníti meg:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   20.62.159.19   80:30025/TCP   4h5m
    
  4. Nyisson meg egy webböngészőt a szolgáltatás külső IP-címére az Azure Store-alkalmazás működés közbeni megtekintéséhez.

    Képernyőkép az AKS Store mintaalkalmazásról.

Az erőforrások eltávolítása

AKS-erőforrások törlése

Ha már nincs szüksége a Terraformon keresztül létrehozott erőforrásokra, hajtsa végre az alábbi lépéseket:

  1. Futtassa a Terraform-tervet , és adja meg a jelölőt destroy .

    terraform plan -destroy -out main.destroy.tfplan
    

    Főbb pontok:

    • A terraform plan parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat.
    • Az opcionális -out paraméter lehetővé teszi a terv kimeneti fájljának megadását. -out A paraméter használatával biztosítható, hogy a vizsgált terv pontosan az alkalmazott legyen.
  2. A végrehajtási terv alkalmazásához futtassa a terraformát .

    terraform apply main.destroy.tfplan
    

Szolgáltatásnév törlése

  1. Kérje le a szolgáltatásnév azonosítóját az alábbi paranccsal.

    sp=$(terraform output -raw sp)
    
  2. Törölje a szolgáltatásnevet az az ad sp delete paranccsal.

    az ad sp delete --id $sp
    

Az Azure Developer CLI-sablon klónozása

Az Azure Developer CLI lehetővé teszi a minták gyors letöltését az Azure-Samples adattárból. Rövid útmutatónkban letölti az aks-store-demo alkalmazást. Az általános használati esetekről további információt az áttekintésben azdtalál.

  1. Klónozza az AKS-tároló demósablonját az Azure-Samples adattárból a azd init paraméterrel rendelkező --template paranccsal.

    azd init --template Azure-Samples/aks-store-demo
    
  2. Adjon meg egy olyan környezetnevet a projektnek, amely csak alfanumerikus karaktereket és kötőjeleket használ, például aks-terraform-1.

    Enter a new environment name: aks-terraform-1
    

Bejelentkezés az Azure Cloud-fiókjába

A azd sablon tartalmazza a szolgáltatások létrehozásához szükséges összes kódot, de be kell jelentkeznie az Azure-fiókjába az alkalmazás AKS-en való üzemeltetéséhez.

  1. Jelentkezzen be a fiókjába a azd auth login paranccsal.

    azd auth login
    
  2. Másolja ki a kimenetben megjelenő eszközkódot, és nyomja le az Enter billentyűt a bejelentkezéshez.

    Start by copying the next code: XXXXXXXXX
    Then press enter and continue to log in from your browser...
    

    Fontos

    Ha hálózaton kívüli virtuális gépet vagy GitHub Codespace-t használ, bizonyos Azure-biztonsági szabályzatok ütközéseket okoznak a bejelentkezéshez azd auth login. Ha itt problémát tapasztal, kövesse a megadott azd hitelesítési áthidaló megoldást, amely magában foglalja a curl localhost URL-címre irányuló kérés használatát, amelyre a futtatás azd auth loginután átirányított.

  3. Hitelesítés a szervezet bejelentkezési lapján található hitelesítő adataival.

  4. Győződjön meg arról, hogy az Azure CLI-ből próbál csatlakozni.

  5. Ellenőrizze az "Eszközkód hitelesítése befejeződött. Be van jelentkezve az Azure-ba." ekkor megjelenik az eredeti terminálban.

    Waiting for you to complete authentication in the browser...
    Device code authentication completed.
    Logged in to Azure.
    

azd auth kerülő megoldás

Ehhez a kerülő megoldáshoz telepítenie kell az Azure CLI-t .

  1. Nyisson meg egy terminálablakot, és jelentkezzen be az Azure CLI-vel a az login paraméter beállításával --scopehttps://graph.microsoft.com/.default.

    az login --scope https://graph.microsoft.com/.default
    

    A böngésző hozzáférési jogkivonatának létrehozásához egy új lapon lévő hitelesítési lapra kell átirányítani, ahogyan az alábbi példában látható:

    https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
    
  2. Másolja ki annak a weblapnak a localhost URL-címét, amely a bejelentkezés azd auth loginután érkezett.

  3. Egy új terminálablakban a következő curl kéréssel jelentkezzen be. Ügyeljen arra, hogy a helyőrzőt <localhost> cserélje le az előző lépésben másolt localhost URL-címre.

    curl <localhost>
    

    A sikeres bejelentkezés egy HTML-weblapot ad ki, ahogy az a következő példában is látható:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="refresh" content="60;url=https://docs.microsoft.com/cli/azure/">
        <title>Login successfully</title>
        <style>
            body {
                font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            }
    
            code {
                font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
                display: inline-block;
                background-color: rgb(242, 242, 242);
                padding: 12px 16px;
                margin: 8px 0px;
            }
        </style>
    </head>
    <body>
        <h3>You have logged into Microsoft Azure!</h3>
        <p>You can close this window, or we will redirect you to the <a href="https://docs.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p>
        <h3>Announcements</h3>
        <p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p>
        <p>You may opt-in to use WAM by running the following commands:</p>
        <code>
            az config set core.allow_broker=true<br>
            az account clear<br>
            az login
        </code>
    </body>
    </html>
    
  4. Zárja be az aktuális terminált, és nyissa meg az eredeti terminált. Meg kell jelennie az előfizetések JSON-listájának.

  5. Másolja ki a id használni kívánt előfizetés mezőjét.

  6. Állítsa be az előfizetést a az account set paranccsal.

    az account set --subscription <subscription_id>
    

Erőforrások létrehozása és üzembe helyezése a fürthöz

Az alkalmazás üzembe helyezéséhez a azd up paranccsal hozza létre az AKS Store-alkalmazás futtatásához szükséges összes objektumot.

  • A azure.yaml fájlok meghatározzák a fürt kívánt állapotát, például hogy mely tárolólemezképeket kell lekérni, és az alábbi Kubernetes-telepítéseket és -szolgáltatásokat tartalmazzák:

Az Azure Store mintaarchitektúrát bemutató ábra.

  • Áruházi előtér: Webalkalmazás az ügyfelek számára termékek megtekintésére és megrendelések leadására.
  • Termékszolgáltatás: A termékinformációkat jeleníti meg.
  • Rendelési szolgáltatás: Rendeléseket rendel.
  • Nyúl MQ: Üzenetsor rendelési üzenetsorhoz.

Feljegyzés

Nem javasoljuk az állapotalapú tárolók( például a Rabbit MQ) futtatását az éles környezetben tartós tárolás nélkül. Ezeket itt az egyszerűség kedvéért használjuk, de ajánlott felügyelt szolgáltatásokat használni, például az Azure Cosmos DB-t vagy az Azure Service Bust.

Alkalmazáserőforrások üzembe helyezése

A azd rövid útmutató sablonja létrehoz egy új erőforráscsoportot egy AKS-fürttel és egy Azure Key Vaulttal. A kulcstartó tárolja az ügyfél titkos kulcsait, és futtatja a szolgáltatásokat a pets névtérben.

  1. Hozza létre az összes alkalmazás-erőforrást a azd up paranccsal.

    azd up
    

    azd upFuttatja a mappa összes horgát az azd-hooks alkalmazásszolgáltatások előregisztrációjához, kiépítéséhez és üzembe helyezéséhez.

    A horgok testreszabásával egyéni kódot adhat hozzá a azd munkafolyamat szakaszaihoz. További információ: a azd horgok referenciája .

  2. Válasszon ki egy Azure-előfizetést a számlázási használathoz.

    ? Select an Azure Subscription to use:  [Use arrows to move, type to filter]
    > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
    
  3. Válasszon ki egy régiót, amelyben üzembe szeretné helyezni az alkalmazást.

    Select an Azure location to use:  [Use arrows to move, type to filter]
      1.  (South America) Brazil Southeast (brazilsoutheast)
      2.  (US) Central US (centralus)
      3.  (US) East US (eastus)
    > 43. (US) East US 2 (eastus2)
      4.  (US) East US STG (eastusstg)
      5.  (US) North Central US (northcentralus)
      6.  (US) South Central US (southcentralus)
    

    azd automatikusan futtatja az elő- és a postprovision-horgokat az alkalmazás erőforrásainak létrehozásához. A folyamat eltarthat pár percig. Ha elkészült, az alábbi példához hasonló kimenetnek kell megjelennie:

    SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
    

Terraform-tervek létrehozása

Az Azure Developer-sablonban a /infra/terraform mappa tartalmazza a Terraform-csomag létrehozásához használt összes kódot.

A Terraform üzembe helyezi és futtatja a parancsokat terraform apply a kiépítési azdlépés részeként. Ha elkészült, az alábbi példához hasonló kimenetnek kell megjelennie:

Plan: 5 to add, 0 to change, 0 to destroy.
...
Saved the plan to: /workspaces/aks-store-demo/.azure/aks-terraform-azd/infra/terraform/main.tfplan

Az alkalmazás tesztelése

Az alkalmazás futtatásakor egy Kubernetes-szolgáltatás elérhetővé teszi az alkalmazás előtérét az interneten. A folyamat eltarthat pár percig.

  1. Állítsa be a névteret bemutató névtérként pets a kubectl set-context parancs használatával.

    kubectl config set-context --current --namespace=pets
    
  2. Ellenőrizze az üzembe helyezett podok állapotát a kubectl get pods paranccsal. Győződjön meg arról, hogy az összes pod a folytatás előtt van Running .

    kubectl get pods
    
  3. Ellenőrizze, hogy van-e nyilvános IP-cím az áruházi előtéralkalmazáshoz, és figyelje az előrehaladást az kubectl get service--watch argumentumot tartalmazó paranccsal.

    kubectl get service store-front --watch
    

    A szolgáltatás KÜLSŐ-IP-kimenetestore-front kezdetben függőben lévőként jelenik meg:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    
  4. Ha a külső IP-cím függőben lévőrőltényleges nyilvános IP-címre változik, állítsa CTRL-C le a kubectl figyelés folyamatát.

    Az alábbi mintakimenet a szolgáltatáshoz rendelt érvényes nyilvános IP-címet jeleníti meg:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   20.62.159.19   80:30025/TCP   4h5m
    
  5. Nyisson meg egy webböngészőt a szolgáltatás külső IP-címére az Azure Store-alkalmazás működés közbeni megtekintéséhez.

    Képernyőkép az AKS Store mintaalkalmazásról.

A fürt törlése

Ha végzett a gyorsútmutatóval, törölje a felesleges erőforrásokat, hogy elkerülje az Azure-díjakat.

  1. Törölje a rövid útmutatóban létrehozott összes erőforrást a azd down paranccsal.

    azd down
    
  2. Erősítse meg, hogy az összes használt erőforrást el szeretné távolítani az előfizetésből a gépeléssel y és a billentyű lenyomásával Enter.

    ? Total resources to delete: 14, are you sure you want to continue? (y/N)
    
  3. Ha lehetséges, a törlés lehetővé teszi a gyorsindítási változók újbóli felhasználását a beírással y és a lenyomással Enter.

    [Warning]: These resources have soft delete enabled allowing them to be recovered for a period or time after deletion. During this period, their names can't be reused. In the future, you can use the argument --purge to skip this confirmation.
    

A Terraform hibaelhárítása az Azure-ban

A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása.

Következő lépések

Ebben a rövid útmutatóban üzembe helyezett egy Kubernetes-fürtöt, majd üzembe helyezett egy egyszerű többtárolós alkalmazást. Ez a mintaalkalmazás csak bemutató célokra készült, és nem képviseli a Kubernetes-alkalmazások ajánlott eljárásait. Az éles AKS-sel való teljes megoldások létrehozásáról az AKS-megoldásokkal kapcsolatos útmutatást talál.

Ha többet szeretne megtudni az AKS-ről, és végig szeretne járni egy teljes kód–üzembe helyezési példán, folytassa a Kubernetes-fürt oktatóanyagával.