Övning – Distribuera ett program i ditt Azure Kubernetes Service-kluster
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.
Logga in på Azure Cloud Shell.
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
Öppna det integrerade redigeringsprogrammet i Cloud Shell genom att skriva
code .
Ö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
ochkind
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änderkubectl
.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.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 nyckelnlabels
för att tillåta distributioner att hitta och gruppera poddar.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 enimage
, enname
,resources
,ports
och 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.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.
Det sista steget är att definiera de portar som den här containern exponerar externt via
ports
nyckeln. Nyckelnports
ä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.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 nyckelnmatchLabels
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.
Spara manifestfilen och stäng redigeringsprogrammet.
Tillämpa manifestet
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
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
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