Gyorsútmutató: Azure Container Linux (ACL) üzembe helyezése AKS-fürthöz az Azure CLI használatával

Az AKS-hez készült Azure Container Linux (ACL) használatának első lépései egy AKS-fürt üzembe helyezésével a Azure CLI használatával.

Ezen rövid útmutató segítségével megtanulhatja a következőket:

  • AKS-klaszter létrehozása az ACL for AKS segítségével.
  • Telepítse a fürtöt az Azure CLI használatával.
  • Futtasson egy többtárolós mintaalkalmazást mikroszolgáltatások és webes kezelőfelületek egy csoportjával, amely egy kiskereskedelmi forgatókönyvet szimulál.

Note

Ez a cikk egy olyan fürt üzembe helyezésének lépéseit tartalmazza, amely csak kiértékelési célokra használja az alapértelmezett beállításokat. 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.

Important

Ha Azure Container Linux (ACL) használ AKS-en, tekintse át az alábbi szempontokat és korlátozásokat:

Prerequisites

A szükséges erőforrás-szolgáltatók regisztrálása

Előfordulhat, hogy regisztrálnia kell a szükséges erőforrás-szolgáltatókat, például Microsoft.ContainerService a Azure-előfizetésében.

Regisztrációs állapot ellenőrzése

Ellenőrizze a regisztrációs állapotot a az provider show paranccsal.

az provider show --namespace Microsoft.ContainerService --query registrationState

Az erőforrás-szolgáltató regisztrálása

Szükség esetén regisztrálja a Microsoft.ContainerService erőforrás-szolgáltatót a az provider register paranccsal.

az provider register --namespace Microsoft.ContainerService

Környezeti változók definiálása

A rövid útmutató során a következő környezeti változók definiálhatók. Tetszés szerint saját egyéni nevekre cserélheti az értékeket.

export RESOURCE_GROUP="myAKSResourceGroup"
export REGION="westus"
export CLUSTER_NAME="myAKSCluster"

Erőforráscsoport létrehozása

Az Azure-erőforráscsoportok olyan logikai csoportok, amelyekben az Azure-erőforrások üzembe helyezése és kezelése történik. Erőforráscsoport létrehozásakor a rendszer kérni fogja, hogy adjon meg egy helyet. Ez a hely az erőforráscsoport metaadatainak tárolási helye, és ahol az erőforrások az Azure-ban futnak, ha nem ad meg egy másik régiót az erőforrás létrehozása során.

Hozzon létre egy erőforráscsoportot a az group create paranccsal.

az group create \
  --name $RESOURCE_GROUP \
  --location $REGION

A kimenet példája:

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup",
  "location": "westus",
  "managedBy": null,
  "name": "myAKSResourceGroup",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

AKS-klaszter létrehozása

Hozzon létre egy AKS-cluster-t a az aks create paranccsal. A --os-sku AzureContainerLinux paraméter úgy konfigurálja a rendszercsomópontkészletet, hogy az ACL-t használja csomópont operációs rendszerként. Az alábbi példa egy egy csomóponttal rendelkező fürtöt hoz létre, és engedélyezi a rendszer által hozzárendelt felügyelt identitást:

az aks create \
  --resource-group $RESOURCE_GROUP \
  --name $CLUSTER_NAME \
  --os-sku AzureContainerLinux \
  --node-count 1 \
  --generate-ssh-keys

Note

Új fürt létrehozásakor az AKS automatikusan létrehoz egy második erőforráscsoportot az AKS-erőforrások tárolásához. További információ: Miért jön létre két erőforráscsoport az AKS-sel?

Csatlakozzon a klaszterhez

A Kubernetes-fürt kezeléséhez használja a Kubernetes parancssori klienst, a kubectl-t. kubectl már telepítve van az Azure Cloud Shell használata esetén. A kubectl helyi telepítéséhez használja a az aks install-cli parancsot.

  1. Konfigurálja a kubectl-t, hogy a az aks get-credentials paranccsal csatlakozhasson a Kubernetes klaszterhez. Ez a parancs letölti a hitelesítő adatokat, és konfigurálja a Kubernetes parancssori felületét a használatukhoz.

    az aks get-credentials \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME
    
  2. Ellenőrizze a klaszterhez való kapcsolatot a kubectl get paranccsal. Ez a parancs a fürtcsomópontok listáját adja vissza.

    kubectl get nodes
    

