Oefening: een toepassing implementeren in uw Azure Kubernetes Service-cluster
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 kunnen uitvoeren. Dit kan kosten met zich meebrengen. 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 toepassing te maken. We gaan een implementatiebestand maken.
Meld u aan bij Azure Cloud Shell.
Maak in Cloud Shell een manifestbestand voor de Kubernetes-implementatie met de naam
deployment.yaml
met behulp van de geïntegreerde editor.touch deployment.yaml
Open de geïntegreerde editor in Cloud Shell door
code .
in te voerenOpen het
deployment.yaml
-bestand en voeg de volgende codesectie van YAML toe.# 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
In deze code hebt u de eerste twee sleutels toegevoegd om aan Kubernetes de
apiVersion
enkind
van het manifest dat u maakt, door te geven. Dename
is de naam van de implementatie. Gebruik deze om de implementatiegegevens te identificeren en op te vragen wanneer u deze gebruiktkubectl
.Tip
Zie de officiële Kubernetes-documentatie voor meer informatie over
apiVersion
en welke waarden u in deze sleutel moet opnemen. Zoek een koppeling aan het einde van deze module.Met een implementatie wordt een pod ingepakt. U gebruikt een sjabloondefinitie om de podinformatie in het manifestbestand te definiëren. De sjabloon wordt in het manifestbestand geplaatst, onder de sectie met de implementatiespecificatie.
Werk het
deployment.yaml
-bestand bij zodat het overeenkomt met de volgende 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
Pods gebruiken niet dezelfde namen als de implementaties. De naam van de pod is een combinatie van de naam van de implementatie met een willekeurige id die aan het einde wordt toegevoegd.
Let op het gebruik van de
labels
-sleutel. U voegt delabels
-sleutel toe om implementaties toe te staan om pods te zoeken en te groeperen.In een pod worden een of meer containers ingepakt. Alle pods hebben een specificatiesectie waarin u de containers in die pod kunt definiëren.
Werk het
deployment.yaml
-bestand bij zodat het overeenkomt met de volgende 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
De
containers
-sleutel is een matrix met containerspecificaties omdat een pod een of meer containers kan hebben. De specificatie definieert eenimage
, aname
,resources
enports
andere 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.Werk het
deployment.yaml
-bestand bij zodat het overeenkomt met de volgende 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
U ziet hoe u met de resourcesectie het minimumaantal resources als een aanvraag kunt opgeven en het maximumaantal resources als een limiet.
De laatste stap is het definiëren van de poorten die deze container extern beschikbaar maakt via de
ports
sleutel. Deports
-sleutel is een matrix met objecten; dit betekent dat een container in een pod meerdere poorten met meerdere namen beschikbaar kan maken.Werk het
deployment.yaml
-bestand bij zodat het overeenkomt met de volgende 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
U ziet hoe u de poort een naam geeft 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.Voeg ten slotte een selectorsectie toe om de workloads te definiëren die de implementatie beheert. De
selector
-sleutel wordt in de implementatiespecificatiesectie van het manifestbestand geplaatst. Gebruik dematchLabels
-sleutel om de labels weer te geven voor alle pods die door de implementatie worden beheerd.Werk het
deployment.yaml
-bestand bij zodat het overeenkomt met de volgende 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
Notitie
In een AKS-cluster met meerdere knooppuntgroepen (Linux en Windows) definieert het distributiemanifestbestand dat eerder wordt vermeld, ook 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.
Sla het manifestbestand op en sluit de editor.
Het manifest toepassen
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
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 0/1 1 0 16s
Voer de
kubectl get pods
-opdracht uit om te controleren of de pod wordt uitgevoerd.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-7c58c5f699-r79mv 1/1 Running 0 63s