Oefening: een toepassing implementeren in uw Azure Kubernetes Service-cluster

Voltooid

In deze oefening implementeert u de website van uw bedrijf als een test-app in Azure Kubernetes Service (AKS). De website is een statische website met een onderliggende technologiestack van HTML, CSS en JavaScript. Er worden niet zoveel aanvragen op ontvangen als op de andere services en het biedt ons een veilige manier om implementatieopties te testen.

Notitie

De code voor de web-app is beschikbaar in deze GitHub-opslagplaats als u de broncode verder wilt verkennen. Deze voorbeeld-app wordt ook alleen geïmplementeerd in een Linux-knooppuntgroep.

Belangrijk

U hebt uw eigen Azure-abonnement nodig om deze oefening te voltooien en er kunnen kosten in rekening worden gebracht. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Een implementatiemanifest maken

U maakt een implementatiemanifestbestand om uw toepassing te implementeren. Met het manifestbestand kunt u definiëren welk type resource u wilt implementeren en kunt u alle details definiëren die betrekking hebben op de werkbelasting.

In Kubernetes worden containers in logische structuren, genaamd pods, gegroepeerd. Pods hebben geen intelligentie. Met implementaties wordt de ontbrekende intelligentie toegevoegd om uw applicatie te ontwikkelen. We gaan een implementatiebestand maken.

  1. Gebruik een teksteditor zoals Visual Studio Code op uw computer en kopieer en plak de volgende YAML-code in een bestand met de naam deployment.yaml en sla het bestand op.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      selector:
        matchLabels:
          app: contoso-website
      template:
        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
    
    • Er worden twee sleutels gebruikt om het apiVersion en kind manifest te definiëren dat u maakt. Zie de apiVersion voor meer informatie over en welke waarden u in deze sleutel moet plaatsen.
    • De name is de naam van de implementatie. Gebruik deze om de implementatiegegevens te identificeren en op te vragen wanneer u deze gebruikt kubectl.
    • De sjabloondefinitie definieert de podgegevens in het manifestbestand. De sjabloon wordt in het manifestbestand geplaatst, onder de sectie met de implementatiespecificatie.
    • De labels sleutel waarmee implementaties pods kunnen vinden en groeperen.
    • In een AKS-cluster met Linux- en Windows-knooppuntgroepen definieert het implementatiemanifest een nodeSelector om uw AKS-cluster te laten weten dat de pod van de voorbeeldtoepassing moet worden uitgevoerd op een knooppunt waarop Linux-containers kunnen worden uitgevoerd. Linux-knooppunten kunnen geen Windows-containers uitvoeren en omgekeerd.
    • De containers-sleutel is een matrix met containerspecificaties omdat een pod een of meer containers kan hebben. De specificatie definieert een image, a name, resourcesen portsandere belangrijke informatie over de container. Alle actieve pods volgen de naam contoso-website-<UUID>, waarbij UUID een gegenereerde id is om alle resources uniek te identificeren.
    • Het is een goede gewoonte om een minimum en een maximale hoeveelheid resources te definiëren die de app mag gebruiken vanuit het cluster. U gebruikt de resources-sleutel om deze informatie op te geven. In de resourcesectie kunt u het minimale resourcebedrag opgeven als een aanvraag en het maximale resourcebedrag als een limiet.
    • De poorten die deze container extern beschikbaar maakt via de ports sleutel. De ports-sleutel is een matrix met objecten; dit betekent dat een container in een pod meerdere poorten met meerdere namen beschikbaar kan maken. U noemt de poort met behulp van de name sleutel. Door poorten een naam te geven, kunt u de beschikbaar gemaakte poort wijzigen zonder bestanden die naar die poort verwijzen te hoeven wijzigen.
  2. upload deployment.yaml naar uw Cloud Shell-sessie door te kiezen voor Bestanden beheren>uploaden.

Het manifest toepassen

  1. Voer in Cloud Shell de kubectl apply-opdracht uit om de implementatiemanifest in te dienen bij uw cluster.

    kubectl apply -f ./deployment.yaml
    

    Met deze opdracht moet een resultaat worden uitgevoerd dat vergelijkbaar is met het volgende voorbeeld.

    deployment.apps/contoso-website created
    
  2. Voer de kubectl get deploy-opdracht uit om te controleren of de implementatie is geslaagd.

    kubectl get deploy contoso-website
    

    Met deze opdracht moet een tabel worden uitgevoerd dat vergelijkbaar is met het volgende voorbeeld.

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   1/1     1            1           19s
    
  3. Voer de kubectl get pods opdracht uit om te controleren of de pod actief is.

    kubectl get pods
    

    Met deze opdracht moet een tabel worden uitgevoerd dat vergelijkbaar is met het volgende voorbeeld.

    NAME                               READY   STATUS    RESTARTS   AGE
    contoso-website-1c2b3b4b5b-dzsvm   1/1     Running   0          68s