Az alkalmazás üzembe helyezése

Az alkalmazás üzembe helyezéséhez egy jegyzékfájl használatával hozza létre a AKS Store-alkalmazás futtatásához szükséges összes objektumot. Egy Kubernetes-manifeszt fájl meghatározza a fürt elvárt állapotát, például hogy mely konténerképeket kell futtatni. A manifest a következő Kubernetes üzembe helyezéseket és szolgáltatásokat tartalmazza:

Az Azure Store mintaarchitektúra képernyőképe.

  • Á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.
  • RabbitMQ: Üzenetsor egy rendelési sorhoz.

Note

Nem javasoljuk, hogy állapotalapú tárolókat futtasson, például RabbitMQállandó tárolás nélkül éles környezetben. Itt az egyszerűség kedvéért használjuk, de azt javasoljuk, hogy felügyelt szolgáltatásokat használjon, például az Azure Cosmos DB-t vagy az Azure Service Bust.

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

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: rabbitmq
    spec:
      serviceName: rabbitmq
      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
            startupProbe:
              httpGet:
                path: /health
                port: 3000
              failureThreshold: 5
              initialDelaySeconds: 20
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /health
                port: 3000
              failureThreshold: 3
              initialDelaySeconds: 3
              periodSeconds: 5
            livenessProbe:
              httpGet:
                path: /health
                port: 3000
              failureThreshold: 5
              initialDelaySeconds: 3
              periodSeconds: 3
          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
            env:
            - name: AI_SERVICE_URL
              value: "http://ai-service:5001/"
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 2m
                memory: 20Mi
            readinessProbe:
              httpGet:
                path: /health
                port: 3002
              failureThreshold: 3
              initialDelaySeconds: 3
              periodSeconds: 5
            livenessProbe:
              httpGet:
                path: /health
                port: 3002
              failureThreshold: 5
              initialDelaySeconds: 3
              periodSeconds: 3
    ---
    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
            startupProbe:
              httpGet:
                path: /health
                port: 8080
              failureThreshold: 3
              initialDelaySeconds: 5
              periodSeconds: 5
            readinessProbe:
              httpGet:
                path: /health
                port: 8080
              failureThreshold: 3
              initialDelaySeconds: 3
              periodSeconds: 3
            livenessProbe:
              httpGet:
                path: /health
                port: 8080
              failureThreshold: 5
              initialDelaySeconds: 3
              periodSeconds: 3
    ---
    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, akkor feltöltheti a jegyzékfájlt az alapértelmezett könyvtárba a Cloud Shellben 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 üzembe helyezéseket é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. Győződjön meg arról, hogy az összes pod Running, mielőtt folytatja.

    kubectl get pods
    
  2. Ellenőrizze, hogy van-e nyilvános IP-cím az store-front alkalmazáshoz. Használja a kubectl get service parancsot a --watch argumentummal a folyamat figyeléséhez.

    kubectl get service store-front --watch
    

    EXTERNAL-IP kimenet a store-front szolgáltatáshoz kezdetben függőben 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 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
    
  3. 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.

Fürt törlése

Ha nem tervezi végigvezetni az AKS-oktatóanyagot, törölje a felesleges erőforrásokat az Azure számlázási költségeinek elkerülése érdekében.

Távolítsa el az erőforráscsoportot, a tárolószolgáltatást és az összes kapcsolódó erőforrást a az group delete parancs használatával.

az group delete --name $RESOURCE_GROUP

Az AKS-fürt egy rendszer által hozzárendelt felügyelt identitással lett létrehozva, amely az ebben a gyorsútmutatóban használt alapértelmezett identitásbeállítás. A platform kezeli ezt az identitást, így önnek nem kell manuálisan eltávolítania.

Ebben a rövid útmutatóban az Azure CLI használatával egy AKS-fürtöt helyezett üzembe az AKS-hez készült ACL-lel. Az ACL for AKS-ről a Azure Container Linux (ACL) Azure Kubernetes Service (AKS) című témakörben talál további információt.