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.
- A Windows Server-csomópontkészletek létrehozásáról további információt a Windows Server-tárolókat támogató AKS-fürt létrehozása című témakörben talál.
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.
- A Terraform telepítése és konfigurálása.
- Töltse le a kubectl fájlt.
- Hozzon létre egy véletlenszerű értéket az Azure-erőforráscsoport nevének random_pet használatával.
- Azure-erőforráscsoport létrehozása azurerm_resource_group használatával.
- Az AzureRM-szolgáltató konfigurációjának elérése az Azure Object ID azurerm_client_config használatával történő lekéréséhez.
- Kubernetes-fürt létrehozása azurerm_kubernetes_cluster használatával.
- Hozzon létre egy AzAPI-erőforrást azapi_resource.
- Hozzon létre egy AzAPI-erőforrást egy SSH-kulcspár létrehozásához azapi_resource_action használatával.
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 Microsoft-fiókkal a Cloud Shell használatával (Bash vagy PowerShell használatával)
- Hitelesítés Microsoft-fiókkal Windows használatával (Bash vagy PowerShell használatával)
- Hitelesítés szolgáltatásnévvel:
- Ha nem rendelkezik egyszerű szolgáltatásnévvel, hozzon létre egy szolgáltatásnevet.
- Hitelesítés az Azure-ban környezeti változók használatával, vagy hitelesítés az Azure-ban a Terraform-szolgáltató blokk használatával
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.
Nyisson meg egy parancssort, amely hozzáfér az Azure CLI-hez.
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.
- A sikeres bejelentkezés
Az aktuális Azure-előfizetés megerősítéséhez futtassa az az account show-t.
az account show
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.com
előfordulhat, hogy a helyőrzőt a következőrelive.com#admin@hotmail.com
kell cserélnie: .
- Cserélje le a
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 megadottaz account set
előfizetésre módosult.
- Cserélje le a
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).
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.
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.
- A környezeti változót globálisan (az
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. AappId
következő lépésben a ,password
éstenant
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.
- Lecserélheti a
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.
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>"
A
~/.bashrc
szkript végrehajtásához futtassasource ~/.bashrc
(vagy annak rövidített megfelelője. ~/.bashrc
). A szkript automatikus futtatásához kiléphet és újra megnyithatja a Cloud Shellt.. ~/.bashrc
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 aARM_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 show
meghatá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.
Hozzon létre egy könyvtárat, amellyel tesztelheti a Terraform-mintakódot, és az aktuális könyvtárként használhatja.
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 {} }
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 }
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" } }
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" }
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 futtatottterraform plan -out main.tfplan
. - Ha másik fájlnevet adott meg a
-out
paraméterhez, használja ugyanazt a fájlnevet a hívásbanterraform apply
. - Ha nem használta a paramétert
-out
, hívjonterraform apply
paraméterek nélkül.
Az eredmények ellenőrzése
Kérje le az Azure-erőforráscsoport nevét az alábbi paranccsal.
resource_group_name=$(terraform output -raw resource_group_name)
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
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
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
- Ha az elején és
Á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
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:
- Á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.
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.
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.
Ellenőrizze az üzembe helyezett podok állapotát a
kubectl get pods
paranccsal. Az összes podot a folytatás előtt készítseRunning
el.kubectl get pods
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-kimenete
store-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
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 akubectl
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
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.
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:
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.
- A
A végrehajtási terv alkalmazásához futtassa a terraformát .
terraform apply main.destroy.tfplan
Szolgáltatásnév törlése
Kérje le a szolgáltatásnév azonosítóját az alábbi paranccsal.
sp=$(terraform output -raw sp)
Törölje a szolgáltatásnevet az az ad sp delete paranccsal.
az ad sp delete --id $sp
- Az Azure Developer CLI (AZD) telepítése
- A Terraform telepítése és konfigurálása.
- Az Azure-Samples/aks-store-demo adattárban használt alkalmazáskódot áttekintheti.
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 azd
talál.
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
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.
Jelentkezzen be a fiókjába a
azd auth login
paranccsal.azd auth login
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 acurl
localhost URL-címre irányuló kérés használatát, amelyre a futtatásazd auth login
után átirányított.Hitelesítés a szervezet bejelentkezési lapján található hitelesítő adataival.
Győződjön meg arról, hogy az Azure CLI-ből próbál csatlakozni.
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 .
Nyisson meg egy terminálablakot, és jelentkezzen be az Azure CLI-vel a
az login
paraméter beállításával--scope
https://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>.
Másolja ki annak a weblapnak a localhost URL-címét, amely a bejelentkezés
azd auth login
után érkezett.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>
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.
Másolja ki a
id
használni kívánt előfizetés mezőjét.Á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:
- Á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.
Hozza létre az összes alkalmazás-erőforrást a
azd up
paranccsal.azd up
azd up
Futtatja a mappa összes horgát azazd-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ó: aazd
horgok referenciája .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)
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 azd
lé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.
Állítsa be a névteret bemutató névtérként
pets
akubectl set-context
parancs használatával.kubectl config set-context --current --namespace=pets
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 vanRunning
.kubectl get pods
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-kimenete
store-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
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 akubectl
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
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.
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.
Törölje a rövid útmutatóban létrehozott összes erőforrást a
azd down
paranccsal.azd down
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ávalEnter
.? Total resources to delete: 14, are you sure you want to continue? (y/N)
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ássalEnter
.[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.