Øvelse – Distribuer et program på Azure Kubernetes Service-klyngen
I denne øvelsen distribuerer du firmaets nettsted som en testapp på Azure Kubernetes Service (AKS). Nettstedet er et statisk nettsted med en underliggende teknologistakk med HTML, CSS og JavaScript. Den mottar ikke så mange forespørsler som de andre tjenestene, og gir oss en sikker måte å teste distribusjonsalternativer på.
Notat
Koden for nettappen er tilgjengelig i dette GitHub-repositoriet hvis du vil utforske kildekoden ytterligere. Denne eksempelappen distribueres også bare på et Linux-nodeutvalg.
Viktig
Du trenger ditt eget Azure-abonnement for å fullføre denne øvelsen, og du kan pådra deg kostnader. Hvis du ikke allerede har et Azure-abonnement, kan du opprette en gratis konto før du begynner.
Opprette et distribusjonsmanifest
Du oppretter en distribusjonsmanifestfil for å distribuere programmet. Med manifestfilen kan du definere hvilken type ressurs du vil distribuere, og alle detaljene som er knyttet til arbeidsbelastningen.
Kubernetes grupperer beholdere i logiske strukturer kalt pods, som ikke har intelligens. Distribusjoner legger til manglende intelligens for å opprette programmet. La oss opprette en distribusjonsfil.
Logg på Azure Cloud Shell.
Opprett en manifestfil for Kubernetes-distribusjonen kalt
deployment.yamli Cloud Shell ved hjelp av det integrerte redigeringsprogrammet.touch deployment.yamlÅpne det integrerte redigeringsprogrammet i Cloud Shell ved å skrive inn
code .Åpne
deployment.yaml-filen, og legg til følgende kodeinndeling 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 deploymentI denne koden la du til de to første nøklene for å fortelle Kubernetes
apiVersionogkindmanifest du oppretter. Dennameer navnet på distribusjonen. Bruk den til å identifisere og spørre distribusjonsinformasjonen når du brukerkubectl.Tips
Hvis du vil ha mer informasjon om
apiVersionog hvilke verdier som skal plasseres i denne nøkkelen, kan du se den offisielle Kubernetes-dokumentasjonen. Finn en kobling på slutten av denne modulen.En distribusjon bryter en pod. Du bruker en maldefinisjon til å definere pod-informasjonen i manifestfilen. Malen plasseres i manifestfilen under inndelingen for distribusjonsspesifikasjon.
Oppdater
deployment.yamlfilen slik at den samsvarer med følgende 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-websitePods bruker ikke de samme navnene som distribusjonene. Podens navn er en blanding av distribusjonens navn med en tilfeldig ID lagt til på slutten.
Legg merke til bruken av
labels-tasten. Du legger tillabelsnøkkelen for å tillate distribusjoner å finne og gruppere pods.En pod bryter én eller flere beholdere. Alle pods har en spesifikasjonsinndeling som lar deg definere beholderne inne i poden.
Oppdater
deployment.yamlfilen slik at den samsvarer med følgende 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-websiteDen
containersnøkkelen er en rekke beholderspesifikasjoner fordi en pod kan ha én eller flere beholdere. Spesifikasjonen definerer enimage, enname,resources,portsog annen viktig informasjon om beholderen.Alle kjørende pods følger navnet
contoso-website-<UUID>, der UUID er en generert ID for å identifisere alle ressurser unikt.Det er en god praksis å definere et minimum og en maksimal mengde ressurser som appen har lov til å bruke fra klyngen. Du bruker
resourcestil å angi denne informasjonen.Oppdater
deployment.yamlfilen slik at den samsvarer med følgende 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: 256MiLegg merke til hvordan ressursdelen lar deg angi minimumsressursbeløpet som en forespørsel og maksimalt ressursbeløp som en grense.
Det siste trinnet er å definere portene som denne beholderen viser eksternt gjennom
portsnøkkelen. Denportsnøkkelen er en matrise med objekter, noe som betyr at en beholder i en pod kan vise flere porter med flere navn.Oppdater
deployment.yamlfilen slik at den samsvarer med følgende 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 laterLegg merke til hvordan du navngir porten ved hjelp av
namenøkkelen. Med navneporter kan du endre den eksponerte porten uten å endre filer som refererer til denne porten.Til slutt legger du til en velgerinndeling for å definere arbeidsbelastningene distribusjonen administrerer. Nøkkelen
selectorplasseres i delen for distribusjonsspesifikasjon i manifestfilen. BrukmatchLabelstil å vise etikettene for alle pods som administreres av distribusjonen.Oppdater
deployment.yamlfilen slik at den samsvarer med følgende 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: httpNotat
I en AKS-klynge som har flere nodeutvalg (Linux og Windows), definerer distribusjonsmanifestfilen som tidligere var oppført, også en
nodeSelectorfor å be AKS-klyngen om å kjøre eksempelprogrammets pod på en node som kan kjøre Linux-beholdere.Linux-noder kan ikke kjøre Windows-beholdere og omvendt.
Lagre manifestfilen, og lukk redigeringsprogrammet.
Bruk manifestet
Kjør kommandoen
kubectl applyi Cloud Shell for å sende distribusjonsmanifestet til klyngen.kubectl apply -f ./deployment.yamlKommandoen skal gi et resultat som ligner på følgende eksempel.
deployment.apps/contoso-website createdKjør kommandoen
kubectl get deployfor å kontrollere om distribusjonen var vellykket.kubectl get deploy contoso-websiteKommandoen bør sende ut en tabell som ligner på følgende eksempel.
NAME READY UP-TO-DATE AVAILABLE AGE contoso-website 0/1 1 0 16sKjør kommandoen
kubectl get podsfor å kontrollere om kapselen kjører.kubectl get podsKommandoen bør sende ut en tabell som ligner på følgende eksempel.
NAME READY STATUS RESTARTS AGE contoso-website-7c58c5f699-r79mv 1/1 Running 0 63s