Snabbstart: Distribuera ett AKS-kluster (Azure Kubernetes Service) med Hjälp av Azure-portalen

Azure Kubernetes Service (AKS) är en hanterad Kubernetes-tjänst som gör att du snabbt kan distribuera och hantera kluster. I den här snabbstarten kommer du att göra följande:

  • Distribuera ett AKS-kluster med hjälp av Azure-portalen.
  • Kör ett exempelprogram med flera containrar med en grupp mikrotjänster och webbklientdelar som simulerar ett detaljhandelsscenario.

Kommentar

För att komma igång med att snabbt etablera ett AKS-kluster innehåller den här artikeln steg för att distribuera ett kluster med standardinställningar endast i utvärderingssyfte. Innan du distribuerar ett produktionsklart kluster rekommenderar vi att du bekantar dig med vår referensarkitektur för baslinje för att överväga hur det överensstämmer med dina affärskrav.

Innan du börjar

Den här snabbstarten förutsätter grundläggande kunskaper om Kubernetes-begrepp. Mer information finns i Viktiga koncept för Azure Kubernetes Service (AKS).

Kommentar

Azure Linux-nodpoolen är nu allmänt tillgänglig (GA). Mer information om fördelarna och distributionsstegen finns i Introduktion till Azure Linux Container Host for AKS.

Skapa ett AKS-kluster

  1. Logga in på Azure-portalen.

  2. På startsidan för Azure-portalen väljer du Skapa en resurs.

  3. I avsnittet Kategorier väljer du Containrar>Azure Kubernetes Service (AKS).

  4. På fliken Grundläggande konfigurerar du följande alternativ:

    • Under Projektinformation:
      • Välj en Azure-prenumeration.
      • Skapa en Azure-resursgrupp, till exempel myResourceGroup. Även om du kan välja en befintlig resursgrupp rekommenderar vi att du skapar en resursgrupp för att tillfälligt vara värd för dessa resurser och undvika att påverka dina produktions- eller utvecklingsarbetsbelastningar.
    • Under Klusterinformation:
      • Ange konfigurationen för klusterförinställningen till Dev/Test. Mer information om förinställda konfigurationer finns i Förinställningar för klusterkonfiguration i Azure-portalen.

        Kommentar

        Du kan ändra den förinställda konfigurationen när du skapar klustret genom att välja Jämför förinställningar och välja ett annat alternativ. Skärmbild av Skapa AKS-kluster – förinställda portalalternativ.

      • Ange ett Kubernetes-klusternamn, till exempel myAKSCluster.

      • Välj en region för AKS-klustret.

      • Ange inställningen Tillgänglighetszoner till Ingen.

      • Ange AKS-prisnivån till Kostnadsfri.

      • Låt standardvärdet vara valt för Kubernetes-versionen.

      • Låt inställningen Automatisk uppgradering vara inställd på det rekommenderade värdet, som är Aktiverat med korrigering.

      • Låt inställningen Autentisering och auktorisering vara inställd på Lokala konton med Kubernetes RBAC.

        Skärmbild som visar hur du konfigurerar ett AKS-kluster i Azure-portalen.

  5. Välj Nästa. Lägg till en ny nodpool på fliken Nodpooler :

    • Välj Lägg till nodpool.

    • Ange ett nodpoolnamn, till exempel nplinux.

    • För Läge väljer du Användare.

    • För OS SKU väljer du Ubuntu Linux.

    • Ange inställningen Tillgänglighetszoner till Ingen.

    • Låt kryssrutan Aktivera Azure Spot-instanser vara avmarkerad.

    • För Nodstorlek väljer du Välj en storlek. På sidan Välj en VM-storlek väljer du D2s_v3 och sedan knappen Välj .

    • Låt inställningen Skalningsmetod vara inställd på Autoskalning.

    • Låt fälten Minsta antal noder och Maximalt antal noder vara inställda på standardinställningarna.

      Skärmbild som visar hur du skapar en nodpool som kör Ubuntu Linux.

  6. Låt alla inställningar på de andra flikarna vara inställda på standardinställningarna, förutom inställningarna på fliken Övervakning . Som standard är Azure Monitor-funktionerna Container insights, Azure Monitor managed service for Prometheus och Azure Managed Grafana aktiverade. Du kan spara kostnader genom att inaktivera dem.

  7. Välj Granska + skapa för att köra valideringen i klusterkonfigurationen. När verifieringen är klar väljer du Skapa för att skapa AKS-klustret.

Det tar några minuter att skapa AKS-klustret. När distributionen är klar går du till resursen genom att antingen:

  • Välja Gå till resurs, eller
  • Bläddra till AKS-klusterresursgruppen och välj AKS-resursen. I det här exemplet bläddrar du efter myResourceGroup och väljer resursen myAKSCluster.

