Övning – Distribuera ett program i ditt Azure Kubernetes Service-kluster

Slutförd

I den här övningen distribuerar du företagets webbplats som en testapp till Azure Kubernetes Service (AKS). Webbplatsen är en statisk webbplats med en underliggande teknikstack med HTML, CSS och JavaScript. Den får inte lika många begäranden som de andra tjänsterna och ger oss ett säkert sätt att testa distributionsalternativen.

Kommentar

Koden för webbappen är tillgänglig på den här GitHub-lagringsplatsen om du vill utforska källkoden ytterligare. Dessutom distribueras den här exempelappen endast i en Linux-nodpool.

Viktigt!

Du behöver en egen Azure-prenumeration för att utföra den här övningen, och avgifter kan tillkomma. Om du inte redan har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

Skapa ett distributionsmanifest

Du skapar en distributionsmanifestfil för att distribuera programmet. Manifestfilen gör att du kan definiera vilken typ av resurs du vill distribuera och alla uppgifter som är associerade med arbetsbelastningen.

Kubernetes grupperar containrar till logiska strukturer som kallas poddar, som inte har någon intelligens. Distributioner lägger till den intelligens som saknas för att skapa programmet. Nu ska vi skapa en distributionsfil.

  1. Logga in på Azure Cloud Shell.

  2. I Cloud Shell skapar du en manifestfil för Kubernetes-distributionen med namnet deployment.yaml med hjälp av det integrerade redigeringsprogrammet.

    touch deployment.yaml
    
  3. Öppna det integrerade redigeringsprogrammet i Cloud Shell genom att skriva code .

  4. Öppna filen deployment.yaml och lägg till följande kodavsnitt i YAML.

    # deployment.yaml
    apiVersion: apps/v1 # The API resource where this workload resides
    kind: Deployment # The kind of workload we're creating
    metadata:
      name: contoso-website # This will be the name of the deployment
    

    I den här koden lade du till de två första nycklarna för att instruera Kubernetes om apiVersion och kind för det manifest som du skapar. name är namnet på distributionen. Använd den för att identifiera och fråga distributionsinformationen när du använder kubectl.

    Dricks

    Mer information om apiVersion och vilka värden som ska läggas till i den här nyckeln finns i den officiella Kubernetes-dokumentationen. Det finns en länk i slutet av den här modulen.

  5. En distribution omsluter en podd. Du använder en malldefinition för att definiera poddinformationen i manifestfilen. Mallen placeras i manifestfilen under avsnittet om distributionsspecifikation.

    Uppdatera filen deployment.yaml så att den matchar följande YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata: # Metadata for the pod
          labels:
            app: contoso-website
    

    Poddar använder inte samma namn som distributionerna. Poddens namn är en blandning av distributionens namn med ett slumpmässigt ID som läggs till i slutet.

    Observera användningen av nyckeln labels. Du lägger till nyckeln labels för att tillåta distributioner att hitta och gruppera poddar.

  6. En podd omsluter en eller flera containrar. Alla poddar har ett specifikationsavsnitt som gör att du kan definiera containrar i den podden.

    Uppdatera filen deployment.yaml så att den matchar följande YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          containers: # Here we define all containers
            - name: contoso-website
    

    Nyckeln containers är en matris med containerspecifikationer eftersom en podd kan ha en eller flera containrar. Specifikationen definierar en image, en name, resources, portsoch annan viktig information om containern.

    Alla poddar som körs följer namnet contoso-website-<UUID>, där UUID är ett genererat ID för att identifiera alla resurser unikt.

  7. Det är en bra idé att definiera en minsta och en maximal mängd resurser som appen får använda från klustret. Du använder nyckeln resources för att ange den här informationen.

    Uppdatera filen deployment.yaml så att den matchar följande YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests: # Minimum amount of resources requested
                  cpu: 100m
                  memory: 128Mi
                limits: # Maximum amount of resources requested
                  cpu: 250m
                  memory: 256Mi
    

    Observera hur resursavsnittet gör att du kan ange den lägsta resursmängden som en begäran och den högsta resursmängden som en gräns.

  8. Det sista steget är att definiera de portar som den här containern exponerar externt via ports nyckeln. Nyckeln ports är en matris med objekt, vilket innebär att en container i en podd kan tillgängliggöra flera portar med flera namn.

    Uppdatera filen deployment.yaml så att den matchar följande YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80 # This container exposes port 80
                  name: http # We named that port "http" so we can refer to it later
    

    Observera hur du namnger porten med hjälp av nyckeln name. Genom att namnge portar kan du ändra den tillgängliggjorda porten utan att ändra filer som refererar till den porten.

  9. Lägg slutligen till ett urvalsavsnitt för att definiera de arbetsbelastningar som distributionen hanterar. Nyckeln selector placeras i avsnittet för distributionsspecifikation i manifestfilen. Använd nyckeln matchLabels för att visa en lista över etiketterna för alla poddar som hanteras av distributionen.

    Uppdatera filen deployment.yaml så att den matchar följande YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      selector: # Define the wrapping strategy
        matchLabels: # Match all pods with the defined labels
          app: contoso-website # Labels follow the `name: value` template
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    

    Kommentar

    I ett AKS-kluster som har flera nodpooler (Linux och Windows) definierar den distributionsmanifestfil som tidigare angavs också en nodeSelector för att tala om för AKS-klustret att köra exempelprogrammets podd på en nod som kan köra Linux-containrar.

    Linux-noder kan inte köra Windows-containrar och vice versa.

  10. Spara manifestfilen och stäng redigeringsprogrammet.

Tillämpa manifestet

  1. I Cloud Shell kör du kommandot kubectl apply för att skicka distributionsmanifestet till klustret.

    kubectl apply -f ./deployment.yaml
    

    Kommandot bör ge ett resultat som liknar följande exempel.

    deployment.apps/contoso-website created
    
  2. Kör kommandot kubectl get deploy för att kontrollera om distributionen lyckades.

    kubectl get deploy contoso-website
    

    Kommandot bör mata ut en tabell som liknar följande exempel.

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   0/1     1            0           16s
    
  3. Kör kommandot kubectl get pods för att kontrollera om podden körs.

    kubectl get pods
    

    Kommandot bör mata ut en tabell som liknar följande exempel.

    NAME                               READY   STATUS    RESTARTS   AGE
    contoso-website-7c58c5f699-r79mv   1/1     Running   0          63s