Øvelse – Distribuer et program på Azure Kubernetes Service-klyngen

Fullført

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.

  1. Logg på Azure Cloud Shell.

  2. Opprett en manifestfil for Kubernetes-distribusjonen kalt deployment.yaml i Cloud Shell ved hjelp av det integrerte redigeringsprogrammet.

    touch deployment.yaml
    
  3. Åpne det integrerte redigeringsprogrammet i Cloud Shell ved å skrive inn code .

  4. Å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 deployment
    

    I denne koden la du til de to første nøklene for å fortelle Kubernetes apiVersion og kind manifest du oppretter. Den name er navnet på distribusjonen. Bruk den til å identifisere og spørre distribusjonsinformasjonen når du bruker kubectl.

    Tips

    Hvis du vil ha mer informasjon om apiVersion og hvilke verdier som skal plasseres i denne nøkkelen, kan du se den offisielle Kubernetes-dokumentasjonen. Finn en kobling på slutten av denne modulen.

  5. 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.yaml filen 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-website
    

    Pods 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 til labels nøkkelen for å tillate distribusjoner å finne og gruppere pods.

  6. En pod bryter én eller flere beholdere. Alle pods har en spesifikasjonsinndeling som lar deg definere beholderne inne i poden.

    Oppdater deployment.yaml filen 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-website
    

    Den containers nøkkelen er en rekke beholderspesifikasjoner fordi en pod kan ha én eller flere beholdere. Spesifikasjonen definerer en image, en name, 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.

  7. Det er en god praksis å definere et minimum og en maksimal mengde ressurser som appen har lov til å bruke fra klyngen. Du bruker resources til å angi denne informasjonen.

    Oppdater deployment.yaml filen 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: 256Mi
    

    Legg merke til hvordan ressursdelen lar deg angi minimumsressursbeløpet som en forespørsel og maksimalt ressursbeløp som en grense.

  8. Det siste trinnet er å definere portene som denne beholderen viser eksternt gjennom ports nøkkelen. Den ports nøkkelen er en matrise med objekter, noe som betyr at en beholder i en pod kan vise flere porter med flere navn.

    Oppdater deployment.yaml filen 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 later
    

    Legg merke til hvordan du navngir porten ved hjelp av name nøkkelen. Med navneporter kan du endre den eksponerte porten uten å endre filer som refererer til denne porten.

  9. Til slutt legger du til en velgerinndeling for å definere arbeidsbelastningene distribusjonen administrerer. Nøkkelen selector plasseres i delen for distribusjonsspesifikasjon i manifestfilen. Bruk matchLabels til å vise etikettene for alle pods som administreres av distribusjonen.

    Oppdater deployment.yaml filen 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: http
    

    Notat

    I en AKS-klynge som har flere nodeutvalg (Linux og Windows), definerer distribusjonsmanifestfilen som tidligere var oppført, også en nodeSelector for å 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.

  10. Lagre manifestfilen, og lukk redigeringsprogrammet.

Bruk manifestet

  1. Kjør kommandoen kubectl apply i Cloud Shell for å sende distribusjonsmanifestet til klyngen.

    kubectl apply -f ./deployment.yaml
    

    Kommandoen skal gi et resultat som ligner på følgende eksempel.

    deployment.apps/contoso-website created
    
  2. Kjør kommandoen kubectl get deploy for å kontrollere om distribusjonen var vellykket.

    kubectl get deploy contoso-website
    

    Kommandoen 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           16s
    
  3. Kjør kommandoen kubectl get pods for å kontrollere om kapselen kjører.

    kubectl get pods
    

    Kommandoen 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