Anslut till klustret

Om du vill hantera ett Kubernetes-kluster använder du Kubernetes-kommandoradsklienten kubectl. kubectl är redan installerat om du använder Azure Cloud Shell. Om du inte känner till Cloud Shell kan du läsa Översikt över Azure Cloud Shell.

Om du använder Cloud Shell öppnar du det med >_ knappen överst i Azure-portalen. Om du använder PowerShell lokalt ansluter du till Azure via Connect-AzAccount kommandot . Om du använder Azure CLI lokalt ansluter du till Azure via az login kommandot .

  1. Konfigurera kubectl för att ansluta till kubernetes-klustret med kommandot az aks get-credentials . Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Verifiera anslutningen till klustret med hjälp av kubectl get för att returnera en lista över klusternoderna.

    kubectl get nodes
    

    Följande exempelutdata visar den enskilda nod som skapades i föregående steg. Kontrollera att nodstatusen är Klar.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31718369-0   Ready    agent   6m44s   v1.15.10
    

Distribuera programmet

För att distribuera programmet använder du en manifestfil för att skapa alla objekt som krävs för att köra AKS Store-programmet. En Kubernetes-manifestfil definierar ett klusters önskade tillstånd, till exempel vilka containeravbildningar som ska köras. Manifestet innehåller följande Kubernetes-distributioner och -tjänster:

Skärmbild av Azure Store-exempelarkitektur.

  • Butiksfront: Webbprogram där kunder kan visa produkter och göra beställningar.
  • Produkttjänst: Visar produktinformation.
  • Ordertjänst: Gör beställningar.
  • Rabbit MQ: Meddelandekö för en orderkö.

Kommentar

Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel Rabbit MQ, utan beständig lagring för produktion. Dessa används här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure CosmosDB eller Azure Service Bus.

  1. Öppna en redigerare i Cloud Shell och skapa en fil med namnet aks-store-quickstart.yaml.

  2. Klistra in följande manifest i redigeraren:

    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
    

    En uppdelning av YAML-manifestfiler finns i Distributioner och YAML-manifest.

    Om du skapar och sparar YAML-filen lokalt kan du ladda upp manifestfilen till standardkatalogen i CloudShell genom att välja knappen Ladda upp/ladda ned filer och välja filen från det lokala filsystemet.

  3. Distribuera programmet med kommandot kubectl apply och ange namnet på DITT YAML-manifest:

    kubectl apply -f aks-store-quickstart.yaml
    

    Följande exempelutdata visar distributioner och tjänster:

    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
    

Testa programmet

När programmet körs så exponerar en Kubernetes-tjänst programmets klientdel mot Internet. Den här processen kan ta ett par minuter att slutföra.

  1. Kontrollera statusen för de distribuerade poddarna med kommandot kubectl get pods . Kontrollera att alla poddar är Running innan du fortsätter.

    kubectl get pods
    
  2. Sök efter en offentlig IP-adress för programmet store-front. Övervaka förloppet med hjälp av kommandot kubectl get service med --watch argumentet .

    kubectl get service store-front --watch
    

    EXTERNA IP-utdata för store-front tjänsten visas inledningsvis som väntande:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    

    När DEN EXTERNA IP-adressen ändras från väntande till en faktisk offentlig IP-adress använder du CTRL-C för att stoppa kubectl bevakningsprocessen.

    Följande exempelutdata visar en giltig offentlig IP-adress som har tilldelats tjänsten:

    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. Öppna en webbläsare till tjänstens externa IP-adress för att se hur Azure Store-appen fungerar.

    Skärmbild av AKS Store-exempelprogrammet.

Ta bort klustret

Om du inte planerar att gå igenom AKS-självstudien rensar du onödiga resurser för att undvika Azure-avgifter.

  1. Gå till aks-klusterresursgruppen i Azure-portalen.

  2. Välj Ta bort resursgrupp.

  3. Ange namnet på resursgruppen som ska tas bort och välj sedan Ta bort>.

    Kommentar

    AKS-klustret skapades med en systemtilldelad hanterad identitet. Den här identiteten hanteras av plattformen och kräver inte borttagning.

Nästa steg

I den här snabbstarten distribuerade du ett Kubernetes-kluster och distribuerade sedan ett enkelt program med flera containrar till det. Det här exempelprogrammet är endast i demosyfte och representerar inte alla metodtips för Kubernetes-program. Vägledning om hur du skapar fullständiga lösningar med AKS för produktion finns i AKS-lösningsvägledning.

Om du vill veta mer om AKS och gå igenom ett komplett exempel på kod-till-distribution fortsätter du till självstudiekursen för Kubernetes-klustret.